diff --git a/drivers/amlogic/media/frame_sync/ptsserv.c b/drivers/amlogic/media/frame_sync/ptsserv.c index dcb4af3d50de..df3416aec227 100644 --- a/drivers/amlogic/media/frame_sync/ptsserv.c +++ b/drivers/amlogic/media/frame_sync/ptsserv.c @@ -1060,11 +1060,14 @@ int pts_get_rec_num(u8 type, u32 val) pTable = &pts_table[type]; - if (list_empty(&pTable->valid_list)) - return 0; - spin_lock_irqsave(&lock, flags); + if (pTable->status != PTS_RUNNING) + goto out; + + if (list_empty(&pTable->valid_list)) + goto out; + if (pTable->pts_search == &pTable->valid_list) { p = list_entry(pTable->valid_list.next, struct pts_rec_s, list); @@ -1085,6 +1088,7 @@ int pts_get_rec_num(u8 type, u32 val) r++; } +out: spin_unlock_irqrestore(&lock, flags); return r;