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.
|
# 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
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user