All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.