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
| ||
|
Message-ID: <20171227035815.GD24828@bombadil.infradead.org> Date: Tue, 26 Dec 2017 19:58:15 -0800 From: Matthew Wilcox <willy@...radead.org> To: "Kirill A. Shutemov" <kirill@...temov.name> Cc: linux-kernel@...r.kernel.org, Matthew Wilcox <mawilcox@...rosoft.com>, Ross Zwisler <ross.zwisler@...ux.intel.com>, David Howells <dhowells@...hat.com>, Shaohua Li <shli@...nel.org>, Jens Axboe <axboe@...nel.dk>, Rehas Sachdeva <aquannie@...il.com>, Marc Zyngier <marc.zyngier@....com>, linux-mm@...ck.org, linux-fsdevel@...r.kernel.org, linux-f2fs-devel@...ts.sourceforge.net, linux-nilfs@...r.kernel.org, linux-btrfs@...r.kernel.org, linux-xfs@...r.kernel.org, linux-usb@...r.kernel.org, linux-raid@...r.kernel.org Subject: Re: [PATCH v5 03/78] xarray: Add the xa_lock to the radix_tree_root On Tue, Dec 26, 2017 at 07:43:40PM -0800, Matthew Wilcox wrote: > Also add the xa_lock() and xa_unlock() family of wrappers to make it > easier to use the lock. If we could rely on -fplan9-extensions in > the compiler, we could avoid all of this syntactic sugar, but that > wasn't added until gcc 4.6. Oh, in case anyone's wondering, here's how I'd do it with plan9 extensions: struct xarray { spinlock_t; int xa_flags; void *xa_head; }; ... spin_lock_irqsave(&mapping->pages, flags); __delete_from_page_cache(page, NULL); spin_unlock_irqrestore(&mapping->pages, flags); ... The plan9 extensions permit passing a pointer to a struct which has an unnamed element to a function which is expecting a pointer to the type of that element. The compiler does any necessary arithmetic to produce a pointer. It's exactly as if I had written: spin_lock_irqsave(&mapping->pages.xa_lock, flags); __delete_from_page_cache(page, NULL); spin_unlock_irqrestore(&mapping->pages.xa_lock, flags); More details here: https://9p.io/sys/doc/compiler.html
Powered by blists - more mailing lists