Lines Matching refs:rtsp

680 static bool (*rts_acquire)(struct refscale_typesafe *rtsp, unsigned int *start);
681 static bool (*rts_release)(struct refscale_typesafe *rtsp, unsigned int start);
684 static bool typesafe_ref_acquire(struct refscale_typesafe *rtsp, unsigned int *start) in typesafe_ref_acquire() argument
686 return atomic_inc_not_zero(&rtsp->rts_refctr); in typesafe_ref_acquire()
690 static bool typesafe_ref_release(struct refscale_typesafe *rtsp, unsigned int start) in typesafe_ref_release() argument
692 if (!atomic_dec_return(&rtsp->rts_refctr)) { in typesafe_ref_release()
693 WRITE_ONCE(rtsp->a, rtsp->a + 1); in typesafe_ref_release()
694 kmem_cache_free(typesafe_kmem_cachep, rtsp); in typesafe_ref_release()
700 static bool typesafe_lock_acquire(struct refscale_typesafe *rtsp, unsigned int *start) in typesafe_lock_acquire() argument
702 spin_lock(&rtsp->rts_lock); in typesafe_lock_acquire()
707 static bool typesafe_lock_release(struct refscale_typesafe *rtsp, unsigned int start) in typesafe_lock_release() argument
709 spin_unlock(&rtsp->rts_lock); in typesafe_lock_release()
714 static bool typesafe_seqlock_acquire(struct refscale_typesafe *rtsp, unsigned int *start) in typesafe_seqlock_acquire() argument
716 *start = read_seqbegin(&rtsp->rts_seqlock); in typesafe_seqlock_acquire()
722 static bool typesafe_seqlock_release(struct refscale_typesafe *rtsp, unsigned int start) in typesafe_seqlock_release() argument
724 return !read_seqretry(&rtsp->rts_seqlock, start); in typesafe_seqlock_release()
736 struct refscale_typesafe *rtsp; in typesafe_delay_section() local
745 rtsp = rcu_dereference(rtsarray[idx]); in typesafe_delay_section()
746 a = READ_ONCE(rtsp->a); in typesafe_delay_section()
747 if (!rts_acquire(rtsp, &start)) { in typesafe_delay_section()
751 if (a != READ_ONCE(rtsp->a)) { in typesafe_delay_section()
752 (void)rts_release(rtsp, start); in typesafe_delay_section()
757 b = READ_ONCE(rtsp->a); in typesafe_delay_section()
759 if (!rts_release(rtsp, start)) { in typesafe_delay_section()
764 b = rtsp->b; in typesafe_delay_section()
782 struct refscale_typesafe *rtsp; in typesafe_alloc_one() local
784 rtsp = kmem_cache_alloc(typesafe_kmem_cachep, GFP_KERNEL); in typesafe_alloc_one()
785 if (!rtsp) in typesafe_alloc_one()
787 atomic_set(&rtsp->rts_refctr, 1); in typesafe_alloc_one()
788 WRITE_ONCE(rtsp->a, rtsp->a + 1); in typesafe_alloc_one()
789 WRITE_ONCE(rtsp->b, rtsp->a * rtsp->a); in typesafe_alloc_one()
790 return rtsp; in typesafe_alloc_one()
797 struct refscale_typesafe *rtsp = rtsp_in; in refscale_typesafe_ctor() local
799 spin_lock_init(&rtsp->rts_lock); in refscale_typesafe_ctor()
800 seqlock_init(&rtsp->rts_seqlock); in refscale_typesafe_ctor()
802 rtsp->a = torture_random(this_cpu_ptr(&refscale_rand)); in refscale_typesafe_ctor()