On Wed, Nov 22, 2017 at 11:52:05PM +0000, Mateusz Guzik wrote:
> Author: mjg
> Date: Wed Nov 22 23:52:05 2017
> New Revision: 326110
> URL: https://svnweb.freebsd.org/changeset/base/326110
> 
> Log:
>   rwlock: don't check for curthread's read lock count in the fast path
> 
> Modified:
>   head/sys/kern/kern_rwlock.c
> 
> Modified: head/sys/kern/kern_rwlock.c
> ==============================================================================
> --- head/sys/kern/kern_rwlock.c       Wed Nov 22 23:10:20 2017        
> (r326109)
> +++ head/sys/kern/kern_rwlock.c       Wed Nov 22 23:52:05 2017        
> (r326110)
> @@ -364,12 +364,20 @@ _rw_wunlock_cookie(volatile uintptr_t *c, const char *
>   * is unlocked and has no writer waiters or spinners.  Failing otherwise
>   * prioritizes writers before readers.
>   */
> -#define      RW_CAN_READ(td, _rw)                                            
> \
> -    (((_rw) & (RW_LOCK_READ | RW_LOCK_WRITE_WAITERS | 
> RW_LOCK_WRITE_SPINNER)) ==\
> -    RW_LOCK_READ || ((td)->td_rw_rlocks && (_rw) & RW_LOCK_READ))
> +static bool __always_inline
> +__rw_can_read(struct thread *td, uintptr_t v, bool fp)
> +{
>  
> +     if ((v & (RW_LOCK_READ | RW_LOCK_WRITE_WAITERS | RW_LOCK_WRITE_SPINNER))
> +         == RW_LOCK_READ)
> +             return (true);
> +     if (!fp && td->td_rw_rlocks && (v & RW_LOCK_READ))
> +             return (true);
> +     return (false);
> +}

This bit of the patch breaks buildkernel. You left a consumer of
RW_CAN_READ on line 554: MPASS(!RW_CAN_READ(td, v));

Thanks,

-- 
Shawn Webb
Cofounder and Security Engineer
HardenedBSD

GPG Key ID:          0x6A84658F52456EEE
GPG Key Fingerprint: 2ABA B6BD EF6A F486 BE89  3D9E 6A84 658F 5245 6EEE

Attachment: signature.asc
Description: PGP signature

Reply via email to