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]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
