* [zen-kernel-zen-kernel:5.12/futex2 4/18] kernel/futex2.c:1012:2-11: second lock on line 1012
@ 2021-07-01 11:43 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-07-01 11:43 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 8122 bytes --]
CC: kbuild-all(a)lists.01.org
TO: steven(a)liquorix.net
tree: https://github.com/zen-kernel/zen-kernel 5.12/futex2
head: f8ef78621cdaa4c962fd2a44deedeff3cc6067a0
commit: 270e16f72b29d04a83645b653e9fc65be51801d2 [4/18] futex2: Implement requeue operation
:::::: branch date: 13 hours ago
:::::: commit date: 8 weeks ago
config: arm-randconfig-c024-20210628 (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>
cocci warnings: (new ones prefixed by >>)
>> kernel/futex2.c:1012:2-11: second lock on line 1012
kernel/futex2.c:1016:2-11: second lock on line 1016
--
>> kernel/futex2.c:997:3-9: preceding lock on line 1012
kernel/futex2.c:997:3-9: preceding lock on line 1016
kernel/futex2.c:1003:3-9: preceding lock on line 1012
kernel/futex2.c:1003:3-9: preceding lock on line 1016
vim +1012 kernel/futex2.c
270e16f72b29d0 André Almeida 2021-02-05 972
270e16f72b29d0 André Almeida 2021-02-05 973 static inline int __futex_requeue(struct futex_requeue rq1,
270e16f72b29d0 André Almeida 2021-02-05 974 struct futex_requeue rq2, unsigned int nr_wake,
270e16f72b29d0 André Almeida 2021-02-05 975 unsigned int nr_requeue, u64 cmpval,
270e16f72b29d0 André Almeida 2021-02-05 976 bool shared1, bool shared2)
270e16f72b29d0 André Almeida 2021-02-05 977 {
270e16f72b29d0 André Almeida 2021-02-05 978 struct futex_waiter w1, w2, *aux, *tmp;
270e16f72b29d0 André Almeida 2021-02-05 979 bool retry = false;
270e16f72b29d0 André Almeida 2021-02-05 980 struct futex_bucket *b1, *b2;
270e16f72b29d0 André Almeida 2021-02-05 981 DEFINE_WAKE_Q(wake_q);
270e16f72b29d0 André Almeida 2021-02-05 982 u32 uval;
270e16f72b29d0 André Almeida 2021-02-05 983 int ret;
270e16f72b29d0 André Almeida 2021-02-05 984
270e16f72b29d0 André Almeida 2021-02-05 985 b1 = futex_get_bucket(rq1.uaddr, &w1.key, shared1);
270e16f72b29d0 André Almeida 2021-02-05 986 if (IS_ERR(b1))
270e16f72b29d0 André Almeida 2021-02-05 987 return PTR_ERR(b1);
270e16f72b29d0 André Almeida 2021-02-05 988
270e16f72b29d0 André Almeida 2021-02-05 989 b2 = futex_get_bucket(rq2.uaddr, &w2.key, shared2);
270e16f72b29d0 André Almeida 2021-02-05 990 if (IS_ERR(b2))
270e16f72b29d0 André Almeida 2021-02-05 991 return PTR_ERR(b2);
270e16f72b29d0 André Almeida 2021-02-05 992
270e16f72b29d0 André Almeida 2021-02-05 993 retry:
270e16f72b29d0 André Almeida 2021-02-05 994 if (shared1 && retry) {
270e16f72b29d0 André Almeida 2021-02-05 995 b1 = futex_get_bucket(rq1.uaddr, &w1.key, shared1);
270e16f72b29d0 André Almeida 2021-02-05 996 if (IS_ERR(b1))
270e16f72b29d0 André Almeida 2021-02-05 @997 return PTR_ERR(b1);
270e16f72b29d0 André Almeida 2021-02-05 998 }
270e16f72b29d0 André Almeida 2021-02-05 999
270e16f72b29d0 André Almeida 2021-02-05 1000 if (shared2 && retry) {
270e16f72b29d0 André Almeida 2021-02-05 1001 b2 = futex_get_bucket(rq2.uaddr, &w2.key, shared2);
270e16f72b29d0 André Almeida 2021-02-05 1002 if (IS_ERR(b2))
270e16f72b29d0 André Almeida 2021-02-05 1003 return PTR_ERR(b2);
270e16f72b29d0 André Almeida 2021-02-05 1004 }
270e16f72b29d0 André Almeida 2021-02-05 1005
270e16f72b29d0 André Almeida 2021-02-05 1006 bucket_inc_waiters(b2);
270e16f72b29d0 André Almeida 2021-02-05 1007 /*
270e16f72b29d0 André Almeida 2021-02-05 1008 * To ensure the locks are taken in the same order for all threads (and
270e16f72b29d0 André Almeida 2021-02-05 1009 * thus avoiding deadlocks), take the "smaller" one first
270e16f72b29d0 André Almeida 2021-02-05 1010 */
270e16f72b29d0 André Almeida 2021-02-05 1011 if (b1 <= b2) {
270e16f72b29d0 André Almeida 2021-02-05 @1012 spin_lock(&b1->lock);
270e16f72b29d0 André Almeida 2021-02-05 1013 if (b1 < b2)
270e16f72b29d0 André Almeida 2021-02-05 1014 spin_lock_nested(&b2->lock, SINGLE_DEPTH_NESTING);
270e16f72b29d0 André Almeida 2021-02-05 1015 } else {
270e16f72b29d0 André Almeida 2021-02-05 1016 spin_lock(&b2->lock);
270e16f72b29d0 André Almeida 2021-02-05 1017 spin_lock_nested(&b1->lock, SINGLE_DEPTH_NESTING);
270e16f72b29d0 André Almeida 2021-02-05 1018 }
270e16f72b29d0 André Almeida 2021-02-05 1019
270e16f72b29d0 André Almeida 2021-02-05 1020 ret = futex_get_user(&uval, rq1.uaddr);
270e16f72b29d0 André Almeida 2021-02-05 1021
270e16f72b29d0 André Almeida 2021-02-05 1022 if (unlikely(ret)) {
270e16f72b29d0 André Almeida 2021-02-05 1023 futex_double_unlock(b1, b2);
270e16f72b29d0 André Almeida 2021-02-05 1024 if (__get_user(uval, (u32 __user *)rq1.uaddr))
270e16f72b29d0 André Almeida 2021-02-05 1025 return -EFAULT;
270e16f72b29d0 André Almeida 2021-02-05 1026
270e16f72b29d0 André Almeida 2021-02-05 1027 bucket_dec_waiters(b2);
270e16f72b29d0 André Almeida 2021-02-05 1028 retry = true;
270e16f72b29d0 André Almeida 2021-02-05 1029 goto retry;
270e16f72b29d0 André Almeida 2021-02-05 1030 }
270e16f72b29d0 André Almeida 2021-02-05 1031
270e16f72b29d0 André Almeida 2021-02-05 1032 if (uval != cmpval) {
270e16f72b29d0 André Almeida 2021-02-05 1033 futex_double_unlock(b1, b2);
270e16f72b29d0 André Almeida 2021-02-05 1034
270e16f72b29d0 André Almeida 2021-02-05 1035 bucket_dec_waiters(b2);
270e16f72b29d0 André Almeida 2021-02-05 1036 return -EAGAIN;
270e16f72b29d0 André Almeida 2021-02-05 1037 }
270e16f72b29d0 André Almeida 2021-02-05 1038
270e16f72b29d0 André Almeida 2021-02-05 1039 list_for_each_entry_safe(aux, tmp, &b1->list, list) {
270e16f72b29d0 André Almeida 2021-02-05 1040 if (futex_match(w1.key, aux->key)) {
270e16f72b29d0 André Almeida 2021-02-05 1041 if (ret < nr_wake) {
270e16f72b29d0 André Almeida 2021-02-05 1042 futex_mark_wake(aux, b1, &wake_q);
270e16f72b29d0 André Almeida 2021-02-05 1043 ret++;
270e16f72b29d0 André Almeida 2021-02-05 1044 continue;
270e16f72b29d0 André Almeida 2021-02-05 1045 }
270e16f72b29d0 André Almeida 2021-02-05 1046
270e16f72b29d0 André Almeida 2021-02-05 1047 if (ret >= nr_wake + nr_requeue)
270e16f72b29d0 André Almeida 2021-02-05 1048 break;
270e16f72b29d0 André Almeida 2021-02-05 1049
270e16f72b29d0 André Almeida 2021-02-05 1050 aux->key.pointer = w2.key.pointer;
270e16f72b29d0 André Almeida 2021-02-05 1051 aux->key.index = w2.key.index;
270e16f72b29d0 André Almeida 2021-02-05 1052 aux->key.offset = w2.key.offset;
270e16f72b29d0 André Almeida 2021-02-05 1053
270e16f72b29d0 André Almeida 2021-02-05 1054 if (b1 != b2) {
270e16f72b29d0 André Almeida 2021-02-05 1055 list_del_init(&aux->list);
270e16f72b29d0 André Almeida 2021-02-05 1056 bucket_dec_waiters(b1);
270e16f72b29d0 André Almeida 2021-02-05 1057
270e16f72b29d0 André Almeida 2021-02-05 1058 list_add_tail(&aux->list, &b2->list);
270e16f72b29d0 André Almeida 2021-02-05 1059 bucket_inc_waiters(b2);
270e16f72b29d0 André Almeida 2021-02-05 1060 }
270e16f72b29d0 André Almeida 2021-02-05 1061 ret++;
270e16f72b29d0 André Almeida 2021-02-05 1062 }
270e16f72b29d0 André Almeida 2021-02-05 1063 }
270e16f72b29d0 André Almeida 2021-02-05 1064
270e16f72b29d0 André Almeida 2021-02-05 1065 futex_double_unlock(b1, b2);
270e16f72b29d0 André Almeida 2021-02-05 1066 wake_up_q(&wake_q);
270e16f72b29d0 André Almeida 2021-02-05 1067 bucket_dec_waiters(b2);
270e16f72b29d0 André Almeida 2021-02-05 1068
270e16f72b29d0 André Almeida 2021-02-05 1069 return ret;
270e16f72b29d0 André Almeida 2021-02-05 1070 }
270e16f72b29d0 André Almeida 2021-02-05 1071
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30950 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-07-01 11:43 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-01 11:43 [zen-kernel-zen-kernel:5.12/futex2 4/18] kernel/futex2.c:1012:2-11: second lock on line 1012 kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.