CC: [email protected]
TO: "André Almeida" <[email protected]>
CC: Steven Barrett <[email protected]>

tree:   https://github.com/zen-kernel/zen-kernel 5.10/futex2
head:   65d8ec592b14a8c75ce2a04bfef5a188cd279d00
commit: f585b7a6e72052dbdee6c9baf387846cbcccb58f [4/13] futex2: Implement 
requeue operation
:::::: branch date: 7 hours ago
:::::: commit date: 7 hours ago
config: i386-randconfig-c001-20210218 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Julia Lawall <[email protected]>


"coccinelle warnings: (new ones prefixed by >>)"
>> kernel/futex2.c:1026:2-11: second lock on line 1026
   kernel/futex2.c:1030:2-11: second lock on line 1030
--
>> kernel/futex2.c:1011:3-9: preceding lock on line 1026
   kernel/futex2.c:1011:3-9: preceding lock on line 1030
   kernel/futex2.c:1017:3-9: preceding lock on line 1026
   kernel/futex2.c:1017:3-9: preceding lock on line 1030
   kernel/futex2.c:1039:3-9: preceding lock on line 1026
   kernel/futex2.c:1039:3-9: preceding lock on line 1030

vim +1026 kernel/futex2.c

f585b7a6e72052 André Almeida 2021-02-05   986  
f585b7a6e72052 André Almeida 2021-02-05   987  static inline int 
__futex_requeue(struct futex_requeue rq1,
f585b7a6e72052 André Almeida 2021-02-05   988                             
struct futex_requeue rq2, unsigned int nr_wake,
f585b7a6e72052 André Almeida 2021-02-05   989                             
unsigned int nr_requeue, unsigned int cmpval,
f585b7a6e72052 André Almeida 2021-02-05   990                             bool 
shared1, bool shared2)
f585b7a6e72052 André Almeida 2021-02-05   991  {
f585b7a6e72052 André Almeida 2021-02-05   992   struct futex_waiter w1, w2, 
*aux, *tmp;
f585b7a6e72052 André Almeida 2021-02-05   993   bool retry = false;
f585b7a6e72052 André Almeida 2021-02-05   994   struct futex_bucket *b1, *b2;
f585b7a6e72052 André Almeida 2021-02-05   995   DEFINE_WAKE_Q(wake_q);
f585b7a6e72052 André Almeida 2021-02-05   996   u32 uval;
f585b7a6e72052 André Almeida 2021-02-05   997   int ret;
f585b7a6e72052 André Almeida 2021-02-05   998  
f585b7a6e72052 André Almeida 2021-02-05   999   b1 = 
futex_get_bucket(rq1.uaddr, &w1.key, shared1);
f585b7a6e72052 André Almeida 2021-02-05  1000   if (IS_ERR(b1))
f585b7a6e72052 André Almeida 2021-02-05  1001           return PTR_ERR(b1);
f585b7a6e72052 André Almeida 2021-02-05  1002  
f585b7a6e72052 André Almeida 2021-02-05  1003   b2 = 
futex_get_bucket(rq2.uaddr, &w2.key, shared2);
f585b7a6e72052 André Almeida 2021-02-05  1004   if (IS_ERR(b2))
f585b7a6e72052 André Almeida 2021-02-05  1005           return PTR_ERR(b2);
f585b7a6e72052 André Almeida 2021-02-05  1006  
f585b7a6e72052 André Almeida 2021-02-05  1007  retry:
f585b7a6e72052 André Almeida 2021-02-05  1008   if (shared1 && retry) {
f585b7a6e72052 André Almeida 2021-02-05  1009           b1 = 
futex_get_bucket(rq1.uaddr, &w1.key, shared1);
f585b7a6e72052 André Almeida 2021-02-05  1010           if (IS_ERR(b1))
f585b7a6e72052 André Almeida 2021-02-05 @1011                   return 
PTR_ERR(b1);
f585b7a6e72052 André Almeida 2021-02-05  1012   }
f585b7a6e72052 André Almeida 2021-02-05  1013  
f585b7a6e72052 André Almeida 2021-02-05  1014   if (shared2 && retry) {
f585b7a6e72052 André Almeida 2021-02-05  1015           b2 = 
futex_get_bucket(rq2.uaddr, &w2.key, shared2);
f585b7a6e72052 André Almeida 2021-02-05  1016           if (IS_ERR(b2))
f585b7a6e72052 André Almeida 2021-02-05  1017                   return 
PTR_ERR(b2);
f585b7a6e72052 André Almeida 2021-02-05  1018   }
f585b7a6e72052 André Almeida 2021-02-05  1019  
f585b7a6e72052 André Almeida 2021-02-05  1020   bucket_inc_waiters(b2);
f585b7a6e72052 André Almeida 2021-02-05  1021   /*
f585b7a6e72052 André Almeida 2021-02-05  1022    * To ensure the locks are 
taken in the same order for all threads (and
f585b7a6e72052 André Almeida 2021-02-05  1023    * thus avoiding deadlocks), 
take the "smaller" one first
f585b7a6e72052 André Almeida 2021-02-05  1024    */
f585b7a6e72052 André Almeida 2021-02-05  1025   if (b1 <= b2) {
f585b7a6e72052 André Almeida 2021-02-05 @1026           spin_lock(&b1->lock);
f585b7a6e72052 André Almeida 2021-02-05  1027           if (b1 < b2)
f585b7a6e72052 André Almeida 2021-02-05  1028                   
spin_lock_nested(&b2->lock, SINGLE_DEPTH_NESTING);
f585b7a6e72052 André Almeida 2021-02-05  1029   } else {
f585b7a6e72052 André Almeida 2021-02-05  1030           spin_lock(&b2->lock);
f585b7a6e72052 André Almeida 2021-02-05  1031           
spin_lock_nested(&b1->lock, SINGLE_DEPTH_NESTING);
f585b7a6e72052 André Almeida 2021-02-05  1032   }
f585b7a6e72052 André Almeida 2021-02-05  1033  
f585b7a6e72052 André Almeida 2021-02-05  1034   ret = futex_get_user(&uval, 
rq1.uaddr);
f585b7a6e72052 André Almeida 2021-02-05  1035  
f585b7a6e72052 André Almeida 2021-02-05  1036   if (unlikely(ret)) {
f585b7a6e72052 André Almeida 2021-02-05  1037           futex_double_unlock(b1, 
b2);
f585b7a6e72052 André Almeida 2021-02-05  1038           if (__get_user(uval, 
(u32 * __user)rq1.uaddr))
f585b7a6e72052 André Almeida 2021-02-05  1039                   return -EFAULT;
f585b7a6e72052 André Almeida 2021-02-05  1040  
f585b7a6e72052 André Almeida 2021-02-05  1041           bucket_dec_waiters(b2);
f585b7a6e72052 André Almeida 2021-02-05  1042           retry = true;
f585b7a6e72052 André Almeida 2021-02-05  1043           goto retry;
f585b7a6e72052 André Almeida 2021-02-05  1044   }
f585b7a6e72052 André Almeida 2021-02-05  1045  
f585b7a6e72052 André Almeida 2021-02-05  1046   if (uval != cmpval) {
f585b7a6e72052 André Almeida 2021-02-05  1047           futex_double_unlock(b1, 
b2);
f585b7a6e72052 André Almeida 2021-02-05  1048  
f585b7a6e72052 André Almeida 2021-02-05  1049           bucket_dec_waiters(b2);
f585b7a6e72052 André Almeida 2021-02-05  1050           return -EAGAIN;
f585b7a6e72052 André Almeida 2021-02-05  1051   }
f585b7a6e72052 André Almeida 2021-02-05  1052  
f585b7a6e72052 André Almeida 2021-02-05  1053   list_for_each_entry_safe(aux, 
tmp, &b1->list, list) {
f585b7a6e72052 André Almeida 2021-02-05  1054           if (futex_match(w1.key, 
aux->key)) {
f585b7a6e72052 André Almeida 2021-02-05  1055                   if (ret < 
nr_wake) {
f585b7a6e72052 André Almeida 2021-02-05  1056                           
futex_mark_wake(aux, b1, &wake_q);
f585b7a6e72052 André Almeida 2021-02-05  1057                           ret++;
f585b7a6e72052 André Almeida 2021-02-05  1058                           
continue;
f585b7a6e72052 André Almeida 2021-02-05  1059                   }
f585b7a6e72052 André Almeida 2021-02-05  1060  
f585b7a6e72052 André Almeida 2021-02-05  1061                   if (ret >= 
nr_wake + nr_requeue)
f585b7a6e72052 André Almeida 2021-02-05  1062                           break;
f585b7a6e72052 André Almeida 2021-02-05  1063  
f585b7a6e72052 André Almeida 2021-02-05  1064                   
aux->key.pointer = w2.key.pointer;
f585b7a6e72052 André Almeida 2021-02-05  1065                   aux->key.index 
= w2.key.index;
f585b7a6e72052 André Almeida 2021-02-05  1066                   aux->key.offset 
= w2.key.offset;
f585b7a6e72052 André Almeida 2021-02-05  1067  
f585b7a6e72052 André Almeida 2021-02-05  1068                   if (b1 != b2) {
f585b7a6e72052 André Almeida 2021-02-05  1069                           
list_del_init_careful(&aux->list);
f585b7a6e72052 André Almeida 2021-02-05  1070                           
bucket_dec_waiters(b1);
f585b7a6e72052 André Almeida 2021-02-05  1071  
f585b7a6e72052 André Almeida 2021-02-05  1072                           
list_add_tail(&aux->list, &b2->list);
f585b7a6e72052 André Almeida 2021-02-05  1073                           
bucket_inc_waiters(b2);
f585b7a6e72052 André Almeida 2021-02-05  1074                   }
f585b7a6e72052 André Almeida 2021-02-05  1075                   ret++;
f585b7a6e72052 André Almeida 2021-02-05  1076           }
f585b7a6e72052 André Almeida 2021-02-05  1077   }
f585b7a6e72052 André Almeida 2021-02-05  1078  
f585b7a6e72052 André Almeida 2021-02-05  1079   futex_double_unlock(b1, b2);
f585b7a6e72052 André Almeida 2021-02-05  1080   wake_up_q(&wake_q);
f585b7a6e72052 André Almeida 2021-02-05  1081   bucket_dec_waiters(b2);
f585b7a6e72052 André Almeida 2021-02-05  1082  
f585b7a6e72052 André Almeida 2021-02-05  1083   return ret;
f585b7a6e72052 André Almeida 2021-02-05  1084  }
f585b7a6e72052 André Almeida 2021-02-05  1085  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to