patches for DPDK stable branches
 help / color / mirror / Atom feed
* [PATCH 19.11] net/netvsc: fix calculation of checksums based on mbuf flag
@ 2022-07-14 21:16 longli
  2022-07-14 21:16 ` [PATCH 19.11] net/netvsc: fix vmbus device reference in multi-process longli
  2022-07-15  5:04 ` [PATCH 19.11] net/netvsc: fix calculation of checksums based on mbuf flag Christian Ehrhardt
  0 siblings, 2 replies; 4+ messages in thread
From: longli @ 2022-07-14 21:16 UTC (permalink / raw)
  To: stable; +Cc: christian.ehrhardt, Long Li

From: Long Li <longli@microsoft.com>

[ upstream commit 559a1f2eeaaddccc83e1668a8ee375c34699e48b ]

The netvsc should use RTE_MBUF_F_TX_L4_MASK and check the masked value
to decide the correct way to calculate checksums.

Not checking for RTE_MBUF_F_TX_L4_MASK results in incorrect RNDIS
packets sent to VSP and incorrect checksums calculated by the VSP.

Fixes: 4e9c73e96e ("net/netvsc: add Hyper-V network device")
Cc: stable@dpdk.org

Signed-off-by: Long Li <longli@microsoft.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: Ferruh Yigit <ferruh.yigit@xilinx.com>
---
 drivers/net/netvsc/hn_rxtx.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c
index af702dafe6..ece242f84b 100644
--- a/drivers/net/netvsc/hn_rxtx.c
+++ b/drivers/net/netvsc/hn_rxtx.c
@@ -1262,8 +1262,11 @@ static void hn_encap(struct rndis_packet_msg *pkt,
 			*pi_data = NDIS_LSO2_INFO_MAKEIPV4(hlen,
 							   m->tso_segsz);
 		}
-	} else if (m->ol_flags &
-		   (PKT_TX_TCP_CKSUM | PKT_TX_UDP_CKSUM | PKT_TX_IP_CKSUM)) {
+	} else if ((m->ol_flags & PKT_TX_L4_MASK) ==
+			PKT_TX_TCP_CKSUM ||
+		   (m->ol_flags & PKT_TX_L4_MASK) ==
+			PKT_TX_UDP_CKSUM ||
+		   (m->ol_flags & PKT_TX_IP_CKSUM)) {
 		pi_data = hn_rndis_pktinfo_append(pkt, NDIS_TXCSUM_INFO_SIZE,
 						  NDIS_PKTINFO_TYPE_CSUM);
 		*pi_data = 0;
@@ -1277,9 +1280,11 @@ static void hn_encap(struct rndis_packet_msg *pkt,
 				*pi_data |= NDIS_TXCSUM_INFO_IPCS;
 		}
 
-		if (m->ol_flags & PKT_TX_TCP_CKSUM)
+		if ((m->ol_flags & PKT_TX_L4_MASK) ==
+				PKT_TX_TCP_CKSUM)
 			*pi_data |= NDIS_TXCSUM_INFO_MKTCPCS(hlen);
-		else if (m->ol_flags & PKT_TX_UDP_CKSUM)
+		else if ((m->ol_flags & PKT_TX_L4_MASK) ==
+				PKT_TX_UDP_CKSUM)
 			*pi_data |= NDIS_TXCSUM_INFO_MKUDPCS(hlen);
 	}
 
-- 
2.17.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 19.11] net/netvsc: fix vmbus device reference in multi-process
  2022-07-14 21:16 [PATCH 19.11] net/netvsc: fix calculation of checksums based on mbuf flag longli
@ 2022-07-14 21:16 ` longli
  2022-07-15  5:04   ` Christian Ehrhardt
  2022-07-15  5:04 ` [PATCH 19.11] net/netvsc: fix calculation of checksums based on mbuf flag Christian Ehrhardt
  1 sibling, 1 reply; 4+ messages in thread
From: longli @ 2022-07-14 21:16 UTC (permalink / raw)
  To: stable; +Cc: christian.ehrhardt, Long Li

From: Long Li <longli@microsoft.com>

[ upstream commit 7b1a614dcbe2017f1984be28a01efabcd7fed8b8 ]

The vmbus device is allocated via "calloc" before the EAL memory is
initialized. The secondary process can't reference the vmbus device as
it is not mapped correctly in the shared memory region.

Replace all references to the vmbus device (and its contents) with the
pointers/contents set by the primary process.

Fixes: 4e9c73e96e ("net/netvsc: add Hyper-V network device")
Cc: stable@dpdk.org

Signed-off-by: Long Li <longli@microsoft.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/bus/vmbus/private.h       |  2 ++
 drivers/bus/vmbus/vmbus_channel.c | 28 +++++++---------------------
 drivers/net/netvsc/hn_ethdev.c    |  4 ++--
 drivers/net/netvsc/hn_nvs.c       | 14 +++++++-------
 drivers/net/netvsc/hn_rxtx.c      |  8 ++++----
 drivers/net/netvsc/hn_var.h       |  4 ++--
 6 files changed, 24 insertions(+), 36 deletions(-)

diff --git a/drivers/bus/vmbus/private.h b/drivers/bus/vmbus/private.h
index 74ef948282..5b8b01b808 100644
--- a/drivers/bus/vmbus/private.h
+++ b/drivers/bus/vmbus/private.h
@@ -77,6 +77,8 @@ struct vmbus_channel {
 	uint16_t relid;
 	uint16_t subchannel_id;
 	uint8_t monitor_id;
+
+	struct vmbus_mon_page *monitor_page;
 };
 
 #define VMBUS_MAX_CHANNELS	64
diff --git a/drivers/bus/vmbus/vmbus_channel.c b/drivers/bus/vmbus/vmbus_channel.c
index f6a76dcbb8..43c6c32d7e 100644
--- a/drivers/bus/vmbus/vmbus_channel.c
+++ b/drivers/bus/vmbus/vmbus_channel.c
@@ -27,19 +27,7 @@ vmbus_sync_set_bit(volatile uint32_t *addr, uint32_t mask)
 }
 
 static inline void
-vmbus_send_interrupt(const struct rte_vmbus_device *dev, uint32_t relid)
-{
-	uint32_t *int_addr;
-	uint32_t int_mask;
-
-	int_addr = dev->int_page + relid / 32;
-	int_mask = 1u << (relid % 32);
-
-	vmbus_sync_set_bit(int_addr, int_mask);
-}
-
-static inline void
-vmbus_set_monitor(const struct rte_vmbus_device *dev, uint32_t monitor_id)
+vmbus_set_monitor(const struct vmbus_channel *channel, uint32_t monitor_id)
 {
 	uint32_t *monitor_addr, monitor_mask;
 	unsigned int trigger_index;
@@ -47,16 +35,14 @@ vmbus_set_monitor(const struct rte_vmbus_device *dev, uint32_t monitor_id)
 	trigger_index = monitor_id / HV_MON_TRIG_LEN;
 	monitor_mask = 1u << (monitor_id % HV_MON_TRIG_LEN);
 
-	monitor_addr = &dev->monitor_page->trigs[trigger_index].pending;
+	monitor_addr = &channel->monitor_page->trigs[trigger_index].pending;
 	vmbus_sync_set_bit(monitor_addr, monitor_mask);
 }
 
 static void
-vmbus_set_event(const struct rte_vmbus_device *dev,
-		const struct vmbus_channel *chan)
+vmbus_set_event(const struct vmbus_channel *chan)
 {
-	vmbus_send_interrupt(dev, chan->relid);
-	vmbus_set_monitor(dev, chan->monitor_id);
+	vmbus_set_monitor(chan, chan->monitor_id);
 }
 
 /*
@@ -94,7 +80,6 @@ rte_vmbus_set_latency(const struct rte_vmbus_device *dev,
 void
 rte_vmbus_chan_signal_tx(const struct vmbus_channel *chan)
 {
-	const struct rte_vmbus_device *dev = chan->device;
 	const struct vmbus_br *tbr = &chan->txbr;
 
 	/* Make sure all updates are done before signaling host */
@@ -104,7 +89,7 @@ rte_vmbus_chan_signal_tx(const struct vmbus_channel *chan)
 	if (tbr->vbr->imask)
 		return;
 
-	vmbus_set_event(dev, chan);
+	vmbus_set_event(chan);
 }
 
 
@@ -230,7 +215,7 @@ void rte_vmbus_chan_signal_read(struct vmbus_channel *chan, uint32_t bytes_read)
 	if (write_sz <= pending_sz)
 		return;
 
-	vmbus_set_event(chan->device, chan);
+	vmbus_set_event(chan);
 }
 
 int rte_vmbus_chan_recv(struct vmbus_channel *chan, void *data, uint32_t *len,
@@ -337,6 +322,7 @@ int vmbus_chan_create(const struct rte_vmbus_device *device,
 	chan->subchannel_id = subid;
 	chan->relid = relid;
 	chan->monitor_id = monitor_id;
+	chan->monitor_page = device->monitor_page;
 	*new_chan = chan;
 
 	err = vmbus_uio_map_rings(chan);
diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c
index 74a6c0ebb7..22f58fa62b 100644
--- a/drivers/net/netvsc/hn_ethdev.c
+++ b/drivers/net/netvsc/hn_ethdev.c
@@ -955,8 +955,8 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev)
 	}
 
 	hv->vmbus = vmbus;
-	hv->rxbuf_res = &vmbus->resource[HV_RECV_BUF_MAP];
-	hv->chim_res  = &vmbus->resource[HV_SEND_BUF_MAP];
+	hv->rxbuf_res = vmbus->resource[HV_RECV_BUF_MAP];
+	hv->chim_res  = vmbus->resource[HV_SEND_BUF_MAP];
 	hv->port_id = eth_dev->data->port_id;
 	hv->latency = HN_CHAN_LATENCY_NS;
 	hv->max_queues = 1;
diff --git a/drivers/net/netvsc/hn_nvs.c b/drivers/net/netvsc/hn_nvs.c
index 03b6cc1551..09f363cb9d 100644
--- a/drivers/net/netvsc/hn_nvs.c
+++ b/drivers/net/netvsc/hn_nvs.c
@@ -193,11 +193,11 @@ hn_nvs_conn_rxbuf(struct hn_data *hv)
 	 * Connect RXBUF to NVS.
 	 */
 	conn.type = NVS_TYPE_RXBUF_CONN;
-	conn.gpadl = hv->rxbuf_res->phys_addr;
+	conn.gpadl = hv->rxbuf_res.phys_addr;
 	conn.sig = NVS_RXBUF_SIG;
 	PMD_DRV_LOG(DEBUG, "connect rxbuff va=%p gpad=%#" PRIx64,
-		    hv->rxbuf_res->addr,
-		    hv->rxbuf_res->phys_addr);
+		    hv->rxbuf_res.addr,
+		    hv->rxbuf_res.phys_addr);
 
 	error = hn_nvs_execute(hv, &conn, sizeof(conn),
 			       &resp, sizeof(resp),
@@ -308,17 +308,17 @@ hn_nvs_conn_chim(struct hn_data *hv)
 	struct hn_nvs_chim_conn chim;
 	struct hn_nvs_chim_connresp resp;
 	uint32_t sectsz;
-	unsigned long len = hv->chim_res->len;
+	unsigned long len = hv->chim_res.len;
 	int error;
 
 	/* Connect chimney sending buffer to NVS */
 	memset(&chim, 0, sizeof(chim));
 	chim.type = NVS_TYPE_CHIM_CONN;
-	chim.gpadl = hv->chim_res->phys_addr;
+	chim.gpadl = hv->chim_res.phys_addr;
 	chim.sig = NVS_CHIM_SIG;
 	PMD_DRV_LOG(DEBUG, "connect send buf va=%p gpad=%#" PRIx64,
-		    hv->chim_res->addr,
-		    hv->chim_res->phys_addr);
+		    hv->chim_res.addr,
+		    hv->chim_res.phys_addr);
 
 	error = hn_nvs_execute(hv, &chim, sizeof(chim),
 			       &resp, sizeof(resp),
diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c
index ece242f84b..8adf1525fd 100644
--- a/drivers/net/netvsc/hn_rxtx.c
+++ b/drivers/net/netvsc/hn_rxtx.c
@@ -553,7 +553,7 @@ static void hn_rxpkt(struct hn_rx_queue *rxq, struct hn_rx_bufinfo *rxb,
 		 * Use refcount to handle multiple packets in same
 		 * receive buffer section.
 		 */
-		rxbuf = hv->rxbuf_res->addr;
+		rxbuf = hv->rxbuf_res.addr;
 		iova = rte_mem_virt2iova(rxbuf) + RTE_PTR_DIFF(data, rxbuf);
 		shinfo = &rxb->shinfo;
 
@@ -730,8 +730,8 @@ hn_nvs_handle_rxbuf(struct rte_eth_dev *dev,
 {
 	const struct vmbus_chanpkt_rxbuf *pkt;
 	const struct hn_nvs_hdr *nvs_hdr = buf;
-	uint32_t rxbuf_sz = hv->rxbuf_res->len;
-	char *rxbuf = hv->rxbuf_res->addr;
+	uint32_t rxbuf_sz = hv->rxbuf_res.len;
+	char *rxbuf = hv->rxbuf_res.addr;
 	unsigned int i, hlen, count;
 	struct hn_rx_bufinfo *rxb;
 
@@ -1180,7 +1180,7 @@ hn_try_txagg(struct hn_data *hv, struct hn_tx_queue *txq,
 	if (txd->chim_index == NVS_CHIM_IDX_INVALID)
 		return NULL;
 
-	chim = (uint8_t *)hv->chim_res->addr
+	chim = (uint8_t *)hv->chim_res.addr
 			+ txd->chim_index * hv->chim_szmax;
 
 	txq->agg_txd = txd;
diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h
index 9814113a0c..66cb084a51 100644
--- a/drivers/net/netvsc/hn_var.h
+++ b/drivers/net/netvsc/hn_var.h
@@ -113,14 +113,14 @@ struct hn_data {
 	uint32_t	link_status;
 	uint32_t	link_speed;
 
-	struct rte_mem_resource *rxbuf_res;	/* UIO resource for Rx */
+	struct rte_mem_resource rxbuf_res;	/* UIO resource for Rx */
 	uint32_t	rxbuf_section_cnt;	/* # of Rx sections */
 	uint16_t	max_queues;		/* Max available queues */
 	uint16_t	num_queues;
 	uint64_t	rss_offloads;
 
 	rte_spinlock_t	chim_lock;
-	struct rte_mem_resource *chim_res;	/* UIO resource for Tx */
+	struct rte_mem_resource chim_res;	/* UIO resource for Tx */
 	struct rte_bitmap *chim_bmap;		/* Send buffer map */
 	void		*chim_bmem;
 	uint32_t	chim_szmax;		/* Max size per buffer */
-- 
2.17.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 19.11] net/netvsc: fix calculation of checksums based on mbuf flag
  2022-07-14 21:16 [PATCH 19.11] net/netvsc: fix calculation of checksums based on mbuf flag longli
  2022-07-14 21:16 ` [PATCH 19.11] net/netvsc: fix vmbus device reference in multi-process longli
@ 2022-07-15  5:04 ` Christian Ehrhardt
  1 sibling, 0 replies; 4+ messages in thread
From: Christian Ehrhardt @ 2022-07-15  5:04 UTC (permalink / raw)
  To: longli; +Cc: stable

On Thu, Jul 14, 2022 at 11:16 PM <longli@linuxonhyperv.com> wrote:
>
> From: Long Li <longli@microsoft.com>
>
> [ upstream commit 559a1f2eeaaddccc83e1668a8ee375c34699e48b ]


Thanks, applied

> The netvsc should use RTE_MBUF_F_TX_L4_MASK and check the masked value
> to decide the correct way to calculate checksums.
>
> Not checking for RTE_MBUF_F_TX_L4_MASK results in incorrect RNDIS
> packets sent to VSP and incorrect checksums calculated by the VSP.
>
> Fixes: 4e9c73e96e ("net/netvsc: add Hyper-V network device")
> Cc: stable@dpdk.org
>
> Signed-off-by: Long Li <longli@microsoft.com>
> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
> Reviewed-by: Ferruh Yigit <ferruh.yigit@xilinx.com>
> ---
>  drivers/net/netvsc/hn_rxtx.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c
> index af702dafe6..ece242f84b 100644
> --- a/drivers/net/netvsc/hn_rxtx.c
> +++ b/drivers/net/netvsc/hn_rxtx.c
> @@ -1262,8 +1262,11 @@ static void hn_encap(struct rndis_packet_msg *pkt,
>                         *pi_data = NDIS_LSO2_INFO_MAKEIPV4(hlen,
>                                                            m->tso_segsz);
>                 }
> -       } else if (m->ol_flags &
> -                  (PKT_TX_TCP_CKSUM | PKT_TX_UDP_CKSUM | PKT_TX_IP_CKSUM)) {
> +       } else if ((m->ol_flags & PKT_TX_L4_MASK) ==
> +                       PKT_TX_TCP_CKSUM ||
> +                  (m->ol_flags & PKT_TX_L4_MASK) ==
> +                       PKT_TX_UDP_CKSUM ||
> +                  (m->ol_flags & PKT_TX_IP_CKSUM)) {
>                 pi_data = hn_rndis_pktinfo_append(pkt, NDIS_TXCSUM_INFO_SIZE,
>                                                   NDIS_PKTINFO_TYPE_CSUM);
>                 *pi_data = 0;
> @@ -1277,9 +1280,11 @@ static void hn_encap(struct rndis_packet_msg *pkt,
>                                 *pi_data |= NDIS_TXCSUM_INFO_IPCS;
>                 }
>
> -               if (m->ol_flags & PKT_TX_TCP_CKSUM)
> +               if ((m->ol_flags & PKT_TX_L4_MASK) ==
> +                               PKT_TX_TCP_CKSUM)
>                         *pi_data |= NDIS_TXCSUM_INFO_MKTCPCS(hlen);
> -               else if (m->ol_flags & PKT_TX_UDP_CKSUM)
> +               else if ((m->ol_flags & PKT_TX_L4_MASK) ==
> +                               PKT_TX_UDP_CKSUM)
>                         *pi_data |= NDIS_TXCSUM_INFO_MKUDPCS(hlen);
>         }
>
> --
> 2.17.1
>


-- 
Christian Ehrhardt
Senior Staff Engineer, Ubuntu Server
Canonical Ltd

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 19.11] net/netvsc: fix vmbus device reference in multi-process
  2022-07-14 21:16 ` [PATCH 19.11] net/netvsc: fix vmbus device reference in multi-process longli
@ 2022-07-15  5:04   ` Christian Ehrhardt
  0 siblings, 0 replies; 4+ messages in thread
From: Christian Ehrhardt @ 2022-07-15  5:04 UTC (permalink / raw)
  To: longli; +Cc: stable

On Thu, Jul 14, 2022 at 11:16 PM <longli@linuxonhyperv.com> wrote:
>
> From: Long Li <longli@microsoft.com>
>
> [ upstream commit 7b1a614dcbe2017f1984be28a01efabcd7fed8b8 ]

Thanks, applied

> The vmbus device is allocated via "calloc" before the EAL memory is
> initialized. The secondary process can't reference the vmbus device as
> it is not mapped correctly in the shared memory region.
>
> Replace all references to the vmbus device (and its contents) with the
> pointers/contents set by the primary process.
>
> Fixes: 4e9c73e96e ("net/netvsc: add Hyper-V network device")
> Cc: stable@dpdk.org
>
> Signed-off-by: Long Li <longli@microsoft.com>
> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  drivers/bus/vmbus/private.h       |  2 ++
>  drivers/bus/vmbus/vmbus_channel.c | 28 +++++++---------------------
>  drivers/net/netvsc/hn_ethdev.c    |  4 ++--
>  drivers/net/netvsc/hn_nvs.c       | 14 +++++++-------
>  drivers/net/netvsc/hn_rxtx.c      |  8 ++++----
>  drivers/net/netvsc/hn_var.h       |  4 ++--
>  6 files changed, 24 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/bus/vmbus/private.h b/drivers/bus/vmbus/private.h
> index 74ef948282..5b8b01b808 100644
> --- a/drivers/bus/vmbus/private.h
> +++ b/drivers/bus/vmbus/private.h
> @@ -77,6 +77,8 @@ struct vmbus_channel {
>         uint16_t relid;
>         uint16_t subchannel_id;
>         uint8_t monitor_id;
> +
> +       struct vmbus_mon_page *monitor_page;
>  };
>
>  #define VMBUS_MAX_CHANNELS     64
> diff --git a/drivers/bus/vmbus/vmbus_channel.c b/drivers/bus/vmbus/vmbus_channel.c
> index f6a76dcbb8..43c6c32d7e 100644
> --- a/drivers/bus/vmbus/vmbus_channel.c
> +++ b/drivers/bus/vmbus/vmbus_channel.c
> @@ -27,19 +27,7 @@ vmbus_sync_set_bit(volatile uint32_t *addr, uint32_t mask)
>  }
>
>  static inline void
> -vmbus_send_interrupt(const struct rte_vmbus_device *dev, uint32_t relid)
> -{
> -       uint32_t *int_addr;
> -       uint32_t int_mask;
> -
> -       int_addr = dev->int_page + relid / 32;
> -       int_mask = 1u << (relid % 32);
> -
> -       vmbus_sync_set_bit(int_addr, int_mask);
> -}
> -
> -static inline void
> -vmbus_set_monitor(const struct rte_vmbus_device *dev, uint32_t monitor_id)
> +vmbus_set_monitor(const struct vmbus_channel *channel, uint32_t monitor_id)
>  {
>         uint32_t *monitor_addr, monitor_mask;
>         unsigned int trigger_index;
> @@ -47,16 +35,14 @@ vmbus_set_monitor(const struct rte_vmbus_device *dev, uint32_t monitor_id)
>         trigger_index = monitor_id / HV_MON_TRIG_LEN;
>         monitor_mask = 1u << (monitor_id % HV_MON_TRIG_LEN);
>
> -       monitor_addr = &dev->monitor_page->trigs[trigger_index].pending;
> +       monitor_addr = &channel->monitor_page->trigs[trigger_index].pending;
>         vmbus_sync_set_bit(monitor_addr, monitor_mask);
>  }
>
>  static void
> -vmbus_set_event(const struct rte_vmbus_device *dev,
> -               const struct vmbus_channel *chan)
> +vmbus_set_event(const struct vmbus_channel *chan)
>  {
> -       vmbus_send_interrupt(dev, chan->relid);
> -       vmbus_set_monitor(dev, chan->monitor_id);
> +       vmbus_set_monitor(chan, chan->monitor_id);
>  }
>
>  /*
> @@ -94,7 +80,6 @@ rte_vmbus_set_latency(const struct rte_vmbus_device *dev,
>  void
>  rte_vmbus_chan_signal_tx(const struct vmbus_channel *chan)
>  {
> -       const struct rte_vmbus_device *dev = chan->device;
>         const struct vmbus_br *tbr = &chan->txbr;
>
>         /* Make sure all updates are done before signaling host */
> @@ -104,7 +89,7 @@ rte_vmbus_chan_signal_tx(const struct vmbus_channel *chan)
>         if (tbr->vbr->imask)
>                 return;
>
> -       vmbus_set_event(dev, chan);
> +       vmbus_set_event(chan);
>  }
>
>
> @@ -230,7 +215,7 @@ void rte_vmbus_chan_signal_read(struct vmbus_channel *chan, uint32_t bytes_read)
>         if (write_sz <= pending_sz)
>                 return;
>
> -       vmbus_set_event(chan->device, chan);
> +       vmbus_set_event(chan);
>  }
>
>  int rte_vmbus_chan_recv(struct vmbus_channel *chan, void *data, uint32_t *len,
> @@ -337,6 +322,7 @@ int vmbus_chan_create(const struct rte_vmbus_device *device,
>         chan->subchannel_id = subid;
>         chan->relid = relid;
>         chan->monitor_id = monitor_id;
> +       chan->monitor_page = device->monitor_page;
>         *new_chan = chan;
>
>         err = vmbus_uio_map_rings(chan);
> diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c
> index 74a6c0ebb7..22f58fa62b 100644
> --- a/drivers/net/netvsc/hn_ethdev.c
> +++ b/drivers/net/netvsc/hn_ethdev.c
> @@ -955,8 +955,8 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev)
>         }
>
>         hv->vmbus = vmbus;
> -       hv->rxbuf_res = &vmbus->resource[HV_RECV_BUF_MAP];
> -       hv->chim_res  = &vmbus->resource[HV_SEND_BUF_MAP];
> +       hv->rxbuf_res = vmbus->resource[HV_RECV_BUF_MAP];
> +       hv->chim_res  = vmbus->resource[HV_SEND_BUF_MAP];
>         hv->port_id = eth_dev->data->port_id;
>         hv->latency = HN_CHAN_LATENCY_NS;
>         hv->max_queues = 1;
> diff --git a/drivers/net/netvsc/hn_nvs.c b/drivers/net/netvsc/hn_nvs.c
> index 03b6cc1551..09f363cb9d 100644
> --- a/drivers/net/netvsc/hn_nvs.c
> +++ b/drivers/net/netvsc/hn_nvs.c
> @@ -193,11 +193,11 @@ hn_nvs_conn_rxbuf(struct hn_data *hv)
>          * Connect RXBUF to NVS.
>          */
>         conn.type = NVS_TYPE_RXBUF_CONN;
> -       conn.gpadl = hv->rxbuf_res->phys_addr;
> +       conn.gpadl = hv->rxbuf_res.phys_addr;
>         conn.sig = NVS_RXBUF_SIG;
>         PMD_DRV_LOG(DEBUG, "connect rxbuff va=%p gpad=%#" PRIx64,
> -                   hv->rxbuf_res->addr,
> -                   hv->rxbuf_res->phys_addr);
> +                   hv->rxbuf_res.addr,
> +                   hv->rxbuf_res.phys_addr);
>
>         error = hn_nvs_execute(hv, &conn, sizeof(conn),
>                                &resp, sizeof(resp),
> @@ -308,17 +308,17 @@ hn_nvs_conn_chim(struct hn_data *hv)
>         struct hn_nvs_chim_conn chim;
>         struct hn_nvs_chim_connresp resp;
>         uint32_t sectsz;
> -       unsigned long len = hv->chim_res->len;
> +       unsigned long len = hv->chim_res.len;
>         int error;
>
>         /* Connect chimney sending buffer to NVS */
>         memset(&chim, 0, sizeof(chim));
>         chim.type = NVS_TYPE_CHIM_CONN;
> -       chim.gpadl = hv->chim_res->phys_addr;
> +       chim.gpadl = hv->chim_res.phys_addr;
>         chim.sig = NVS_CHIM_SIG;
>         PMD_DRV_LOG(DEBUG, "connect send buf va=%p gpad=%#" PRIx64,
> -                   hv->chim_res->addr,
> -                   hv->chim_res->phys_addr);
> +                   hv->chim_res.addr,
> +                   hv->chim_res.phys_addr);
>
>         error = hn_nvs_execute(hv, &chim, sizeof(chim),
>                                &resp, sizeof(resp),
> diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c
> index ece242f84b..8adf1525fd 100644
> --- a/drivers/net/netvsc/hn_rxtx.c
> +++ b/drivers/net/netvsc/hn_rxtx.c
> @@ -553,7 +553,7 @@ static void hn_rxpkt(struct hn_rx_queue *rxq, struct hn_rx_bufinfo *rxb,
>                  * Use refcount to handle multiple packets in same
>                  * receive buffer section.
>                  */
> -               rxbuf = hv->rxbuf_res->addr;
> +               rxbuf = hv->rxbuf_res.addr;
>                 iova = rte_mem_virt2iova(rxbuf) + RTE_PTR_DIFF(data, rxbuf);
>                 shinfo = &rxb->shinfo;
>
> @@ -730,8 +730,8 @@ hn_nvs_handle_rxbuf(struct rte_eth_dev *dev,
>  {
>         const struct vmbus_chanpkt_rxbuf *pkt;
>         const struct hn_nvs_hdr *nvs_hdr = buf;
> -       uint32_t rxbuf_sz = hv->rxbuf_res->len;
> -       char *rxbuf = hv->rxbuf_res->addr;
> +       uint32_t rxbuf_sz = hv->rxbuf_res.len;
> +       char *rxbuf = hv->rxbuf_res.addr;
>         unsigned int i, hlen, count;
>         struct hn_rx_bufinfo *rxb;
>
> @@ -1180,7 +1180,7 @@ hn_try_txagg(struct hn_data *hv, struct hn_tx_queue *txq,
>         if (txd->chim_index == NVS_CHIM_IDX_INVALID)
>                 return NULL;
>
> -       chim = (uint8_t *)hv->chim_res->addr
> +       chim = (uint8_t *)hv->chim_res.addr
>                         + txd->chim_index * hv->chim_szmax;
>
>         txq->agg_txd = txd;
> diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h
> index 9814113a0c..66cb084a51 100644
> --- a/drivers/net/netvsc/hn_var.h
> +++ b/drivers/net/netvsc/hn_var.h
> @@ -113,14 +113,14 @@ struct hn_data {
>         uint32_t        link_status;
>         uint32_t        link_speed;
>
> -       struct rte_mem_resource *rxbuf_res;     /* UIO resource for Rx */
> +       struct rte_mem_resource rxbuf_res;      /* UIO resource for Rx */
>         uint32_t        rxbuf_section_cnt;      /* # of Rx sections */
>         uint16_t        max_queues;             /* Max available queues */
>         uint16_t        num_queues;
>         uint64_t        rss_offloads;
>
>         rte_spinlock_t  chim_lock;
> -       struct rte_mem_resource *chim_res;      /* UIO resource for Tx */
> +       struct rte_mem_resource chim_res;       /* UIO resource for Tx */
>         struct rte_bitmap *chim_bmap;           /* Send buffer map */
>         void            *chim_bmem;
>         uint32_t        chim_szmax;             /* Max size per buffer */
> --
> 2.17.1
>


-- 
Christian Ehrhardt
Senior Staff Engineer, Ubuntu Server
Canonical Ltd

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-07-15  5:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-14 21:16 [PATCH 19.11] net/netvsc: fix calculation of checksums based on mbuf flag longli
2022-07-14 21:16 ` [PATCH 19.11] net/netvsc: fix vmbus device reference in multi-process longli
2022-07-15  5:04   ` Christian Ehrhardt
2022-07-15  5:04 ` [PATCH 19.11] net/netvsc: fix calculation of checksums based on mbuf flag Christian Ehrhardt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).