On Mon, Aug 05, 2019 at 04:02:41PM +0200, Peter Zijlstra wrote:
[...]
>  
>  static inline void percpu_up_read(struct percpu_rw_semaphore *sem)
>  {
> +     rwsem_release(&sem->dep_map, 1, _RET_IP_);
> +
>       preempt_disable();
>       /*
>        * Same as in percpu_down_read().
>        */
> -     if (likely(rcu_sync_is_idle(&sem->rss)))
> +     if (likely(rcu_sync_is_idle(&sem->rss))) {
>               __this_cpu_dec(*sem->read_count);
> -     else
> -             __percpu_up_read(sem); /* Unconditional memory barrier */
> -     preempt_enable();
> +             preempt_enable();
> +             return;
> +     }
>  
> -     rwsem_release(&sem->rw_sem.dep_map, 1, _RET_IP_);

Missing a preempt_enable() here?

Regards,
Boqun

> +     __percpu_up_read(sem); /* Unconditional memory barrier */
>  }
>  
[...]

Attachment: signature.asc
Description: PGP signature

Reply via email to