patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Shani Peretz <shperetz@nvidia.com>
To: David Marchand <david.marchand@redhat.com>,
	"stable@dpdk.org" <stable@dpdk.org>
Cc: "luca.boccassi@gmail.com" <luca.boccassi@gmail.com>,
	Stephen Hemminger <stephen@networkplumber.org>
Subject: RE: [PATCH 22.11] net/tap: fix build with LTO
Date: Tue, 30 Dec 2025 10:04:14 +0000	[thread overview]
Message-ID: <MW4PR12MB7484EBD1B9DD0EF082982439BFBCA@MW4PR12MB7484.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20251029142751.199596-1-david.marchand@redhat.com>



> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Wednesday, 29 October 2025 16:28
> To: stable@dpdk.org
> Cc: luca.boccassi@gmail.com; Stephen Hemminger
> <stephen@networkplumber.org>
> Subject: [PATCH 22.11] net/tap: fix build with LTO
> 
> External email: Use caution opening links or attachments
> 
> 
> [ upstream commit adb95cc6644103d055609f5bcae5df91afea02ab ]
> 
> The compiler has trouble understanding that the code is actually pointing at the
> data in the message past the nh struct.
> 
> Update the tap_nlattr_add* helpers and the NLMSG_TAIL macro passing a
> pointer to msg.
> 
> Bugzilla ID: 1511
> Fixes: 7c25284e30c2 ("net/tap: add netlink back-end for flow API")
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  drivers/net/tap/tap_flow.c    | 124 +++++++++++++---------------------
>  drivers/net/tap/tap_netlink.c |  24 +++----  drivers/net/tap/tap_netlink.h |  10
> +--
>  drivers/net/tap/tap_tcmsgs.c  |   6 +-
>  4 files changed, 68 insertions(+), 96 deletions(-)
> 
> diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index
> ea23841f60..f03dddbbba 100644
> --- a/drivers/net/tap/tap_flow.c
> +++ b/drivers/net/tap/tap_flow.c
> @@ -535,20 +535,16 @@ tap_flow_create_eth(const struct rte_flow_item
> *item, void *data)
>                 return 0;
>         msg = &flow->msg;
>         if (!rte_is_zero_ether_addr(&mask->dst)) {
> -               tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_DST,
> -                       RTE_ETHER_ADDR_LEN,
> -                          &spec->dst.addr_bytes);
> -               tap_nlattr_add(&msg->nh,
> -                          TCA_FLOWER_KEY_ETH_DST_MASK, RTE_ETHER_ADDR_LEN,
> -                          &mask->dst.addr_bytes);
> +               tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_DST,
> RTE_ETHER_ADDR_LEN,
> +                       &spec->dst.addr_bytes);
> +               tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_DST_MASK,
> RTE_ETHER_ADDR_LEN,
> +                       &mask->dst.addr_bytes);
>         }
>         if (!rte_is_zero_ether_addr(&mask->src)) {
> -               tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_SRC,
> -                       RTE_ETHER_ADDR_LEN,
> +               tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_SRC,
> + RTE_ETHER_ADDR_LEN,
>                         &spec->src.addr_bytes);
> -               tap_nlattr_add(&msg->nh,
> -                          TCA_FLOWER_KEY_ETH_SRC_MASK, RTE_ETHER_ADDR_LEN,
> -                          &mask->src.addr_bytes);
> +               tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_SRC_MASK,
> RTE_ETHER_ADDR_LEN,
> +                       &mask->src.addr_bytes);
>         }
>         return 0;
>  }
> @@ -604,11 +600,9 @@ tap_flow_create_vlan(const struct rte_flow_item
> *item, void *data)
>                 uint8_t vid = VLAN_ID(tci);
> 
>                 if (prio)
> -                       tap_nlattr_add8(&msg->nh,
> -                                       TCA_FLOWER_KEY_VLAN_PRIO, prio);
> +                       tap_nlattr_add8(msg, TCA_FLOWER_KEY_VLAN_PRIO,
> + prio);
>                 if (vid)
> -                       tap_nlattr_add16(&msg->nh,
> -                                        TCA_FLOWER_KEY_VLAN_ID, vid);
> +                       tap_nlattr_add16(msg, TCA_FLOWER_KEY_VLAN_ID,
> + vid);
>         }
>         return 0;
>  }
> @@ -651,20 +645,15 @@ tap_flow_create_ipv4(const struct rte_flow_item
> *item, void *data)
>         if (!spec)
>                 return 0;
>         if (mask->hdr.dst_addr) {
> -               tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST,
> -                            spec->hdr.dst_addr);
> -               tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST_MASK,
> -                            mask->hdr.dst_addr);
> +               tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_DST, spec-
> >hdr.dst_addr);
> +               tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_DST_MASK,
> + mask->hdr.dst_addr);
>         }
>         if (mask->hdr.src_addr) {
> -               tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC,
> -                            spec->hdr.src_addr);
> -               tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC_MASK,
> -                            mask->hdr.src_addr);
> +               tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_SRC, spec-
> >hdr.src_addr);
> +               tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_SRC_MASK,
> + mask->hdr.src_addr);
>         }
>         if (spec->hdr.next_proto_id)
> -               tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO,
> -                           spec->hdr.next_proto_id);
> +               tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO,
> + spec->hdr.next_proto_id);
>         return 0;
>  }
> 
> @@ -707,20 +696,19 @@ tap_flow_create_ipv6(const struct rte_flow_item
> *item, void *data)
>         if (!spec)
>                 return 0;
>         if (memcmp(mask->hdr.dst_addr, empty_addr, 16)) {
> -               tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST,
> -                          sizeof(spec->hdr.dst_addr), &spec->hdr.dst_addr);
> -               tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST_MASK,
> -                          sizeof(mask->hdr.dst_addr), &mask->hdr.dst_addr);
> +               tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_DST, sizeof(spec-
> >hdr.dst_addr),
> +                       &spec->hdr.dst_addr);
> +               tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_DST_MASK,
> sizeof(mask->hdr.dst_addr),
> +                       &mask->hdr.dst_addr);
>         }
>         if (memcmp(mask->hdr.src_addr, empty_addr, 16)) {
> -               tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC,
> -                          sizeof(spec->hdr.src_addr), &spec->hdr.src_addr);
> -               tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC_MASK,
> -                          sizeof(mask->hdr.src_addr), &mask->hdr.src_addr);
> +               tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_SRC, sizeof(spec-
> >hdr.src_addr),
> +                       &spec->hdr.src_addr);
> +               tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_SRC_MASK,
> sizeof(mask->hdr.src_addr),
> +                       &mask->hdr.src_addr);
>         }
>         if (spec->hdr.proto)
> -               tap_nlattr_add8(&msg->nh,
> -                               TCA_FLOWER_KEY_IP_PROTO, spec->hdr.proto);
> +               tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO,
> + spec->hdr.proto);
>         return 0;
>  }
> 
> @@ -758,15 +746,13 @@ tap_flow_create_udp(const struct rte_flow_item
> *item, void *data)
>         if (!flow)
>                 return 0;
>         msg = &flow->msg;
> -       tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP);
> +       tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP);
>         if (!spec)
>                 return 0;
>         if (mask->hdr.dst_port)
> -               tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_DST,
> -                            spec->hdr.dst_port);
> +               tap_nlattr_add16(msg, TCA_FLOWER_KEY_UDP_DST,
> + spec->hdr.dst_port);
>         if (mask->hdr.src_port)
> -               tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_SRC,
> -                            spec->hdr.src_port);
> +               tap_nlattr_add16(msg, TCA_FLOWER_KEY_UDP_SRC,
> + spec->hdr.src_port);
>         return 0;
>  }
> 
> @@ -804,15 +790,13 @@ tap_flow_create_tcp(const struct rte_flow_item
> *item, void *data)
>         if (!flow)
>                 return 0;
>         msg = &flow->msg;
> -       tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP);
> +       tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP);
>         if (!spec)
>                 return 0;
>         if (mask->hdr.dst_port)
> -               tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_DST,
> -                            spec->hdr.dst_port);
> +               tap_nlattr_add16(msg, TCA_FLOWER_KEY_TCP_DST,
> + spec->hdr.dst_port);
>         if (mask->hdr.src_port)
> -               tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_SRC,
> -                            spec->hdr.src_port);
> +               tap_nlattr_add16(msg, TCA_FLOWER_KEY_TCP_SRC,
> + spec->hdr.src_port);
>         return 0;
>  }
> 
> @@ -920,35 +904,27 @@ add_action(struct rte_flow *flow, size_t *act_index,
> struct action_data *adata)
>         if (tap_nlattr_nested_start(msg, (*act_index)++) < 0)
>                 return -1;
> 
> -       tap_nlattr_add(&msg->nh, TCA_ACT_KIND,
> -                               strlen(adata->id) + 1, adata->id);
> +       tap_nlattr_add(msg, TCA_ACT_KIND, strlen(adata->id) + 1,
> + adata->id);
>         if (tap_nlattr_nested_start(msg, TCA_ACT_OPTIONS) < 0)
>                 return -1;
>         if (strcmp("gact", adata->id) == 0) {
> -               tap_nlattr_add(&msg->nh, TCA_GACT_PARMS, sizeof(adata->gact),
> -                          &adata->gact);
> +               tap_nlattr_add(msg, TCA_GACT_PARMS, sizeof(adata->gact),
> + &adata->gact);
>         } else if (strcmp("mirred", adata->id) == 0) {
>                 if (adata->mirred.eaction == TCA_EGRESS_MIRROR)
>                         adata->mirred.action = TC_ACT_PIPE;
>                 else /* REDIRECT */
>                         adata->mirred.action = TC_ACT_STOLEN;
> -               tap_nlattr_add(&msg->nh, TCA_MIRRED_PARMS,
> -                          sizeof(adata->mirred),
> -                          &adata->mirred);
> +               tap_nlattr_add(msg, TCA_MIRRED_PARMS,
> + sizeof(adata->mirred), &adata->mirred);
>         } else if (strcmp("skbedit", adata->id) == 0) {
> -               tap_nlattr_add(&msg->nh, TCA_SKBEDIT_PARMS,
> -                          sizeof(adata->skbedit.skbedit),
> -                          &adata->skbedit.skbedit);
> -               tap_nlattr_add16(&msg->nh, TCA_SKBEDIT_QUEUE_MAPPING,
> -                            adata->skbedit.queue);
> +               tap_nlattr_add(msg, TCA_SKBEDIT_PARMS, sizeof(adata-
> >skbedit.skbedit),
> +                       &adata->skbedit.skbedit);
> +               tap_nlattr_add16(msg, TCA_SKBEDIT_QUEUE_MAPPING,
> + adata->skbedit.queue);
>         } else if (strcmp("bpf", adata->id) == 0) {
> -               tap_nlattr_add32(&msg->nh, TCA_ACT_BPF_FD, adata->bpf.bpf_fd);
> -               tap_nlattr_add(&msg->nh, TCA_ACT_BPF_NAME,
> -                          strlen(adata->bpf.annotation) + 1,
> -                          adata->bpf.annotation);
> -               tap_nlattr_add(&msg->nh, TCA_ACT_BPF_PARMS,
> -                          sizeof(adata->bpf.bpf),
> -                          &adata->bpf.bpf);
> +               tap_nlattr_add32(msg, TCA_ACT_BPF_FD, adata->bpf.bpf_fd);
> +               tap_nlattr_add(msg, TCA_ACT_BPF_NAME, strlen(adata-
> >bpf.annotation) + 1,
> +                       adata->bpf.annotation);
> +               tap_nlattr_add(msg, TCA_ACT_BPF_PARMS, sizeof(adata->bpf.bpf),
> +                       &adata->bpf.bpf);
>         } else {
>                 return -1;
>         }
> @@ -1078,7 +1054,7 @@ priv_flow_process(struct pmd_internals *pmd,
>                                 TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
>                 }
>                 /* use flower filter type */
> -               tap_nlattr_add(&flow->msg.nh, TCA_KIND, sizeof("flower"), "flower");
> +               tap_nlattr_add(&flow->msg, TCA_KIND, sizeof("flower"),
> + "flower");
>                 if (tap_nlattr_nested_start(&flow->msg, TCA_OPTIONS) < 0) {
>                         rte_flow_error_set(error, ENOMEM,
> RTE_FLOW_ERROR_TYPE_ACTION,
>                                            actions, "could not allocated netlink msg"); @@ -
> 1118,15 +1094,11 @@ priv_flow_process(struct pmd_internals *pmd,
>         }
>         if (flow) {
>                 if (data.vlan) {
> -                       tap_nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE,
> -                                    htons(ETH_P_8021Q));
> -                       tap_nlattr_add16(&flow->msg.nh,
> -                                    TCA_FLOWER_KEY_VLAN_ETH_TYPE,
> -                                    data.eth_type ?
> -                                    data.eth_type : htons(ETH_P_ALL));
> +                       tap_nlattr_add16(&flow->msg, TCA_FLOWER_KEY_ETH_TYPE,
> htons(ETH_P_8021Q));
> +                       tap_nlattr_add16(&flow->msg,
> TCA_FLOWER_KEY_VLAN_ETH_TYPE,
> +                               data.eth_type ?  data.eth_type :
> + htons(ETH_P_ALL));
>                 } else if (data.eth_type) {
> -                       tap_nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE,
> -                                    data.eth_type);
> +                       tap_nlattr_add16(&flow->msg,
> + TCA_FLOWER_KEY_ETH_TYPE, data.eth_type);
>                 }
>         }
>         if (mirred && flow) {
> @@ -1919,13 +1891,13 @@ static int rss_enable(struct pmd_internals *pmd,
>                 msg->t.tcm_info = TC_H_MAKE(prio << 16, msg->t.tcm_info);
>                 msg->t.tcm_parent = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
> 
> -               tap_nlattr_add(&msg->nh, TCA_KIND, sizeof("bpf"), "bpf");
> +               tap_nlattr_add(msg, TCA_KIND, sizeof("bpf"), "bpf");
>                 if (tap_nlattr_nested_start(msg, TCA_OPTIONS) < 0)
>                         return -1;
> -               tap_nlattr_add32(&msg->nh, TCA_BPF_FD, pmd->bpf_fd[i]);
> +               tap_nlattr_add32(msg, TCA_BPF_FD, pmd->bpf_fd[i]);
>                 snprintf(annotation, sizeof(annotation), "[%s%d]",
>                         SEC_NAME_CLS_Q, i);
> -               tap_nlattr_add(&msg->nh, TCA_BPF_NAME, strlen(annotation) + 1,
> +               tap_nlattr_add(msg, TCA_BPF_NAME, strlen(annotation) +
> + 1,
>                            annotation);
>                 /* Actions */
>                 {
> diff --git a/drivers/net/tap/tap_netlink.c b/drivers/net/tap/tap_netlink.c index
> 35c491ac37..1d8b61e5ab 100644
> --- a/drivers/net/tap/tap_netlink.c
> +++ b/drivers/net/tap/tap_netlink.c
> @@ -293,18 +293,18 @@ tap_nl_recv(int nlsk_fd, int (*cb)(struct nlmsghdr *,
> void *arg), void *arg)
>   *   The data to append.
>   */
>  void
> -tap_nlattr_add(struct nlmsghdr *nh, unsigned short type,
> +tap_nlattr_add(struct nlmsg *msg, unsigned short type,
>            unsigned int data_len, const void *data)  {
>         /* see man 3 rtnetlink */
>         struct rtattr *rta;
> 
> -       rta = (struct rtattr *)NLMSG_TAIL(nh);
> +       rta = (struct rtattr *)NLMSG_TAIL(msg);
>         rta->rta_len = RTA_LENGTH(data_len);
>         rta->rta_type = type;
>         if (data_len > 0)
>                 memcpy(RTA_DATA(rta), data, data_len);
> -       nh->nlmsg_len = NLMSG_ALIGN(nh->nlmsg_len) + RTA_ALIGN(rta-
> >rta_len);
> +       msg->nh.nlmsg_len = NLMSG_ALIGN(msg->nh.nlmsg_len) +
> + RTA_ALIGN(rta->rta_len);
>  }
> 
>  /**
> @@ -318,9 +318,9 @@ tap_nlattr_add(struct nlmsghdr *nh, unsigned short
> type,
>   *   The data to append.
>   */
>  void
> -tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data)
> +tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t data)
>  {
> -       tap_nlattr_add(nh, type, sizeof(uint8_t), &data);
> +       tap_nlattr_add(msg, type, sizeof(uint8_t), &data);
>  }
> 
>  /**
> @@ -334,9 +334,9 @@ tap_nlattr_add8(struct nlmsghdr *nh, unsigned short
> type, uint8_t data)
>   *   The data to append.
>   */
>  void
> -tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data)
> +tap_nlattr_add16(struct nlmsg *msg, unsigned short type, uint16_t data)
>  {
> -       tap_nlattr_add(nh, type, sizeof(uint16_t), &data);
> +       tap_nlattr_add(msg, type, sizeof(uint16_t), &data);
>  }
> 
>  /**
> @@ -350,9 +350,9 @@ tap_nlattr_add16(struct nlmsghdr *nh, unsigned short
> type, uint16_t data)
>   *   The data to append.
>   */
>  void
> -tap_nlattr_add32(struct nlmsghdr *nh, unsigned short type, uint32_t data)
> +tap_nlattr_add32(struct nlmsg *msg, unsigned short type, uint32_t data)
>  {
> -       tap_nlattr_add(nh, type, sizeof(uint32_t), &data);
> +       tap_nlattr_add(msg, type, sizeof(uint32_t), &data);
>  }
> 
>  /**
> @@ -379,9 +379,9 @@ tap_nlattr_nested_start(struct nlmsg *msg, uint16_t
> type)
>                 return -1;
>         }
> 
> -       tail->tail = (struct rtattr *)NLMSG_TAIL(&msg->nh);
> +       tail->tail = (struct rtattr *)NLMSG_TAIL(msg);
> 
> -       tap_nlattr_add(&msg->nh, type, 0, NULL);
> +       tap_nlattr_add(msg, type, 0, NULL);
> 
>         tail->prev = msg->nested_tails;
> 
> @@ -404,7 +404,7 @@ tap_nlattr_nested_finish(struct nlmsg *msg)  {
>         struct nested_tail *tail = msg->nested_tails;
> 
> -       tail->tail->rta_len = (char *)NLMSG_TAIL(&msg->nh) - (char *)tail->tail;
> +       tail->tail->rta_len = (char *)NLMSG_TAIL(msg) - (char
> + *)tail->tail;
> 
>         if (tail->prev)
>                 msg->nested_tails = tail->prev; diff --git
> a/drivers/net/tap/tap_netlink.h b/drivers/net/tap/tap_netlink.h index
> faa73ba163..c1493b6bf0 100644
> --- a/drivers/net/tap/tap_netlink.h
> +++ b/drivers/net/tap/tap_netlink.h
> @@ -23,7 +23,7 @@ struct nlmsg {
>         struct nested_tail *nested_tails;  };
> 
> -#define NLMSG_TAIL(nlh) (void *)((char *)(nlh) + NLMSG_ALIGN((nlh)-
> >nlmsg_len))
> +#define NLMSG_TAIL(msg) (void *)((char *)(msg) +
> +NLMSG_ALIGN((msg)->nh.nlmsg_len))
> 
>  int tap_nl_init(uint32_t nl_groups);
>  int tap_nl_final(int nlsk_fd);
> @@ -31,11 +31,11 @@ int tap_nl_send(int nlsk_fd, struct nlmsghdr *nh);  int
> tap_nl_recv(int nlsk_fd, int (*callback)(struct nlmsghdr *, void *),
>                 void *arg);
>  int tap_nl_recv_ack(int nlsk_fd);
> -void tap_nlattr_add(struct nlmsghdr *nh, unsigned short type,
> +void tap_nlattr_add(struct nlmsg *msg, unsigned short type,
>                     unsigned int data_len, const void *data); -void
> tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data); -void
> tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data); -
> void tap_nlattr_add32(struct nlmsghdr *nh, unsigned short type, uint32_t
> data);
> +void tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t
> +data); void tap_nlattr_add16(struct nlmsg *msg, unsigned short type,
> +uint16_t data); void tap_nlattr_add32(struct nlmsg *msg, unsigned short
> +type, uint32_t data);
>  int tap_nlattr_nested_start(struct nlmsg *msg, uint16_t type);  void
> tap_nlattr_nested_finish(struct nlmsg *msg);
> 
> diff --git a/drivers/net/tap/tap_tcmsgs.c b/drivers/net/tap/tap_tcmsgs.c index
> 24a0423a0e..f811deef24 100644
> --- a/drivers/net/tap/tap_tcmsgs.c
> +++ b/drivers/net/tap/tap_tcmsgs.c
> @@ -123,8 +123,8 @@ qdisc_add_multiq(int nlsk_fd, unsigned int ifindex)
>                     NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE);
>         msg.t.tcm_handle = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
>         msg.t.tcm_parent = TC_H_ROOT;
> -       tap_nlattr_add(&msg.nh, TCA_KIND, sizeof("multiq"), "multiq");
> -       tap_nlattr_add(&msg.nh, TCA_OPTIONS, sizeof(opt), &opt);
> +       tap_nlattr_add(&msg, TCA_KIND, sizeof("multiq"), "multiq");
> +       tap_nlattr_add(&msg, TCA_OPTIONS, sizeof(opt), &opt);
>         if (tap_nl_send(nlsk_fd, &msg.nh) < 0)
>                 return -1;
>         if (tap_nl_recv_ack(nlsk_fd) < 0) @@ -152,7 +152,7 @@
> qdisc_add_ingress(int nlsk_fd, unsigned int ifindex)
>                     NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE);
>         msg.t.tcm_handle = TC_H_MAKE(TC_H_INGRESS, 0);
>         msg.t.tcm_parent = TC_H_INGRESS;
> -       tap_nlattr_add(&msg.nh, TCA_KIND, sizeof("ingress"), "ingress");
> +       tap_nlattr_add(&msg, TCA_KIND, sizeof("ingress"), "ingress");
>         if (tap_nl_send(nlsk_fd, &msg.nh) < 0)
>                 return -1;
>         if (tap_nl_recv_ack(nlsk_fd) < 0)
> --
> 2.51.0


This patch was applied also to 23.11.

Thanks,
Shani


      reply	other threads:[~2025-12-30 10:04 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-29 14:27 David Marchand
2025-12-30 10:04 ` Shani Peretz [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MW4PR12MB7484EBD1B9DD0EF082982439BFBCA@MW4PR12MB7484.namprd12.prod.outlook.com \
    --to=shperetz@nvidia.com \
    --cc=david.marchand@redhat.com \
    --cc=luca.boccassi@gmail.com \
    --cc=stable@dpdk.org \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).