Import of kernel-6.12.0-55.29.1.el10_0
This commit is contained in:
parent
2f9174b65f
commit
eee6502c4c
@ -12,7 +12,7 @@ RHEL_MINOR = 0
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 55.28.1
|
||||
RHEL_RELEASE = 55.29.1
|
||||
|
||||
#
|
||||
# RHEL_REBASE_NUM
|
||||
|
@ -2077,7 +2077,7 @@ void t4_idma_monitor(struct adapter *adapter,
|
||||
struct sge_idma_monitor_state *idma,
|
||||
int hz, int ticks);
|
||||
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,
|
||||
u32 start_index, bool sleep_ok);
|
||||
void t4_tp_tm_pio_read(struct adapter *adap, u32 *buff, u32 nregs,
|
||||
|
@ -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,
|
||||
"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)
|
||||
ether_addr_copy(adap->vfinfo[vf].vf_mac_addr, mac);
|
||||
return ret;
|
||||
|
@ -10215,11 +10215,12 @@ out:
|
||||
* t4_set_vf_mac_acl - Set MAC address for the specified VF
|
||||
* @adapter: The adapter
|
||||
* @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
|
||||
* @addr: the MAC address(es) to be set to the specified 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;
|
||||
|
||||
@ -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.nmac = naddr;
|
||||
|
||||
switch (adapter->pf) {
|
||||
switch (start) {
|
||||
case 3:
|
||||
memcpy(cmd.macaddr3, addr, sizeof(cmd.macaddr3));
|
||||
break;
|
||||
|
@ -817,10 +817,11 @@ int i40e_pf_reset(struct i40e_hw *hw)
|
||||
void i40e_clear_hw(struct i40e_hw *hw)
|
||||
{
|
||||
u32 num_queues, base_queue;
|
||||
u32 num_pf_int;
|
||||
u32 num_vf_int;
|
||||
s32 num_pf_int;
|
||||
s32 num_vf_int;
|
||||
u32 num_vfs;
|
||||
u32 i, j;
|
||||
s32 i;
|
||||
u32 j;
|
||||
u32 val;
|
||||
u32 eol = 0x7ff;
|
||||
|
||||
|
@ -508,10 +508,14 @@ err_create_repr:
|
||||
*/
|
||||
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 ice_repr *repr;
|
||||
int err;
|
||||
|
||||
if (!ice_is_eswitch_mode_switchdev(pf))
|
||||
return 0;
|
||||
|
||||
repr = ice_repr_create_vf(vf);
|
||||
if (IS_ERR(repr))
|
||||
return PTR_ERR(repr);
|
||||
|
||||
|
@ -334,17 +334,22 @@ out:
|
||||
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;
|
||||
const struct Qdisc_class_ops *cops = p->ops->cl_ops;
|
||||
|
||||
if (cops == NULL)
|
||||
return NULL;
|
||||
if (cops == NULL) {
|
||||
NL_SET_ERR_MSG(extack, "Parent qdisc is not classful");
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
}
|
||||
cl = cops->find(p, classid);
|
||||
|
||||
if (cl == 0)
|
||||
return NULL;
|
||||
if (cl == 0) {
|
||||
NL_SET_ERR_MSG(extack, "Specified class not found");
|
||||
return ERR_PTR(-ENOENT);
|
||||
}
|
||||
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");
|
||||
return -ENOENT;
|
||||
}
|
||||
q = qdisc_leaf(p, clid);
|
||||
q = qdisc_leaf(p, clid, extack);
|
||||
} else if (dev_ingress_queue(dev)) {
|
||||
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");
|
||||
return -ENOENT;
|
||||
}
|
||||
if (IS_ERR(q))
|
||||
return PTR_ERR(q);
|
||||
|
||||
if (tcm->tcm_handle && q->handle != tcm->tcm_handle) {
|
||||
NL_SET_ERR_MSG(extack, "Invalid handle");
|
||||
@ -1639,7 +1646,9 @@ replay:
|
||||
NL_SET_ERR_MSG(extack, "Failed to find specified qdisc");
|
||||
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)) {
|
||||
q = rtnl_dereference(dev_ingress_queue(dev)->qdisc_sleeping);
|
||||
}
|
||||
|
@ -74,6 +74,11 @@ static const struct nla_policy ets_class_policy[TCA_ETS_MAX + 1] = {
|
||||
[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,
|
||||
unsigned int *quantum,
|
||||
struct netlink_ext_ack *extack)
|
||||
@ -291,7 +296,7 @@ static void ets_class_qlen_notify(struct Qdisc *sch, unsigned long arg)
|
||||
* to remove them.
|
||||
*/
|
||||
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,
|
||||
@ -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_class *cl;
|
||||
int err = 0;
|
||||
bool first;
|
||||
|
||||
cl = ets_classify(skb, sch, &err);
|
||||
if (!cl) {
|
||||
@ -424,7 +428,6 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||
return err;
|
||||
}
|
||||
|
||||
first = !cl->qdisc->q.qlen;
|
||||
err = qdisc_enqueue(skb, cl->qdisc, to_free);
|
||||
if (unlikely(err != NET_XMIT_SUCCESS)) {
|
||||
if (net_xmit_drop_count(err)) {
|
||||
@ -434,7 +437,7 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||
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);
|
||||
cl->deficit = cl->quantum;
|
||||
}
|
||||
@ -486,7 +489,7 @@ static struct sk_buff *ets_qdisc_dequeue(struct Qdisc *sch)
|
||||
if (unlikely(!skb))
|
||||
goto out;
|
||||
if (cl->qdisc->q.qlen == 0)
|
||||
list_del(&cl->alist);
|
||||
list_del_init(&cl->alist);
|
||||
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++) {
|
||||
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);
|
||||
}
|
||||
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++) {
|
||||
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++)
|
||||
qdisc_reset(q->classes[band].qdisc);
|
||||
|
Loading…
Reference in New Issue
Block a user