ulong phy_addr = PAGE_ADDR_OF_MMS(mms, id);
free_page((unsigned long)phys_to_virt(phy_addr));
+ codec_mm_list_lock(smgt);
smgt->one_page_cnt--;
smgt->total_page_num--;
+ codec_mm_list_unlock(smgt);
if (id == mms->page_tail)
mms->page_tail--;
mms->page_cnt--;
return -1;
}
smgt = (struct codec_mm_scatter_mgt *)mms->manager;
+ codec_mm_list_lock(smgt);
mms->page_used = start_free_id;
+ codec_mm_list_unlock(smgt);
if (fast_mode == 1) {
codec_mm_scatter_unlock(mms);
if (want_pages > mms->page_max_cnt)
return CODEC_MM_S_ERR(100);
codec_mm_scatter_lock(mms);
+ codec_mm_list_lock(smgt);
mms->page_used = want_pages;
+ codec_mm_list_unlock(smgt);
if (want_pages > mms->page_cnt) {
ret = codec_mm_page_alloc_all_locked(
smgt,
int is_tvp)
{
struct codec_mm_scatter_mgt *smgt;
+ unsigned long ret = 0;
smgt = codec_mm_get_scatter_mgt(is_tvp);
codec_mm_list_lock(smgt);
start_time + HZ)) {
break;
}
- wait_for_completion_timeout(
+ ret = wait_for_completion_timeout(
&smgt->complete,
HZ/10);
+
+ if (ret == 0)
+ pr_debug("codec_mm_scatter_mgt_delay_free_swith time out\n");
}
pr_info("end: cached pages: %d, speed %d ms\n",
smgt->cached_pages,
if (prov) {
ret = atomic_inc_return(&prov->use_cnt);
if (ret <= 0) {
- atomic_dec_return(&prov->use_cnt);
+ atomic_dec(&prov->use_cnt);
pr_err("%s: Error, provider error-%d\n",
prov->name, atomic_read(&prov->use_cnt));
}
static inline void unuse_provider(struct vframe_provider_s *prov)
{
if (prov)
- atomic_dec_return(&prov->use_cnt);
+ atomic_dec(&prov->use_cnt);
}
#define CLOSED_CNT -100000
static int vf_provider_close(struct vframe_provider_s *prov)
&& (VAL_DIFF(p->val, p2->val) >= 0)) {
/* do interpolation between [p2, p] */
*val =
- div_u64(((p->val - p2->val) *
+ div_u64((((u64)p->val - p2->val) *
(offset - p2->offset)),
(p->offset - p2->offset)) +
p2->val;
params = kstrdup(para, GFP_KERNEL);
params_base = params;
token = params;
- if (!token)
- return 0;
- len = strlen(token);
- do {
- token = strsep(¶ms, " ");
- while (token && (isspace(*token)
- || !isgraph(*token)) && len) {
- token++;
- len--;
- }
- if (len == 0)
- break;
- ret = kstrtoint(token, 0, &res);
- if (ret < 0)
- break;
- if (!token)
- return 0;
+ if (token) {
len = strlen(token);
- *out++ = res;
- count++;
- } while ((token) && (count < para_num) && (len > 0));
+ do {
+ token = strsep(¶ms, " ");
+ if (!token)
+ break;
+ while (token && (isspace(*token)
+ || !isgraph(*token)) && len) {
+ token++;
+ len--;
+ }
+ if (len == 0)
+ break;
+ ret = kstrtoint(token, 0, &res);
+ if (ret < 0)
+ break;
+ len = strlen(token);
+ *out++ = res;
+ count++;
+ } while ((count < para_num) && (len > 0));
+ }
kfree(params_base);
return count;