Re: [PATCH for-next v2 06/18] RDMA/rxe: Add rxe_add_frag() to rxe_mr.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Oct 31, 2022 at 03:27:55PM -0500, Bob Pearson wrote:
> +int rxe_add_frag(struct sk_buff *skb, struct rxe_phys_buf *buf,
> +		 int length, int offset)
> +{
> +	int nr_frags = skb_shinfo(skb)->nr_frags;
> +	skb_frag_t *frag = &skb_shinfo(skb)->frags[nr_frags];
> +
> +	if (nr_frags >= MAX_SKB_FRAGS) {
> +		pr_debug("%s: nr_frags (%d) >= MAX_SKB_FRAGS\n",
> +			__func__, nr_frags);
> +		return -EINVAL;
> +	}
> +
> +	frag->bv_len = length;
> +	frag->bv_offset = offset;
> +	frag->bv_page = virt_to_page(buf->addr);

Assuming this is even OK to do, then please do the xarray conversion
I sketched first:

https://lore.kernel.org/linux-rdma/Y3gvZr6%2FNCii9Avy@xxxxxxxxxx/

And this operation is basically a xa_for_each loop taking 'struct page
*' off of the MR's xarray, slicing it, then stuffing into the
skb. Don't call virt_to_page()

*However* I have no idea if it is even safe to stuff unstable pages
into a skb. Are there other examples doing this? Eg zero copy tcp?

Jason



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux