Messages in this thread | | | Date | Tue, 25 May 2021 12:47:15 +0100 | From | Mel Gorman <> | Subject | Re: [RFC 04/26] mm, slub: simplify kmem_cache_cpu and tid setup |
| |
On Tue, May 25, 2021 at 01:39:24AM +0200, Vlastimil Babka wrote: > In slab_alloc_node() and do_slab_free() fastpaths we need to guarantee that > our kmem_cache_cpu pointer is from the same cpu as the tid value. Currently > that's done by reading the tid first using this_cpu_read(), then the > kmem_cache_cpu pointer and verifying we read the same tid using the pointer and > plain READ_ONCE(). > > This can be simplified to just fetching kmem_cache_cpu pointer and then reading > tid using the pointer. That guarantees they are from the same cpu. We don't > need to read the tid using this_cpu_read() because the value will be validated > by this_cpu_cmpxchg_double(), making sure we are on the correct cpu and the > freelist didn't change by anyone preempting us since reading the tid. > > Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Wow, that's a fun approach to avoiding disabling preemption but the validation check against preemption remains the same so;
Acked-by: Mel Gorman <mgorman@techsingularity.net>
-- Mel Gorman SUSE Labs
| |