> From: linux-hyperv-owner@xxxxxxxxxxxxxxx > <linux-hyperv-owner@xxxxxxxxxxxxxxx> On Behalf Of Michael Kelley > Sent: Thursday, May 2, 2019 3:24 PM > To: Juliana Rodrigueiro <juliana.rodrigueiro@xxxxxxxxxxxxx>; > linux-hyperv@xxxxxxxxxxxxxxx > Cc: netdev@xxxxxxxxxxxxxxx > Subject: RE: Hyperv netvsc - regression for 32-PAE kernel > > From: Juliana Rodrigueiro <juliana.rodrigueiro@xxxxxxxxxxxxx> Sent: Thursday, > May 2, 2019 9:14 AM > > > > So I got to the following commit: > > > > commit 6ba34171bcbd10321c6cf554e0c1144d170f9d1a > > Author: Michael Kelley <mikelley@xxxxxxxxxxxxx> > > Date: Thu Aug 2 03:08:24 2018 +0000 > > > > Drivers: hv: vmbus: Remove use of slow_virt_to_phys() > > > > slow_virt_to_phys() is only implemented for arch/x86. > > Remove its use in arch independent Hyper-V drivers, and > > replace with test for vmalloc() address followed by > > appropriate v-to-p function. This follows the typical > > pattern of other drivers and avoids the need to implement > > slow_virt_to_phys() for Hyper-V on ARM64. > > > > Signed-off-by: Michael Kelley <mikelley@xxxxxxxxxxxxx> > > Signed-off-by: K. Y. Srinivasan <kys@xxxxxxxxxxxxx> > > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > > > > The catch is that slow_virt_to_phys has a special trick implemented in order > > to keep specifically 32-PAE kernel working, it is explained in a comment > > inside the function. > > > > Reverting this commit makes the kernel 4.19 32-bit PAE work again. However > I > > believe a better solution might exist. > > > > Comments are very much appreciated. > > > > Julie -- thanks for tracking down the cause of the issue. I'll try to > look at this tomorrow and propose a solution. > > Michael Kelley Hi Juliana, Can you please try the below one-line patch? It should fix the issue. Thanks, -- Dexuan diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c index 23381c4..aaaee5f 100644 --- a/drivers/hv/channel.c +++ b/drivers/hv/channel.c @@ -38,7 +38,7 @@ static unsigned long virt_to_hvpfn(void *addr) { - unsigned long paddr; + phys_addr_t paddr; if (is_vmalloc_addr(addr)) paddr = page_to_phys(vmalloc_to_page(addr)) +