Messages in this thread | | | Subject | Re: [PATCH v2 4/4] swiotlb: Free tbl memory in swiotlb_exit() | From | Guenter Roeck <> | Date | Sat, 31 Jul 2021 21:26:54 -0700 |
| |
On 7/31/21 7:29 PM, Konrad Rzeszutek Wilk wrote: > On Sat, Jul 31, 2021 at 11:26:11AM -0700, Guenter Roeck wrote: >> Hi, >> >> On Tue, Jul 20, 2021 at 02:38:26PM +0100, Will Deacon wrote: >>> Although swiotlb_exit() frees the 'slots' metadata array referenced by >>> 'io_tlb_default_mem', it leaves the underlying buffer pages allocated >>> despite no longer being usable. >>> >>> Extend swiotlb_exit() to free the buffer pages as well as the slots >>> array. >>> >> >> This patch causes qemu pseries emulations to crash. Backtrace and bisect >> log see below. Reverting it fixes the problem. > > I am 99% sure it is fixed by this patch (which should be in linux-next > in 5 minutes): >
Yes, it does.
FWIW:
Tested-by: Guenter Roeck <linux@roeck-us.net>
Thanks! Guenter
> >>From a449ffaf9181b5a2dc705d8a06b13e0068207fd4 Mon Sep 17 00:00:00 2001 > From: Will Deacon <will@kernel.org> > Date: Fri, 30 Jul 2021 12:42:31 +0100 > Subject: [PATCH] powerpc/svm: Don't issue ultracalls if !mem_encrypt_active() > > Commit ad6c00283163 ("swiotlb: Free tbl memory in swiotlb_exit()") > introduced a set_memory_encrypted() call to swiotlb_exit() so that the > buffer pages are returned to an encrypted state prior to being freed. > > Sachin reports that this leads to the following crash on a Power server: > > [ 0.010799] software IO TLB: tearing down default memory pool > [ 0.010805] ------------[ cut here ]------------ > [ 0.010808] kernel BUG at arch/powerpc/kernel/interrupt.c:98! > > Nick spotted that this is because set_memory_encrypted() is issuing an > ultracall which doesn't exist for the processor, and should therefore > be gated by mem_encrypt_active() to mirror the x86 implementation. > > Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> > Cc: Claire Chang <tientzu@chromium.org> > Cc: Christoph Hellwig <hch@lst.de> > Cc: Robin Murphy <robin.murphy@arm.com> > Fixes: ad6c00283163 ("swiotlb: Free tbl memory in swiotlb_exit()") > Suggested-by: Nicholas Piggin <npiggin@gmail.com> > Reported-by: Sachin Sant <sachinp@linux.vnet.ibm.com> > Tested-by: Sachin Sant <sachinp@linux.vnet.ibm.com> > Tested-by: Nathan Chancellor <nathan@kernel.org> > Link: https://lore.kernel.org/r/1905CD70-7656-42AE-99E2-A31FC3812EAC@linux.vnet.ibm.com/ > Signed-off-by: Will Deacon <will@kernel.org> > Signed-off-by: Konrad Rzeszutek Wilk <konrad@kernel.org> > --- > arch/powerpc/platforms/pseries/svm.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/arch/powerpc/platforms/pseries/svm.c b/arch/powerpc/platforms/pseries/svm.c > index 1d829e257996..87f001b4c4e4 100644 > --- a/arch/powerpc/platforms/pseries/svm.c > +++ b/arch/powerpc/platforms/pseries/svm.c > @@ -63,6 +63,9 @@ void __init svm_swiotlb_init(void) > > int set_memory_encrypted(unsigned long addr, int numpages) > { > + if (!mem_encrypt_active()) > + return 0; > + > if (!PAGE_ALIGNED(addr)) > return -EINVAL; > > @@ -73,6 +76,9 @@ int set_memory_encrypted(unsigned long addr, int numpages) > > int set_memory_decrypted(unsigned long addr, int numpages) > { > + if (!mem_encrypt_active()) > + return 0; > + > if (!PAGE_ALIGNED(addr)) > return -EINVAL; > >
| |