[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAKgT0UdLA820trYGWkgNR8KFX=QbFbiR_AcrWXwFwrmQzaVmKA@mail.gmail.com>
Date: Mon, 8 Jan 2024 07:45:40 -0800
From: Alexander Duyck <alexander.duyck@...il.com>
To: Yunsheng Lin <linyunsheng@...wei.com>
Cc: davem@...emloft.net, kuba@...nel.org, pabeni@...hat.com,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
Jason Wang <jasowang@...hat.com>, "Michael S. Tsirkin" <mst@...hat.com>,
Alexei Starovoitov <ast@...nel.org>, Daniel Borkmann <daniel@...earbox.net>,
Jesper Dangaard Brouer <hawk@...nel.org>, John Fastabend <john.fastabend@...il.com>, kvm@...r.kernel.org,
virtualization@...ts.linux.dev, bpf@...r.kernel.org
Subject: Re: [PATCH net-next 4/6] vhost/net: remove vhost_net_page_frag_refill()
On Mon, Jan 8, 2024 at 1:06 AM Yunsheng Lin <linyunsheng@...wei.com> wrote:
>
> On 2024/1/6 0:06, Alexander H Duyck wrote:
> >>
> >> static void handle_tx_copy(struct vhost_net *net, struct socket *sock)
> >> @@ -1353,8 +1318,7 @@ static int vhost_net_open(struct inode *inode, struct file *f)
> >> vqs[VHOST_NET_VQ_RX]);
> >>
> >> f->private_data = n;
> >> - n->page_frag.page = NULL;
> >> - n->refcnt_bias = 0;
> >> + n->pf_cache.va = NULL;
> >>
> >> return 0;
> >> }
> >> @@ -1422,8 +1386,9 @@ static int vhost_net_release(struct inode *inode, struct file *f)
> >> kfree(n->vqs[VHOST_NET_VQ_RX].rxq.queue);
> >> kfree(n->vqs[VHOST_NET_VQ_TX].xdp);
> >> kfree(n->dev.vqs);
> >> - if (n->page_frag.page)
> >> - __page_frag_cache_drain(n->page_frag.page, n->refcnt_bias);
> >> + if (n->pf_cache.va)
> >> + __page_frag_cache_drain(virt_to_head_page(n->pf_cache.va),
> >> + n->pf_cache.pagecnt_bias);
> >> kvfree(n);
> >> return 0;
> >> }
> >
> > I would recommend reordering this patch with patch 5. Then you could
> > remove the block that is setting "n->pf_cache.va = NULL" above and just
> > make use of page_frag_cache_drain in the lower block which would also
> > return the va to NULL.
>
> I am not sure if we can as there is no zeroing for 'struct vhost_net' in
> vhost_net_open().
>
> If we don't have "n->pf_cache.va = NULL", don't we use the uninitialized data
> when calling page_frag_alloc_align() for the first time?
I see. So kvmalloc is used instead of kvzalloc when allocating the
structure. That might be an opportunity to clean things up a bit by
making that change to reduce the risk of some piece of memory
initialization being missed.
That said, I still think reordering the two patches might be useful as
it would help to make it so that the change you make to vhost_net is
encapsulated in one patch to fully enable the use of the new page pool
API.
Powered by blists - more mailing lists