RE: [PATCH V2] net: ethernet: mellanox: correct page conversion

From: Eli Cohen
Date: Mon Apr 18 2016 - 10:55:38 EST

Right, I did not suggest this as a patch but just wanted to pinpoint the problematic issue which is that virt_to_page does not give you the correct pointer to the page.

-----Original Message-----
From: Christoph Hellwig [mailto:hch@xxxxxxxxxxxxx]
Sent: Monday, April 18, 2016 9:33 AM
To: Eli Cohen <eli@xxxxxxxxxxxx>
Cc: Sinan Kaya <okaya@xxxxxxxxxxxxxx>; linux-rdma@xxxxxxxxxxxxxxx; timur@xxxxxxxxxxxxxx; cov@xxxxxxxxxxxxxx; Yishai Hadas <yishaih@xxxxxxxxxxxx>; netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH V2] net: ethernet: mellanox: correct page conversion

On Mon, Apr 18, 2016 at 09:54:47AM +0300, Eli Cohen wrote:
> Sinan,
> if we get rid of the part this code:
> if (BITS_PER_LONG == 64) {
> struct page **pages;
> pages = kmalloc(sizeof *pages * buf->nbufs, gfp);
> if (!pages)
> goto err_free;
> ...
> ...
> if (!buf->direct.buf)
> goto err_free;
> }
> Does that solve the arm issue?

Not quite. You still have code in mlx4_en_map_buffer that performs this mapping later if it it wasn't mapped in mlx4_buf_alloc.

You'll need to get rid of that by ensuring max_direct for all the cases currently using mlx4_en_map_buffer as well.