On Sun, May 17, 2020 at 09:29:32PM -0700, Guenter Roeck wrote: > On Sun, May 17, 2020 at 08:49:39PM -0700, Ira Weiny wrote: > > On Sat, May 16, 2020 at 03:33:06PM -0700, Guenter Roeck wrote: > > > On Thu, May 07, 2020 at 07:59:55AM -0700, ira.we...@intel.com wrote: > > > > From: Ira Weiny <ira.we...@intel.com> > > > > > > > > Every single architecture (including !CONFIG_HIGHMEM) calls... > > > > > > > > pagefault_enable(); > > > > preempt_enable(); > > > > > > > > ... before returning from __kunmap_atomic(). Lift this code into the > > > > kunmap_atomic() macro. > > > > > > > > While we are at it rename __kunmap_atomic() to kunmap_atomic_high() to > > > > be consistent. > > > > > > > > Reviewed-by: Christoph Hellwig <h...@lst.de> > > > > Signed-off-by: Ira Weiny <ira.we...@intel.com> > > > > > > This patch results in: > > > > > > Starting init: /bin/sh exists but couldn't execute it (error -14) > > > > > > when trying to boot microblazeel:petalogix-ml605 in qemu. > > > > Thanks for the report. I'm not readily seeing the issue. > > > > Do you have a kernel config? Specifically is CONFIG_HIGHMEM set? > > > See below. Yes, CONFIG_HIGHMEM is set. > > The scripts used to build and boot the image are at: > > https://github.com/groeck/linux-build-test/tree/master/rootfs/microblazeel > > Hope this helps,
Thank you ... Could you try the following patch? commit 82c284b2bb74ca195dfcd35b70a175f010b9fd46 (HEAD -> lm-kmap17) Author: Ira Weiny <ira.we...@intel.com> Date: Mon May 18 11:01:10 2020 -0700 microblaze/kmap: Don't enable pagefault/preempt twice The kunmap_atomic clean up failed to remove the pagefault/preempt enables on this path. Fixes: bee2128a09e6 ("arch/kunmap_atomic: consolidate duplicate code") Signed-off-by: Ira Weiny <ira.we...@intel.com> diff --git a/arch/microblaze/mm/highmem.c b/arch/microblaze/mm/highmem.c index ee8a422b2b76..92e0890416c9 100644 --- a/arch/microblaze/mm/highmem.c +++ b/arch/microblaze/mm/highmem.c @@ -57,11 +57,8 @@ void kunmap_atomic_high(void *kvaddr) int type; unsigned int idx; - if (vaddr < __fix_to_virt(FIX_KMAP_END)) { - pagefault_enable(); - preempt_enable(); + if (vaddr < __fix_to_virt(FIX_KMAP_END)) return; - } type = kmap_atomic_idx();