Import of kernel-6.12.0-55.29.1.el10_0

This commit is contained in:
eabdullin 2025-09-05 17:15:26 +00:00
parent 2f9174b65f
commit eee6502c4c
9 changed files with 41 additions and 23 deletions

View File

@ -12,7 +12,7 @@ RHEL_MINOR = 0
# #
# Use this spot to avoid future merge conflicts. # Use this spot to avoid future merge conflicts.
# Do not trim this comment. # Do not trim this comment.
RHEL_RELEASE = 55.28.1 RHEL_RELEASE = 55.29.1
# #
# RHEL_REBASE_NUM # RHEL_REBASE_NUM

View File

@ -2077,7 +2077,7 @@ void t4_idma_monitor(struct adapter *adapter,
struct sge_idma_monitor_state *idma, struct sge_idma_monitor_state *idma,
int hz, int ticks); int hz, int ticks);
int t4_set_vf_mac_acl(struct adapter *adapter, unsigned int vf, int t4_set_vf_mac_acl(struct adapter *adapter, unsigned int vf,
unsigned int naddr, u8 *addr); u8 start, unsigned int naddr, u8 *addr);
void t4_tp_pio_read(struct adapter *adap, u32 *buff, u32 nregs, void t4_tp_pio_read(struct adapter *adap, u32 *buff, u32 nregs,
u32 start_index, bool sleep_ok); u32 start_index, bool sleep_ok);
void t4_tp_tm_pio_read(struct adapter *adap, u32 *buff, u32 nregs, void t4_tp_tm_pio_read(struct adapter *adap, u32 *buff, u32 nregs,

View File

@ -3246,7 +3246,7 @@ static int cxgb4_mgmt_set_vf_mac(struct net_device *dev, int vf, u8 *mac)
dev_info(pi->adapter->pdev_dev, dev_info(pi->adapter->pdev_dev,
"Setting MAC %pM on VF %d\n", mac, vf); "Setting MAC %pM on VF %d\n", mac, vf);
ret = t4_set_vf_mac_acl(adap, vf + 1, 1, mac); ret = t4_set_vf_mac_acl(adap, vf + 1, pi->lport, 1, mac);
if (!ret) if (!ret)
ether_addr_copy(adap->vfinfo[vf].vf_mac_addr, mac); ether_addr_copy(adap->vfinfo[vf].vf_mac_addr, mac);
return ret; return ret;

View File

@ -10215,11 +10215,12 @@ out:
* t4_set_vf_mac_acl - Set MAC address for the specified VF * t4_set_vf_mac_acl - Set MAC address for the specified VF
* @adapter: The adapter * @adapter: The adapter
* @vf: one of the VFs instantiated by the specified PF * @vf: one of the VFs instantiated by the specified PF
* @start: The start port id associated with specified VF
* @naddr: the number of MAC addresses * @naddr: the number of MAC addresses
* @addr: the MAC address(es) to be set to the specified VF * @addr: the MAC address(es) to be set to the specified VF
*/ */
int t4_set_vf_mac_acl(struct adapter *adapter, unsigned int vf, int t4_set_vf_mac_acl(struct adapter *adapter, unsigned int vf,
unsigned int naddr, u8 *addr) u8 start, unsigned int naddr, u8 *addr)
{ {
struct fw_acl_mac_cmd cmd; struct fw_acl_mac_cmd cmd;
@ -10234,7 +10235,7 @@ int t4_set_vf_mac_acl(struct adapter *adapter, unsigned int vf,
cmd.en_to_len16 = cpu_to_be32((unsigned int)FW_LEN16(cmd)); cmd.en_to_len16 = cpu_to_be32((unsigned int)FW_LEN16(cmd));
cmd.nmac = naddr; cmd.nmac = naddr;
switch (adapter->pf) { switch (start) {
case 3: case 3:
memcpy(cmd.macaddr3, addr, sizeof(cmd.macaddr3)); memcpy(cmd.macaddr3, addr, sizeof(cmd.macaddr3));
break; break;

View File

@ -817,10 +817,11 @@ int i40e_pf_reset(struct i40e_hw *hw)
void i40e_clear_hw(struct i40e_hw *hw) void i40e_clear_hw(struct i40e_hw *hw)
{ {
u32 num_queues, base_queue; u32 num_queues, base_queue;
u32 num_pf_int; s32 num_pf_int;
u32 num_vf_int; s32 num_vf_int;
u32 num_vfs; u32 num_vfs;
u32 i, j; s32 i;
u32 j;
u32 val; u32 val;
u32 eol = 0x7ff; u32 eol = 0x7ff;

View File

@ -508,10 +508,14 @@ err_create_repr:
*/ */
int ice_eswitch_attach_vf(struct ice_pf *pf, struct ice_vf *vf) int ice_eswitch_attach_vf(struct ice_pf *pf, struct ice_vf *vf)
{ {
struct ice_repr *repr = ice_repr_create_vf(vf);
struct devlink *devlink = priv_to_devlink(pf); struct devlink *devlink = priv_to_devlink(pf);
struct ice_repr *repr;
int err; int err;
if (!ice_is_eswitch_mode_switchdev(pf))
return 0;
repr = ice_repr_create_vf(vf);
if (IS_ERR(repr)) if (IS_ERR(repr))
return PTR_ERR(repr); return PTR_ERR(repr);

View File

@ -334,17 +334,22 @@ out:
return q; return q;
} }
static struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid) static struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid,
struct netlink_ext_ack *extack)
{ {
unsigned long cl; unsigned long cl;
const struct Qdisc_class_ops *cops = p->ops->cl_ops; const struct Qdisc_class_ops *cops = p->ops->cl_ops;
if (cops == NULL) if (cops == NULL) {
return NULL; NL_SET_ERR_MSG(extack, "Parent qdisc is not classful");
return ERR_PTR(-EOPNOTSUPP);
}
cl = cops->find(p, classid); cl = cops->find(p, classid);
if (cl == 0) if (cl == 0) {
return NULL; NL_SET_ERR_MSG(extack, "Specified class not found");
return ERR_PTR(-ENOENT);
}
return cops->leaf(p, cl); return cops->leaf(p, cl);
} }
@ -1535,7 +1540,7 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n,
NL_SET_ERR_MSG(extack, "Failed to find qdisc with specified classid"); NL_SET_ERR_MSG(extack, "Failed to find qdisc with specified classid");
return -ENOENT; return -ENOENT;
} }
q = qdisc_leaf(p, clid); q = qdisc_leaf(p, clid, extack);
} else if (dev_ingress_queue(dev)) { } else if (dev_ingress_queue(dev)) {
q = rtnl_dereference(dev_ingress_queue(dev)->qdisc_sleeping); q = rtnl_dereference(dev_ingress_queue(dev)->qdisc_sleeping);
} }
@ -1546,6 +1551,8 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n,
NL_SET_ERR_MSG(extack, "Cannot find specified qdisc on specified device"); NL_SET_ERR_MSG(extack, "Cannot find specified qdisc on specified device");
return -ENOENT; return -ENOENT;
} }
if (IS_ERR(q))
return PTR_ERR(q);
if (tcm->tcm_handle && q->handle != tcm->tcm_handle) { if (tcm->tcm_handle && q->handle != tcm->tcm_handle) {
NL_SET_ERR_MSG(extack, "Invalid handle"); NL_SET_ERR_MSG(extack, "Invalid handle");
@ -1639,7 +1646,9 @@ replay:
NL_SET_ERR_MSG(extack, "Failed to find specified qdisc"); NL_SET_ERR_MSG(extack, "Failed to find specified qdisc");
return -ENOENT; return -ENOENT;
} }
q = qdisc_leaf(p, clid); q = qdisc_leaf(p, clid, extack);
if (IS_ERR(q))
return PTR_ERR(q);
} else if (dev_ingress_queue_create(dev)) { } else if (dev_ingress_queue_create(dev)) {
q = rtnl_dereference(dev_ingress_queue(dev)->qdisc_sleeping); q = rtnl_dereference(dev_ingress_queue(dev)->qdisc_sleeping);
} }

View File

@ -74,6 +74,11 @@ static const struct nla_policy ets_class_policy[TCA_ETS_MAX + 1] = {
[TCA_ETS_QUANTA_BAND] = { .type = NLA_U32 }, [TCA_ETS_QUANTA_BAND] = { .type = NLA_U32 },
}; };
static bool cl_is_active(struct ets_class *cl)
{
return !list_empty(&cl->alist);
}
static int ets_quantum_parse(struct Qdisc *sch, const struct nlattr *attr, static int ets_quantum_parse(struct Qdisc *sch, const struct nlattr *attr,
unsigned int *quantum, unsigned int *quantum,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
@ -291,7 +296,7 @@ static void ets_class_qlen_notify(struct Qdisc *sch, unsigned long arg)
* to remove them. * to remove them.
*/ */
if (!ets_class_is_strict(q, cl) && sch->q.qlen) if (!ets_class_is_strict(q, cl) && sch->q.qlen)
list_del(&cl->alist); list_del_init(&cl->alist);
} }
static int ets_class_dump(struct Qdisc *sch, unsigned long arg, static int ets_class_dump(struct Qdisc *sch, unsigned long arg,
@ -414,7 +419,6 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
struct ets_sched *q = qdisc_priv(sch); struct ets_sched *q = qdisc_priv(sch);
struct ets_class *cl; struct ets_class *cl;
int err = 0; int err = 0;
bool first;
cl = ets_classify(skb, sch, &err); cl = ets_classify(skb, sch, &err);
if (!cl) { if (!cl) {
@ -424,7 +428,6 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
return err; return err;
} }
first = !cl->qdisc->q.qlen;
err = qdisc_enqueue(skb, cl->qdisc, to_free); err = qdisc_enqueue(skb, cl->qdisc, to_free);
if (unlikely(err != NET_XMIT_SUCCESS)) { if (unlikely(err != NET_XMIT_SUCCESS)) {
if (net_xmit_drop_count(err)) { if (net_xmit_drop_count(err)) {
@ -434,7 +437,7 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
return err; return err;
} }
if (first && !ets_class_is_strict(q, cl)) { if (!cl_is_active(cl) && !ets_class_is_strict(q, cl)) {
list_add_tail(&cl->alist, &q->active); list_add_tail(&cl->alist, &q->active);
cl->deficit = cl->quantum; cl->deficit = cl->quantum;
} }
@ -486,7 +489,7 @@ static struct sk_buff *ets_qdisc_dequeue(struct Qdisc *sch)
if (unlikely(!skb)) if (unlikely(!skb))
goto out; goto out;
if (cl->qdisc->q.qlen == 0) if (cl->qdisc->q.qlen == 0)
list_del(&cl->alist); list_del_init(&cl->alist);
return ets_qdisc_dequeue_skb(sch, skb); return ets_qdisc_dequeue_skb(sch, skb);
} }
@ -655,7 +658,7 @@ static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt,
} }
for (i = q->nbands; i < oldbands; i++) { for (i = q->nbands; i < oldbands; i++) {
if (i >= q->nstrict && q->classes[i].qdisc->q.qlen) if (i >= q->nstrict && q->classes[i].qdisc->q.qlen)
list_del(&q->classes[i].alist); list_del_init(&q->classes[i].alist);
qdisc_tree_flush_backlog(q->classes[i].qdisc); qdisc_tree_flush_backlog(q->classes[i].qdisc);
} }
WRITE_ONCE(q->nstrict, nstrict); WRITE_ONCE(q->nstrict, nstrict);
@ -711,7 +714,7 @@ static void ets_qdisc_reset(struct Qdisc *sch)
for (band = q->nstrict; band < q->nbands; band++) { for (band = q->nstrict; band < q->nbands; band++) {
if (q->classes[band].qdisc->q.qlen) if (q->classes[band].qdisc->q.qlen)
list_del(&q->classes[band].alist); list_del_init(&q->classes[band].alist);
} }
for (band = 0; band < q->nbands; band++) for (band = 0; band < q->nbands; band++)
qdisc_reset(q->classes[band].qdisc); qdisc_reset(q->classes[band].qdisc);