mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
codec_mm: not to be blocked to wait scatter cache done [1/2]
PD#SWPL-2206 Problem: decoding thread was blocked to wait scatter memory to be cached done. it may take 30+ ms and lead to cts/vts fail Solution: not to wait scatter cached done. it save timing of system Verify: Verified U212 Change-Id: I75fa3e892e0b9b8023c07b62a31ebd43d3c92044 Signed-off-by: Hui Zhang <hui.zhang@amlogic.com>
This commit is contained in:
@@ -2205,6 +2205,14 @@ int codec_mm_scatter_update_config(struct codec_mm_scatter_mgt *smgt)
|
||||
smgt->no_alloc_from_sys = g_scatter.no_alloc_from_sys;
|
||||
return 0;
|
||||
}
|
||||
int codec_mm_scatter_size(int is_tvp)
|
||||
{
|
||||
struct codec_mm_scatter_mgt *smgt;
|
||||
smgt = codec_mm_get_scatter_mgt(is_tvp ? 1 : 0);
|
||||
|
||||
return smgt->total_page_num;
|
||||
}
|
||||
EXPORT_SYMBOL(codec_mm_scatter_size);
|
||||
|
||||
int codec_mm_scatter_mgt_delay_free_swith(
|
||||
int on,
|
||||
@@ -2213,7 +2221,6 @@ int codec_mm_scatter_mgt_delay_free_swith(
|
||||
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);
|
||||
@@ -2231,14 +2238,12 @@ int codec_mm_scatter_mgt_delay_free_swith(
|
||||
}
|
||||
codec_mm_list_unlock(smgt);
|
||||
if (on && wait_size_M > 0 && !is_tvp) {
|
||||
u64 start_time = get_jiffies_64();
|
||||
int try_max = 10;
|
||||
|
||||
smgt->force_cache_on = 1;
|
||||
smgt->force_cache_page_cnt = wait_size_M >> PAGE_SHIFT;
|
||||
smgt->delay_free_timeout_jiffies64 =
|
||||
get_jiffies_64() + 10000 * HZ/1000;
|
||||
codec_mm_schedule_delay_work(smgt, 0, 1);/*start cache*/
|
||||
#if 0
|
||||
while (smgt->total_page_num < smgt->force_cache_page_cnt) {
|
||||
if (smgt->cache_sc &&
|
||||
(smgt->cached_pages >=
|
||||
@@ -2263,6 +2268,7 @@ int codec_mm_scatter_mgt_delay_free_swith(
|
||||
smgt->force_cache_on = 0;
|
||||
smgt->delay_free_timeout_jiffies64 =
|
||||
get_jiffies_64() + delay_ms * HZ/1000;
|
||||
#endif
|
||||
} else if (on) {
|
||||
codec_mm_schedule_delay_work(smgt, 0, 1);
|
||||
} else {
|
||||
@@ -2288,8 +2294,11 @@ static void codec_mm_scatter_cache_manage(
|
||||
(smgt->no_cache_size_M * (SZ_1M >> PAGE_SHIFT)))) {
|
||||
/*have enough pages for most movies.*/
|
||||
/*don't cache more.*/
|
||||
if (smgt->force_cache_on)
|
||||
complete(&smgt->complete);
|
||||
if (smgt->force_cache_on) {
|
||||
smgt->force_cache_on = 0;
|
||||
smgt->delay_free_timeout_jiffies64 =
|
||||
get_jiffies_64() + 2000 * HZ/1000;
|
||||
}
|
||||
} else if ((smgt->cached_pages < smgt->keep_size_PAGE) ||
|
||||
(smgt->force_cache_on &&/*on star cache*/
|
||||
(smgt->total_page_num < smgt->force_cache_page_cnt))
|
||||
@@ -2333,7 +2342,9 @@ static void codec_mm_scatter_cache_manage(
|
||||
smgt->force_cache_on &&
|
||||
(smgt->cached_pages >=
|
||||
smgt->force_cache_page_cnt)) {
|
||||
complete(&smgt->complete);
|
||||
smgt->force_cache_on = 0;
|
||||
smgt->delay_free_timeout_jiffies64 =
|
||||
get_jiffies_64() + 2000 * HZ/1000;
|
||||
}
|
||||
} else if ((smgt->cached_pages >
|
||||
(smgt->keep_size_PAGE + 1000)) &&
|
||||
|
||||
@@ -60,6 +60,7 @@ struct codec_mm_scatter *codec_mm_scatter_alloc(int max_page,
|
||||
int page_num, int istvp);
|
||||
int codec_mm_scatter_alloc_want_pages(struct codec_mm_scatter *mms,
|
||||
int want_pages);
|
||||
int codec_mm_scatter_size(int is_tvp);
|
||||
int codec_mm_scatter_mgt_delay_free_swith(int on, int delay_ms,
|
||||
int wait_size_M, int istvp);
|
||||
int codec_mm_dump_scatter(struct codec_mm_scatter *mms, void *buf, int size);
|
||||
|
||||
Reference in New Issue
Block a user