--- zzzz-none-000/linux-4.1.52/arch/arm/include/asm/spinlock.h 2018-05-28 02:26:45.000000000 +0000 +++ bcm63-7530ax-731/linux-4.1.52/arch/arm/include/asm/spinlock.h 2022-03-02 11:37:12.000000000 +0000 @@ -76,8 +76,11 @@ wfe(); lockval.tickets.owner = ACCESS_ONCE(lock->tickets.owner); } - +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_B15_MEGA_BARRIER) + smp_rmb(); +#else smp_mb(); +#endif } static inline int arch_spin_trylock(arch_spinlock_t *lock) @@ -99,7 +102,11 @@ } while (res); if (!contended) { +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_B15_MEGA_BARRIER) + smp_rmb(); +#else smp_mb(); +#endif return 1; } else { return 0; @@ -108,7 +115,11 @@ static inline void arch_spin_unlock(arch_spinlock_t *lock) { +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_B15_MEGA_BARRIER) + smp_rmb(); +#else smp_mb(); +#endif lock->tickets.owner++; dsb_sev(); } @@ -154,7 +165,11 @@ : "r" (&rw->lock), "r" (0x80000000) : "cc"); +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_B15_MEGA_BARRIER) + smp_rmb(); +#else smp_mb(); +#endif } static inline int arch_write_trylock(arch_rwlock_t *rw) @@ -174,7 +189,11 @@ } while (res); if (!contended) { +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_B15_MEGA_BARRIER) + smp_rmb(); +#else smp_mb(); +#endif return 1; } else { return 0; @@ -183,7 +202,11 @@ static inline void arch_write_unlock(arch_rwlock_t *rw) { +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_B15_MEGA_BARRIER) + smp_rmb(); +#else smp_mb(); +#endif __asm__ __volatile__( "str %1, [%0]\n" @@ -225,7 +248,11 @@ : "r" (&rw->lock) : "cc"); +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_B15_MEGA_BARRIER) + smp_rmb(); +#else smp_mb(); +#endif } static inline void arch_read_unlock(arch_rwlock_t *rw) @@ -267,7 +294,11 @@ /* If the lock is negative, then it is already held for write. */ if (contended < 0x80000000) { +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_B15_MEGA_BARRIER) + smp_rmb(); +#else smp_mb(); +#endif return 1; } else { return 0;