Message ID | 20240625135216.47007-10-linyunsheng@huawei.com (mailing list archive) |
---|---|
State | Deferred |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | First try to replace page_frag with page_frag_cache | expand |
On Tue, 2024-06-25 at 21:52 +0800, Yunsheng Lin wrote: > introduce the skb_copy_to_va_nocache() helper to avoid > calling virt_to_page() and skb_copy_to_page_nocache(). > > CC: Alexander Duyck <alexander.duyck@gmail.com> > Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com> > --- > include/net/sock.h | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/include/net/sock.h b/include/net/sock.h > index cce23ac4d514..7ad235465485 100644 > --- a/include/net/sock.h > +++ b/include/net/sock.h > @@ -2201,6 +2201,21 @@ static inline int skb_copy_to_page_nocache(struct sock *sk, struct iov_iter *fro > return 0; > } > > +static inline int skb_copy_to_va_nocache(struct sock *sk, struct iov_iter *from, > + struct sk_buff *skb, char *va, int copy) > +{ > + int err; > + > + err = skb_do_copy_data_nocache(sk, skb, from, va, copy, skb->len); > + if (err) > + return err; > + > + skb_len_add(skb, copy); > + sk_wmem_queued_add(sk, copy); > + sk_mem_charge(sk, copy); > + return 0; > +} > + > /** > * sk_wmem_alloc_get - returns write allocations > * @sk: socket One minor nit. Rather than duplicate skb_copy_to_page_nocache you would be better served to implement this one before it, and then just update skb_copy_to_page_nocache to be: return skb_copy_to_va_nocache(sk, from, skb, page_address(page) + off, copy); We can save ourselves at least a few lines of code that way and it creates one spot to do any changes.
On 2024/7/2 23:52, Alexander H Duyck wrote: > On Tue, 2024-06-25 at 21:52 +0800, Yunsheng Lin wrote: >> introduce the skb_copy_to_va_nocache() helper to avoid >> calling virt_to_page() and skb_copy_to_page_nocache(). >> >> CC: Alexander Duyck <alexander.duyck@gmail.com> >> Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com> >> --- >> include/net/sock.h | 15 +++++++++++++++ >> 1 file changed, 15 insertions(+) >> >> diff --git a/include/net/sock.h b/include/net/sock.h >> index cce23ac4d514..7ad235465485 100644 >> --- a/include/net/sock.h >> +++ b/include/net/sock.h >> @@ -2201,6 +2201,21 @@ static inline int skb_copy_to_page_nocache(struct sock *sk, struct iov_iter *fro >> return 0; >> } >> >> +static inline int skb_copy_to_va_nocache(struct sock *sk, struct iov_iter *from, >> + struct sk_buff *skb, char *va, int copy) >> +{ >> + int err; >> + >> + err = skb_do_copy_data_nocache(sk, skb, from, va, copy, skb->len); >> + if (err) >> + return err; >> + >> + skb_len_add(skb, copy); >> + sk_wmem_queued_add(sk, copy); >> + sk_mem_charge(sk, copy); >> + return 0; >> +} >> + >> /** >> * sk_wmem_alloc_get - returns write allocations >> * @sk: socket > > One minor nit. Rather than duplicate skb_copy_to_page_nocache you would > be better served to implement this one before it, and then just update > skb_copy_to_page_nocache to be: > return skb_copy_to_va_nocache(sk, from, skb, > page_address(page) + off, copy); > > We can save ourselves at least a few lines of code that way and it > creates one spot to do any changes. Looking at more closely, it seems we may be able to just rename skb_copy_to_page_nocache() to skb_copy_to_va_nocache() as there is no caller for skb_copy_to_page_nocache() after this patchset. > > . >
diff --git a/include/net/sock.h b/include/net/sock.h index cce23ac4d514..7ad235465485 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2201,6 +2201,21 @@ static inline int skb_copy_to_page_nocache(struct sock *sk, struct iov_iter *fro return 0; } +static inline int skb_copy_to_va_nocache(struct sock *sk, struct iov_iter *from, + struct sk_buff *skb, char *va, int copy) +{ + int err; + + err = skb_do_copy_data_nocache(sk, skb, from, va, copy, skb->len); + if (err) + return err; + + skb_len_add(skb, copy); + sk_wmem_queued_add(sk, copy); + sk_mem_charge(sk, copy); + return 0; +} + /** * sk_wmem_alloc_get - returns write allocations * @sk: socket
introduce the skb_copy_to_va_nocache() helper to avoid calling virt_to_page() and skb_copy_to_page_nocache(). CC: Alexander Duyck <alexander.duyck@gmail.com> Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com> --- include/net/sock.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+)