Lines Matching defs:rtsp

650 static bool (*rts_acquire)(struct refscale_typesafe *rtsp, unsigned int *start);
651 static bool (*rts_release)(struct refscale_typesafe *rtsp, unsigned int start);
654 static bool typesafe_ref_acquire(struct refscale_typesafe *rtsp, unsigned int *start)
656 return atomic_inc_not_zero(&rtsp->rts_refctr);
660 static bool typesafe_ref_release(struct refscale_typesafe *rtsp, unsigned int start)
662 if (!atomic_dec_return(&rtsp->rts_refctr)) {
663 WRITE_ONCE(rtsp->a, rtsp->a + 1);
664 kmem_cache_free(typesafe_kmem_cachep, rtsp);
670 static bool typesafe_lock_acquire(struct refscale_typesafe *rtsp, unsigned int *start)
672 spin_lock(&rtsp->rts_lock);
677 static bool typesafe_lock_release(struct refscale_typesafe *rtsp, unsigned int start)
679 spin_unlock(&rtsp->rts_lock);
684 static bool typesafe_seqlock_acquire(struct refscale_typesafe *rtsp, unsigned int *start)
686 *start = read_seqbegin(&rtsp->rts_seqlock);
692 static bool typesafe_seqlock_release(struct refscale_typesafe *rtsp, unsigned int start)
694 return !read_seqretry(&rtsp->rts_seqlock, start);
706 struct refscale_typesafe *rtsp;
715 rtsp = rcu_dereference(rtsarray[idx]);
716 a = READ_ONCE(rtsp->a);
717 if (!rts_acquire(rtsp, &start)) {
721 if (a != READ_ONCE(rtsp->a)) {
722 (void)rts_release(rtsp, start);
727 b = READ_ONCE(rtsp->a);
729 if (!rts_release(rtsp, start)) {
734 b = rtsp->b;
752 struct refscale_typesafe *rtsp;
754 rtsp = kmem_cache_alloc(typesafe_kmem_cachep, GFP_KERNEL);
755 if (!rtsp)
757 atomic_set(&rtsp->rts_refctr, 1);
758 WRITE_ONCE(rtsp->a, rtsp->a + 1);
759 WRITE_ONCE(rtsp->b, rtsp->a * rtsp->a);
760 return rtsp;
767 struct refscale_typesafe *rtsp = rtsp_in;
769 spin_lock_init(&rtsp->rts_lock);
770 seqlock_init(&rtsp->rts_seqlock);
772 rtsp->a = torture_random(this_cpu_ptr(&refscale_rand));