diff options
Diffstat (limited to 'kernel/async.c')
| -rw-r--r-- | kernel/async.c | 20 | 
1 files changed, 12 insertions, 8 deletions
| diff --git a/kernel/async.c b/kernel/async.c index 2cbd3dd5940d..a893d6170944 100644 --- a/kernel/async.c +++ b/kernel/async.c @@ -84,20 +84,24 @@ static atomic_t entry_count;  static async_cookie_t lowest_in_progress(struct async_domain *domain)  { -	struct list_head *pending; +	struct async_entry *first = NULL;  	async_cookie_t ret = ASYNC_COOKIE_MAX;  	unsigned long flags;  	spin_lock_irqsave(&async_lock, flags); -	if (domain) -		pending = &domain->pending; -	else -		pending = &async_global_pending; +	if (domain) { +		if (!list_empty(&domain->pending)) +			first = list_first_entry(&domain->pending, +					struct async_entry, domain_list); +	} else { +		if (!list_empty(&async_global_pending)) +			first = list_first_entry(&async_global_pending, +					struct async_entry, global_list); +	} -	if (!list_empty(pending)) -		ret = list_first_entry(pending, struct async_entry, -				       domain_list)->cookie; +	if (first) +		ret = first->cookie;  	spin_unlock_irqrestore(&async_lock, flags);  	return ret; | 
