2022-09-15 13:23:19

by Fabio M. De Francesco

[permalink] [raw]
Subject: [RESEND PATCH] ixgbe: Don't call kmap() on page allocated with GFP_ATOMIC

Pages allocated with GFP_ATOMIC cannot come from Highmem. This is why
there is no need to call kmap() on them.

Therefore, don't call kmap() on rx_buffer->page() and instead use a
plain page_address() to get the kernel address.

Suggested-by: Ira Weiny <[email protected]>
Suggested-by: Alexander Duyck <[email protected]>
Reviewed-by: Ira Weiny <[email protected]>
Reviewed-by: Alexander Duyck <[email protected]>
Tested-by: Gurucharan <[email protected]>
Signed-off-by: Fabio M. De Francesco <[email protected]>
---

I send again this patch because it was submitted more than two months ago,
Monday 4th July 2022, but for one or more (good?) reasons it has not yet
reached Linus' tree. In the meantime I am also forwarding two "Reviewed-by"
and one "Tested-by" tags (thanks a lot to Ira, Alexander, Gurucharan).
Obviously I have not made any changes to the code.

drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index 04f453eabef6..cb5c707538a5 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -1964,15 +1964,13 @@ static bool ixgbe_check_lbtest_frame(struct ixgbe_rx_buffer *rx_buffer,

frame_size >>= 1;

- data = kmap(rx_buffer->page) + rx_buffer->page_offset;
+ data = page_address(rx_buffer->page) + rx_buffer->page_offset;

if (data[3] != 0xFF ||
data[frame_size + 10] != 0xBE ||
data[frame_size + 12] != 0xAF)
match = false;

- kunmap(rx_buffer->page);
-
return match;
}

--
2.37.2


2022-09-15 17:28:15

by Ira Weiny

[permalink] [raw]
Subject: Re: [RESEND PATCH] ixgbe: Don't call kmap() on page allocated with GFP_ATOMIC

On Thu, Sep 15, 2022 at 09:30:50AM -0700, Tony Nguyen wrote:
>
>
> On 9/15/2022 5:40 AM, Fabio M. De Francesco wrote:
> > Pages allocated with GFP_ATOMIC cannot come from Highmem. This is why
> > there is no need to call kmap() on them.
> >
> > Therefore, don't call kmap() on rx_buffer->page() and instead use a
> > plain page_address() to get the kernel address.
> >
> > Suggested-by: Ira Weiny <[email protected]>
> > Suggested-by: Alexander Duyck <[email protected]>
> > Reviewed-by: Ira Weiny <[email protected]>
> > Reviewed-by: Alexander Duyck <[email protected]>
> > Tested-by: Gurucharan <[email protected]>
> > Signed-off-by: Fabio M. De Francesco <[email protected]>
> > ---
> >
> > I send again this patch because it was submitted more than two months ago,
> > Monday 4th July 2022, but for one or more (good?) reasons it has not yet
> > reached Linus' tree. In the meantime I am also forwarding two "Reviewed-by"
> > and one "Tested-by" tags (thanks a lot to Ira, Alexander, Gurucharan).
> > Obviously I have not made any changes to the code.
>
> Hi Fabio,
>
> This is accepted into net-next already[1] and will land in the next kernel.

Thanks, sorry just saw this after sending my last. :-/ :-D

Ira

>
> Thanks,
> Tony
>
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=03f51719df032637250af828f9a1ffcc5695982d

2022-09-15 17:28:54

by Tony Nguyen

[permalink] [raw]
Subject: Re: [RESEND PATCH] ixgbe: Don't call kmap() on page allocated with GFP_ATOMIC



On 9/15/2022 5:40 AM, Fabio M. De Francesco wrote:
> Pages allocated with GFP_ATOMIC cannot come from Highmem. This is why
> there is no need to call kmap() on them.
>
> Therefore, don't call kmap() on rx_buffer->page() and instead use a
> plain page_address() to get the kernel address.
>
> Suggested-by: Ira Weiny <[email protected]>
> Suggested-by: Alexander Duyck <[email protected]>
> Reviewed-by: Ira Weiny <[email protected]>
> Reviewed-by: Alexander Duyck <[email protected]>
> Tested-by: Gurucharan <[email protected]>
> Signed-off-by: Fabio M. De Francesco <[email protected]>
> ---
>
> I send again this patch because it was submitted more than two months ago,
> Monday 4th July 2022, but for one or more (good?) reasons it has not yet
> reached Linus' tree. In the meantime I am also forwarding two "Reviewed-by"
> and one "Tested-by" tags (thanks a lot to Ira, Alexander, Gurucharan).
> Obviously I have not made any changes to the code.

Hi Fabio,

This is accepted into net-next already[1] and will land in the next kernel.

Thanks,
Tony

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=03f51719df032637250af828f9a1ffcc5695982d

2022-09-15 17:36:15

by Ira Weiny

[permalink] [raw]
Subject: Re: [RESEND PATCH] ixgbe: Don't call kmap() on page allocated with GFP_ATOMIC

On Thu, Sep 15, 2022 at 02:40:12PM +0200, Fabio M. De Francesco wrote:
> Pages allocated with GFP_ATOMIC cannot come from Highmem. This is why
> there is no need to call kmap() on them.
>
> Therefore, don't call kmap() on rx_buffer->page() and instead use a
> plain page_address() to get the kernel address.
>
> Suggested-by: Ira Weiny <[email protected]>
> Suggested-by: Alexander Duyck <[email protected]>
> Reviewed-by: Ira Weiny <[email protected]>
> Reviewed-by: Alexander Duyck <[email protected]>
> Tested-by: Gurucharan <[email protected]>
> Signed-off-by: Fabio M. De Francesco <[email protected]>
> ---
>
> I send again this patch because it was submitted more than two months ago,
> Monday 4th July 2022, but for one or more (good?) reasons it has not yet
> reached Linus' tree. In the meantime I am also forwarding two "Reviewed-by"
> and one "Tested-by" tags (thanks a lot to Ira, Alexander, Gurucharan).
> Obviously I have not made any changes to the code.

I see this applied by Tony Nguyen in linux-next:

03f51719df03 ixgbe: Don't call kmap() on page allocated with GFP_ATOMIC

So I assume it will land in the next merge window?

Move Tony to the To line.

Ira

>
> drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> index 04f453eabef6..cb5c707538a5 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> @@ -1964,15 +1964,13 @@ static bool ixgbe_check_lbtest_frame(struct ixgbe_rx_buffer *rx_buffer,
>
> frame_size >>= 1;
>
> - data = kmap(rx_buffer->page) + rx_buffer->page_offset;
> + data = page_address(rx_buffer->page) + rx_buffer->page_offset;
>
> if (data[3] != 0xFF ||
> data[frame_size + 10] != 0xBE ||
> data[frame_size + 12] != 0xAF)
> match = false;
>
> - kunmap(rx_buffer->page);
> -
> return match;
> }
>
> --
> 2.37.2
>