From: Stephen Rothwell Date: Thu, 3 Jun 2021 01:46:12 +0000 (+1000) Subject: Merge remote-tracking branch 'net-next/master' X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=00efd15603d0d578fa6a2fe95779357014e3745a;p=users%2Fjedix%2Flinux-maple.git Merge remote-tracking branch 'net-next/master' # Conflicts: # drivers/net/virtio_net.c # net/core/devlink.c --- 00efd15603d0d578fa6a2fe95779357014e3745a diff --cc drivers/net/virtio_net.c index fa407eb8b457a,ed969b65126ea..f8f5b8646a431 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@@ -398,16 -398,25 +398,28 @@@ static struct sk_buff *page_to_skb(stru else hdr_padded_len = sizeof(struct padded_vnet_hdr); - /* If headroom is not 0, there is an offset between the beginning of the + /* If whole_page, there is an offset between the beginning of the * data and the allocated space, otherwise the data and the allocated * space are aligned. + * + * Buffers with headroom use PAGE_SIZE as alloc size, see + * add_recvbuf_mergeable() + get_mergeable_buf_len() */ - truesize = headroom ? PAGE_SIZE : truesize; - tailroom = truesize - len - headroom; - buf = p - headroom; + if (whole_page) { + /* Buffers with whole_page use PAGE_SIZE as alloc size, + * see add_recvbuf_mergeable() + get_mergeable_buf_len() + */ + truesize = PAGE_SIZE; + + /* page maybe head page, so we should get the buf by p, not the + * page + */ + tailroom = truesize - len - offset_in_page(p); + buf = (char *)((unsigned long)p & PAGE_MASK); + } else { + tailroom = truesize - len; + buf = p; + } len -= hdr_len; offset += hdr_padded_len; diff --cc net/core/devlink.c index 051432ea4f69e,464f564082475..1e953b77a77a9 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@@ -8630,12 -9289,11 +9288,10 @@@ static int __devlink_port_phys_port_nam switch (attrs->flavour) { case DEVLINK_PORT_FLAVOUR_PHYSICAL: - if (!attrs->split) - n = snprintf(name, len, "p%u", attrs->phys.port_number); - else - n = snprintf(name, len, "p%us%u", - attrs->phys.port_number, - attrs->phys.split_subport_number); - case DEVLINK_PORT_FLAVOUR_VIRTUAL: + n = snprintf(name, len, "p%u", attrs->phys.port_number); + if (n < len && attrs->split) + n += snprintf(name + n, len - n, "s%u", + attrs->phys.split_subport_number); break; case DEVLINK_PORT_FLAVOUR_CPU: case DEVLINK_PORT_FLAVOUR_DSA: