[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160301174233.GO16369@oracle.com>
Date: Tue, 1 Mar 2016 12:42:33 -0500
From: Sowmini Varadhan <sowmini.varadhan@...cle.com>
To: netdev@...r.kernel.org, john.fastabend@...il.com,
john.r.fastabend@...el.com
Subject: net-next build failure due to 16e5cc64?
John,
I'm getting a failure when I try to build the latest net-next. I see
net/sched/sch_mqprio.c: In function `mqprio_init':
net/sched/sch_mqprio.c:145: error: unknown field `tc' specified in initializer
net/sched/sch_mqprio.c:145: warning: missing braces around initializer
net/sched/sch_mqprio.c:145: warning: (near initialization for `tc.<anonymous>')
make[2]: *** [net/sched/sch_mqprio.o] Error 1
I'm not sure why this wasn't noticed before, but in case this is due to my
compiler version:
# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16)
Copyright (C) 2010 Free Software Foundation, Inc.
I'm finding that the minimum fix to avoid this error should be something like
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index e52077f..8b7199f 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -794,7 +794,7 @@ struct tc_to_netdev {
union {
u8 tc;
struct tc_cls_u32_offload *cls_u32;
- };
+ } tc_u;
};
But then all the users of this structure would need to be changed,
which results in this patch below. Should I submit this to net-next,
or is it addressed elsewhere?
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 45843d1..34ff0e8 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -4277,7 +4277,7 @@ int __bnx2x_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
{
if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
return -EINVAL;
- return bnx2x_setup_tc(dev, tc->tc);
+ return bnx2x_setup_tc(dev, tc->tc_u.tc);
}
/* called with rtnl_lock */
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index cf4b729..b2c9355 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -8403,20 +8403,20 @@ int __ixgbe_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
if (!(dev->features & NETIF_F_HW_TC))
return -EINVAL;
- switch (tc->cls_u32->command) {
+ switch (tc->tc_u.cls_u32->command) {
case TC_CLSU32_NEW_KNODE:
case TC_CLSU32_REPLACE_KNODE:
return ixgbe_configure_clsu32(adapter,
- proto, tc->cls_u32);
+ proto, tc->tc_u.cls_u32);
case TC_CLSU32_DELETE_KNODE:
- return ixgbe_delete_clsu32(adapter, tc->cls_u32);
+ return ixgbe_delete_clsu32(adapter, tc->tc_u.cls_u32);
case TC_CLSU32_NEW_HNODE:
case TC_CLSU32_REPLACE_HNODE:
return ixgbe_configure_clsu32_add_hnode(adapter, proto,
- tc->cls_u32);
+ tc->tc_u.cls_u32);
case TC_CLSU32_DELETE_HNODE:
return ixgbe_configure_clsu32_del_hnode(adapter,
- tc->cls_u32);
+ tc->tc_u.cls_u32);
default:
return -EINVAL;
}
@@ -8425,7 +8425,7 @@ int __ixgbe_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
return -EINVAL;
- return ixgbe_setup_tc(dev, tc->tc);
+ return ixgbe_setup_tc(dev, tc->tc_u.tc);
}
#ifdef CONFIG_PCI_IOV
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 96d95cb..90aac4d 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -75,7 +75,7 @@ static int __mlx4_en_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
return -EINVAL;
- return mlx4_en_setup_tc(dev, tc->tc);
+ return mlx4_en_setup_tc(dev, tc->tc_u.tc);
}
#ifdef CONFIG_RFS_ACCEL
diff --git a/drivers/net/ethernet/sfc/tx.c b/drivers/net/ethernet/sfc/tx.c
index 2cdb571..8925426 100644
--- a/drivers/net/ethernet/sfc/tx.c
+++ b/drivers/net/ethernet/sfc/tx.c
@@ -574,7 +574,7 @@ int efx_setup_tc(struct net_device *net_dev, u32 handle, __be16 proto,
if (handle != TC_H_ROOT || ntc->type != TC_SETUP_MQPRIO)
return -EINVAL;
- num_tc = ntc->tc;
+ num_tc = ntc->tc_u.tc;
if (efx_nic_rev(efx) < EFX_REV_FALCON_B0 || num_tc > EFX_MAX_TX_TC)
return -EINVAL;
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index e52077f..8b7199f 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -794,7 +794,7 @@ struct tc_to_netdev {
union {
u8 tc;
struct tc_cls_u32_offload *cls_u32;
- };
+ } tc_u;
};
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
index d54bc94..b41071f 100644
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
@@ -432,11 +432,11 @@ static void u32_remove_hw_knode(struct tcf_proto *tp, u32 handle)
struct tc_to_netdev offload;
offload.type = TC_SETUP_CLSU32;
- offload.cls_u32 = &u32_offload;
+ offload.tc_u.cls_u32 = &u32_offload;
if (dev->netdev_ops->ndo_setup_tc) {
- offload.cls_u32->command = TC_CLSU32_DELETE_KNODE;
- offload.cls_u32->knode.handle = handle;
+ offload.tc_u.cls_u32->command = TC_CLSU32_DELETE_KNODE;
+ offload.tc_u.cls_u32->knode.handle = handle;
dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
tp->protocol, &offload);
}
@@ -449,13 +449,13 @@ static void u32_replace_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h)
struct tc_to_netdev offload;
offload.type = TC_SETUP_CLSU32;
- offload.cls_u32 = &u32_offload;
+ offload.tc_u.cls_u32 = &u32_offload;
if (dev->netdev_ops->ndo_setup_tc) {
- offload.cls_u32->command = TC_CLSU32_NEW_HNODE;
- offload.cls_u32->hnode.divisor = h->divisor;
- offload.cls_u32->hnode.handle = h->handle;
- offload.cls_u32->hnode.prio = h->prio;
+ offload.tc_u.cls_u32->command = TC_CLSU32_NEW_HNODE;
+ offload.tc_u.cls_u32->hnode.divisor = h->divisor;
+ offload.tc_u.cls_u32->hnode.handle = h->handle;
+ offload.tc_u.cls_u32->hnode.prio = h->prio;
dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
tp->protocol, &offload);
@@ -469,13 +469,13 @@ static void u32_clear_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h)
struct tc_to_netdev offload;
offload.type = TC_SETUP_CLSU32;
- offload.cls_u32 = &u32_offload;
+ offload.tc_u.cls_u32 = &u32_offload;
if (dev->netdev_ops->ndo_setup_tc) {
- offload.cls_u32->command = TC_CLSU32_DELETE_HNODE;
- offload.cls_u32->hnode.divisor = h->divisor;
- offload.cls_u32->hnode.handle = h->handle;
- offload.cls_u32->hnode.prio = h->prio;
+ offload.tc_u.cls_u32->command = TC_CLSU32_DELETE_HNODE;
+ offload.tc_u.cls_u32->hnode.divisor = h->divisor;
+ offload.tc_u.cls_u32->hnode.handle = h->handle;
+ offload.tc_u.cls_u32->hnode.prio = h->prio;
dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
tp->protocol, &offload);
@@ -489,23 +489,23 @@ static void u32_replace_hw_knode(struct tcf_proto *tp, struct tc_u_knode *n)
struct tc_to_netdev offload;
offload.type = TC_SETUP_CLSU32;
- offload.cls_u32 = &u32_offload;
+ offload.tc_u.cls_u32 = &u32_offload;
if (dev->netdev_ops->ndo_setup_tc) {
- offload.cls_u32->command = TC_CLSU32_REPLACE_KNODE;
- offload.cls_u32->knode.handle = n->handle;
- offload.cls_u32->knode.fshift = n->fshift;
+ offload.tc_u.cls_u32->command = TC_CLSU32_REPLACE_KNODE;
+ offload.tc_u.cls_u32->knode.handle = n->handle;
+ offload.tc_u.cls_u32->knode.fshift = n->fshift;
#ifdef CONFIG_CLS_U32_MARK
- offload.cls_u32->knode.val = n->val;
- offload.cls_u32->knode.mask = n->mask;
+ offload.tc_u.cls_u32->knode.val = n->val;
+ offload.tc_u.cls_u32->knode.mask = n->mask;
#else
- offload.cls_u32->knode.val = 0;
- offload.cls_u32->knode.mask = 0;
+ offload.tc_u.cls_u32->knode.val = 0;
+ offload.tc_u.cls_u32->knode.mask = 0;
#endif
- offload.cls_u32->knode.sel = &n->sel;
- offload.cls_u32->knode.exts = &n->exts;
+ offload.tc_u.cls_u32->knode.sel = &n->sel;
+ offload.tc_u.cls_u32->knode.exts = &n->exts;
if (n->ht_down)
- offload.cls_u32->knode.link_handle = n->ht_down->handle;
+ offload.tc_u.cls_u32->knode.link_handle = n->ht_down->handle;
dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
tp->protocol, &offload);
diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c
index f9947d1..b399faf 100644
--- a/net/sched/sch_mqprio.c
+++ b/net/sched/sch_mqprio.c
@@ -142,7 +142,7 @@ static int mqprio_init(struct Qdisc *sch, struct nlattr *opt)
*/
if (qopt->hw) {
struct tc_to_netdev tc = {.type = TC_SETUP_MQPRIO,
- .tc = qopt->num_tc};
+ .tc_u.tc = qopt->num_tc};
priv->hw_owned = 1;
err = dev->netdev_ops->ndo_setup_tc(dev, sch->handle, 0, &tc);
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 70d9605..00b4561 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -5330,7 +5330,7 @@ static int __i40e_setup_tc(struct net_device *netdev, u32 handle, __be16 proto,
{
if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
return -EINVAL;
- return i40e_setup_tc(netdev, tc->tc);
+ return i40e_setup_tc(netdev, tc->tc_u.tc);
}
/**
Powered by blists - more mailing lists