pvr_sync_callback callback,
struct pvr_pending_sync *pending_sync)
{
+ bool complete = false;
u32 pending_read_ops = sync_info->psSyncData->ui32ReadOpsPending;
u32 pending_write_ops = sync_info->psSyncData->ui32WriteOpsPending;
pending_sync->flags = flags;
pending_sync->callback = callback;
+ spin_lock_irq(&sync_lock);
/* If the object is already in sync, don't add it to the list */
- if (pending_ops_completed(sync_info, flags,
+ if (!pending_ops_completed(sync_info, flags,
pending_read_ops,
- pending_write_ops)) {
- callback(pending_sync, false);
- return;
- }
+ pending_write_ops))
+ list_add_tail(&pending_sync->list, &sync_list);
+ else
+ complete = true;
- spin_lock_irq(&sync_lock);
- list_add_tail(&pending_sync->list, &sync_list);
spin_unlock_irq(&sync_lock);
+ if (complete)
+ callback(pending_sync, false);
return;
}