lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 17 Apr 2014 16:22:21 -0400 From: Tejun Heo <tj@...nel.org> To: Shuah Khan <shuah.kh@...sung.com> Cc: gregkh@...uxfoundation.org, m.chehab@...sung.com, rafael.j.wysocki@...el.com, linux@...ck-us.net, toshi.kani@...com, linux-kernel@...r.kernel.org, linux-media@...r.kernel.org, shuahkhan@...il.com Subject: Re: [RFC PATCH 2/2] drivers/base: add managed token devres interfaces On Thu, Apr 17, 2014 at 04:10:34PM -0400, Tejun Heo wrote: > On Thu, Apr 17, 2014 at 02:01:32PM -0600, Shuah Khan wrote: > > Operating on the lock should be atomic, which is what devres_update() > > is doing. It can be simplified as follows by holding devres_lock > > in devm_token_lock(). > > > > spin_lock_irqsave(&dev->devres_lock, flags); > > if (tkn_ptr->status == TOKEN_DEVRES_FREE) > > tkn_ptr->status = TOKEN_DEVRES_BUSY; > > spin_unlock_irqrestore(&dev->devres_lock, flags); > > > > Is this in-line with what you have in mind? > > How is that different from tkn_ptr->status = TOKEN_DEVRES_BUSY? Let me clear it up. How could the code snippet that you wrote possibly function as a lock between two threads? You're doing the following. if (state == busy) return -EBUSY; spin_lock; if (state == free) state = busy; spin_unlock; return SUCCESS!!!11!!1!!; The above is equivalent to if (state == busy) return -EBUSY; state = busy; return SUCCESS!!!11!!1!!; Now, if you let two threads compete on it, both can return SUCCESS. Can you see that? Please consult with somebody who has basic understanding of concurrency and synchronization. Please do not implement locking primitive directly if at all avoidable. Why can't it use a mutex embedded in the data area of a devres entry? And if you for some reason have to implement it directly, at least add lockdep annotations. Anyways, I really think this needs help from somebody who knows better. Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists