Re: [PATCH 2/2] powerpc/mm/memtrace: Let the arch hotunplug code flush cache
On Wed, Apr 11, 2018 at 9:05 PM, Michael Ellermanwrote: > Balbir Singh writes: > >> Don't do this via custom code, instead now that we have support >> in the arch hotplug/hotunplug code, rely on those routines >> to do the right thing. >> >> Fixes: 9d5171a8f248 ("powerpc/powernv: Enable removal of memory for in >> memory tracing") > > That's not really right. > > This patch doesn't fix it, the previous patch did. > > If I just backport this patch then it's still broken. > > So I'll tag patch 1 with the above Fixes: tag and add stable, and then > this just becomes a cleanup. > Fair point, the previous one does indeed fix things. I can do a minimal backport fixing .size to .line_size if needed. Cheers, Balbir
Re: [PATCH 2/2] powerpc/mm/memtrace: Let the arch hotunplug code flush cache
Balbir Singhwrites: > Don't do this via custom code, instead now that we have support > in the arch hotplug/hotunplug code, rely on those routines > to do the right thing. > > Fixes: 9d5171a8f248 ("powerpc/powernv: Enable removal of memory for in memory > tracing") That's not really right. This patch doesn't fix it, the previous patch did. If I just backport this patch then it's still broken. So I'll tag patch 1 with the above Fixes: tag and add stable, and then this just becomes a cleanup. OK? cheers > diff --git a/arch/powerpc/platforms/powernv/memtrace.c > b/arch/powerpc/platforms/powernv/memtrace.c > index de470caf0784..fc222a0c2ac4 100644 > --- a/arch/powerpc/platforms/powernv/memtrace.c > +++ b/arch/powerpc/platforms/powernv/memtrace.c > @@ -82,19 +82,6 @@ static const struct file_operations memtrace_fops = { > .open = simple_open, > }; > > -static void flush_memory_region(u64 base, u64 size) > -{ > - unsigned long line_size = ppc64_caches.l1d.size; > - u64 end = base + size; > - u64 addr; > - > - base = round_down(base, line_size); > - end = round_up(end, line_size); > - > - for (addr = base; addr < end; addr += line_size) > - asm volatile("dcbf 0,%0" : "=r" (addr) :: "memory"); > -} > - > static int check_memblock_online(struct memory_block *mem, void *arg) > { > if (mem->state != MEM_ONLINE) > @@ -132,10 +119,6 @@ static bool memtrace_offline_pages(u32 nid, u64 > start_pfn, u64 nr_pages) > walk_memory_range(start_pfn, end_pfn, (void *)MEM_OFFLINE, > change_memblock_state); > > - /* RCU grace period? */ > - flush_memory_region((u64)__va(start_pfn << PAGE_SHIFT), > - nr_pages << PAGE_SHIFT); > - > lock_device_hotplug(); > remove_memory(nid, start_pfn << PAGE_SHIFT, nr_pages << PAGE_SHIFT); > unlock_device_hotplug(); > -- > 2.13.6
Re: [PATCH 2/2] powerpc/mm/memtrace: Let the arch hotunplug code flush cache
On 06/04/18 15:24, Balbir Singh wrote: > Don't do this via custom code, instead now that we have support > in the arch hotplug/hotunplug code, rely on those routines > to do the right thing. > > Fixes: 9d5171a8f248 ("powerpc/powernv: Enable removal of memory for in memory > tracing") > because the older code uses ppc64_caches.l1d.size instead of > ppc64_caches.l1d.line_size > > Signed-off-by: Balbir SinghReviewed-by: Rashmica Gupta
[PATCH 2/2] powerpc/mm/memtrace: Let the arch hotunplug code flush cache
Don't do this via custom code, instead now that we have support in the arch hotplug/hotunplug code, rely on those routines to do the right thing. Fixes: 9d5171a8f248 ("powerpc/powernv: Enable removal of memory for in memory tracing") because the older code uses ppc64_caches.l1d.size instead of ppc64_caches.l1d.line_size Signed-off-by: Balbir Singh--- arch/powerpc/platforms/powernv/memtrace.c | 17 - 1 file changed, 17 deletions(-) diff --git a/arch/powerpc/platforms/powernv/memtrace.c b/arch/powerpc/platforms/powernv/memtrace.c index de470caf0784..fc222a0c2ac4 100644 --- a/arch/powerpc/platforms/powernv/memtrace.c +++ b/arch/powerpc/platforms/powernv/memtrace.c @@ -82,19 +82,6 @@ static const struct file_operations memtrace_fops = { .open = simple_open, }; -static void flush_memory_region(u64 base, u64 size) -{ - unsigned long line_size = ppc64_caches.l1d.size; - u64 end = base + size; - u64 addr; - - base = round_down(base, line_size); - end = round_up(end, line_size); - - for (addr = base; addr < end; addr += line_size) - asm volatile("dcbf 0,%0" : "=r" (addr) :: "memory"); -} - static int check_memblock_online(struct memory_block *mem, void *arg) { if (mem->state != MEM_ONLINE) @@ -132,10 +119,6 @@ static bool memtrace_offline_pages(u32 nid, u64 start_pfn, u64 nr_pages) walk_memory_range(start_pfn, end_pfn, (void *)MEM_OFFLINE, change_memblock_state); - /* RCU grace period? */ - flush_memory_region((u64)__va(start_pfn << PAGE_SHIFT), - nr_pages << PAGE_SHIFT); - lock_device_hotplug(); remove_memory(nid, start_pfn << PAGE_SHIFT, nr_pages << PAGE_SHIFT); unlock_device_hotplug(); -- 2.13.6