Import of kernel-4.18.0-553.77.1.el8_10
This commit is contained in:
parent
b5ee3063db
commit
d912a08f76
@ -12,7 +12,7 @@ RHEL_MINOR = 10
|
|||||||
#
|
#
|
||||||
# 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 = 553.76.1
|
RHEL_RELEASE = 553.77.1
|
||||||
|
|
||||||
#
|
#
|
||||||
# ZSTREAM
|
# ZSTREAM
|
||||||
|
@ -824,7 +824,7 @@ static int scpi_init_versions(struct scpi_drvinfo *info)
|
|||||||
info->firmware_version = le32_to_cpu(caps.platform_version);
|
info->firmware_version = le32_to_cpu(caps.platform_version);
|
||||||
}
|
}
|
||||||
/* Ignore error if not implemented */
|
/* Ignore error if not implemented */
|
||||||
if (scpi_info->is_legacy && ret == -EOPNOTSUPP)
|
if (info->is_legacy && ret == -EOPNOTSUPP)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -914,13 +914,14 @@ static int scpi_probe(struct platform_device *pdev)
|
|||||||
struct resource res;
|
struct resource res;
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
|
struct scpi_drvinfo *scpi_drvinfo;
|
||||||
|
|
||||||
scpi_info = devm_kzalloc(dev, sizeof(*scpi_info), GFP_KERNEL);
|
scpi_drvinfo = devm_kzalloc(dev, sizeof(*scpi_drvinfo), GFP_KERNEL);
|
||||||
if (!scpi_info)
|
if (!scpi_drvinfo)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
if (of_match_device(legacy_scpi_of_match, &pdev->dev))
|
if (of_match_device(legacy_scpi_of_match, &pdev->dev))
|
||||||
scpi_info->is_legacy = true;
|
scpi_drvinfo->is_legacy = true;
|
||||||
|
|
||||||
count = of_count_phandle_with_args(np, "mboxes", "#mbox-cells");
|
count = of_count_phandle_with_args(np, "mboxes", "#mbox-cells");
|
||||||
if (count < 0) {
|
if (count < 0) {
|
||||||
@ -928,19 +929,19 @@ static int scpi_probe(struct platform_device *pdev)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
scpi_info->channels = devm_kcalloc(dev, count, sizeof(struct scpi_chan),
|
scpi_drvinfo->channels =
|
||||||
GFP_KERNEL);
|
devm_kcalloc(dev, count, sizeof(struct scpi_chan), GFP_KERNEL);
|
||||||
if (!scpi_info->channels)
|
if (!scpi_drvinfo->channels)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
ret = devm_add_action(dev, scpi_free_channels, scpi_info);
|
ret = devm_add_action(dev, scpi_free_channels, scpi_drvinfo);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
for (; scpi_info->num_chans < count; scpi_info->num_chans++) {
|
for (; scpi_drvinfo->num_chans < count; scpi_drvinfo->num_chans++) {
|
||||||
resource_size_t size;
|
resource_size_t size;
|
||||||
int idx = scpi_info->num_chans;
|
int idx = scpi_drvinfo->num_chans;
|
||||||
struct scpi_chan *pchan = scpi_info->channels + idx;
|
struct scpi_chan *pchan = scpi_drvinfo->channels + idx;
|
||||||
struct mbox_client *cl = &pchan->cl;
|
struct mbox_client *cl = &pchan->cl;
|
||||||
struct device_node *shmem = of_parse_phandle(np, "shmem", idx);
|
struct device_node *shmem = of_parse_phandle(np, "shmem", idx);
|
||||||
|
|
||||||
@ -984,49 +985,57 @@ static int scpi_probe(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
scpi_info->commands = scpi_std_commands;
|
scpi_drvinfo->commands = scpi_std_commands;
|
||||||
|
|
||||||
platform_set_drvdata(pdev, scpi_info);
|
platform_set_drvdata(pdev, scpi_drvinfo);
|
||||||
|
|
||||||
if (scpi_info->is_legacy) {
|
if (scpi_drvinfo->is_legacy) {
|
||||||
/* Replace with legacy variants */
|
/* Replace with legacy variants */
|
||||||
scpi_ops.clk_set_val = legacy_scpi_clk_set_val;
|
scpi_ops.clk_set_val = legacy_scpi_clk_set_val;
|
||||||
scpi_info->commands = scpi_legacy_commands;
|
scpi_drvinfo->commands = scpi_legacy_commands;
|
||||||
|
|
||||||
/* Fill priority bitmap */
|
/* Fill priority bitmap */
|
||||||
for (idx = 0; idx < ARRAY_SIZE(legacy_hpriority_cmds); idx++)
|
for (idx = 0; idx < ARRAY_SIZE(legacy_hpriority_cmds); idx++)
|
||||||
set_bit(legacy_hpriority_cmds[idx],
|
set_bit(legacy_hpriority_cmds[idx],
|
||||||
scpi_info->cmd_priority);
|
scpi_drvinfo->cmd_priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = scpi_init_versions(scpi_info);
|
scpi_info = scpi_drvinfo;
|
||||||
|
|
||||||
|
ret = scpi_init_versions(scpi_drvinfo);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "incorrect or no SCP firmware found\n");
|
dev_err(dev, "incorrect or no SCP firmware found\n");
|
||||||
|
scpi_info = NULL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scpi_info->is_legacy && !scpi_info->protocol_version &&
|
if (scpi_drvinfo->is_legacy && !scpi_drvinfo->protocol_version &&
|
||||||
!scpi_info->firmware_version)
|
!scpi_drvinfo->firmware_version)
|
||||||
dev_info(dev, "SCP Protocol legacy pre-1.0 firmware\n");
|
dev_info(dev, "SCP Protocol legacy pre-1.0 firmware\n");
|
||||||
else
|
else
|
||||||
dev_info(dev, "SCP Protocol %lu.%lu Firmware %lu.%lu.%lu version\n",
|
dev_info(dev, "SCP Protocol %lu.%lu Firmware %lu.%lu.%lu version\n",
|
||||||
FIELD_GET(PROTO_REV_MAJOR_MASK,
|
FIELD_GET(PROTO_REV_MAJOR_MASK,
|
||||||
scpi_info->protocol_version),
|
scpi_drvinfo->protocol_version),
|
||||||
FIELD_GET(PROTO_REV_MINOR_MASK,
|
FIELD_GET(PROTO_REV_MINOR_MASK,
|
||||||
scpi_info->protocol_version),
|
scpi_drvinfo->protocol_version),
|
||||||
FIELD_GET(FW_REV_MAJOR_MASK,
|
FIELD_GET(FW_REV_MAJOR_MASK,
|
||||||
scpi_info->firmware_version),
|
scpi_drvinfo->firmware_version),
|
||||||
FIELD_GET(FW_REV_MINOR_MASK,
|
FIELD_GET(FW_REV_MINOR_MASK,
|
||||||
scpi_info->firmware_version),
|
scpi_drvinfo->firmware_version),
|
||||||
FIELD_GET(FW_REV_PATCH_MASK,
|
FIELD_GET(FW_REV_PATCH_MASK,
|
||||||
scpi_info->firmware_version));
|
scpi_drvinfo->firmware_version));
|
||||||
scpi_info->scpi_ops = &scpi_ops;
|
|
||||||
|
scpi_drvinfo->scpi_ops = &scpi_ops;
|
||||||
|
|
||||||
ret = devm_device_add_groups(dev, versions_groups);
|
ret = devm_device_add_groups(dev, versions_groups);
|
||||||
if (ret)
|
if (ret)
|
||||||
dev_err(dev, "unable to create sysfs version group\n");
|
dev_err(dev, "unable to create sysfs version group\n");
|
||||||
|
|
||||||
return devm_of_platform_populate(dev);
|
ret = devm_of_platform_populate(dev);
|
||||||
|
if (ret)
|
||||||
|
scpi_info = NULL;
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct of_device_id scpi_of_match[] = {
|
static const struct of_device_id scpi_of_match[] = {
|
||||||
|
@ -1519,7 +1519,9 @@ static int __init init_nfsd(void)
|
|||||||
retval = nfsd4_init_pnfs();
|
retval = nfsd4_init_pnfs();
|
||||||
if (retval)
|
if (retval)
|
||||||
goto out_free_slabs;
|
goto out_free_slabs;
|
||||||
nfsd_stat_init(); /* Statistics */
|
retval = nfsd_stat_init(); /* Statistics */
|
||||||
|
if (retval)
|
||||||
|
goto out_free_pnfs;
|
||||||
retval = nfsd_drc_slab_create();
|
retval = nfsd_drc_slab_create();
|
||||||
if (retval)
|
if (retval)
|
||||||
goto out_free_stat;
|
goto out_free_stat;
|
||||||
@ -1549,6 +1551,7 @@ out_free_lockd:
|
|||||||
nfsd_drc_slab_free();
|
nfsd_drc_slab_free();
|
||||||
out_free_stat:
|
out_free_stat:
|
||||||
nfsd_stat_shutdown();
|
nfsd_stat_shutdown();
|
||||||
|
out_free_pnfs:
|
||||||
nfsd4_exit_pnfs();
|
nfsd4_exit_pnfs();
|
||||||
out_free_slabs:
|
out_free_slabs:
|
||||||
nfsd4_free_slabs();
|
nfsd4_free_slabs();
|
||||||
|
@ -91,10 +91,11 @@ static const struct file_operations nfsd_proc_fops = {
|
|||||||
.release = single_release,
|
.release = single_release,
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
int nfsd_stat_init(void)
|
||||||
nfsd_stat_init(void)
|
|
||||||
{
|
{
|
||||||
svc_proc_register(&init_net, &nfsd_svcstats, &nfsd_proc_fops);
|
if (svc_proc_register(&init_net, &nfsd_svcstats, &nfsd_proc_fops) == NULL)
|
||||||
|
return -ENOMEM;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -38,7 +38,7 @@ struct nfsd_stats {
|
|||||||
extern struct nfsd_stats nfsdstats;
|
extern struct nfsd_stats nfsdstats;
|
||||||
extern struct svc_stat nfsd_svcstats;
|
extern struct svc_stat nfsd_svcstats;
|
||||||
|
|
||||||
void nfsd_stat_init(void);
|
int nfsd_stat_init(void);
|
||||||
void nfsd_stat_shutdown(void);
|
void nfsd_stat_shutdown(void);
|
||||||
|
|
||||||
#endif /* _NFSD_STATS_H */
|
#endif /* _NFSD_STATS_H */
|
||||||
|
@ -658,7 +658,7 @@ static int key_extract_l3l4(struct sk_buff *skb, struct sw_flow_key *key)
|
|||||||
memset(&key->ipv4, 0, sizeof(key->ipv4));
|
memset(&key->ipv4, 0, sizeof(key->ipv4));
|
||||||
}
|
}
|
||||||
} else if (eth_p_mpls(key->eth.type)) {
|
} else if (eth_p_mpls(key->eth.type)) {
|
||||||
u8 label_count = 1;
|
size_t label_count = 1;
|
||||||
|
|
||||||
memset(&key->mpls, 0, sizeof(key->mpls));
|
memset(&key->mpls, 0, sizeof(key->mpls));
|
||||||
skb_set_inner_network_header(skb, skb->mac_len);
|
skb_set_inner_network_header(skb, skb->mac_len);
|
||||||
|
@ -967,6 +967,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
|||||||
|
|
||||||
if (cl != NULL) {
|
if (cl != NULL) {
|
||||||
int old_flags;
|
int old_flags;
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
if (parentid) {
|
if (parentid) {
|
||||||
if (cl->cl_parent &&
|
if (cl->cl_parent &&
|
||||||
@ -997,9 +998,13 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
|||||||
if (usc != NULL)
|
if (usc != NULL)
|
||||||
hfsc_change_usc(cl, usc, cur_time);
|
hfsc_change_usc(cl, usc, cur_time);
|
||||||
|
|
||||||
|
if (cl->qdisc->q.qlen != 0)
|
||||||
|
len = qdisc_peek_len(cl->qdisc);
|
||||||
|
/* Check queue length again since some qdisc implementations
|
||||||
|
* (e.g., netem/codel) might empty the queue during the peek
|
||||||
|
* operation.
|
||||||
|
*/
|
||||||
if (cl->qdisc->q.qlen != 0) {
|
if (cl->qdisc->q.qlen != 0) {
|
||||||
int len = qdisc_peek_len(cl->qdisc);
|
|
||||||
|
|
||||||
if (cl->cl_flags & HFSC_RSC) {
|
if (cl->cl_flags & HFSC_RSC) {
|
||||||
if (old_flags & HFSC_RSC)
|
if (old_flags & HFSC_RSC)
|
||||||
update_ed(cl, len);
|
update_ed(cl, len);
|
||||||
@ -1642,10 +1647,16 @@ hfsc_dequeue(struct Qdisc *sch)
|
|||||||
if (cl->qdisc->q.qlen != 0) {
|
if (cl->qdisc->q.qlen != 0) {
|
||||||
/* update ed */
|
/* update ed */
|
||||||
next_len = qdisc_peek_len(cl->qdisc);
|
next_len = qdisc_peek_len(cl->qdisc);
|
||||||
if (realtime)
|
/* Check queue length again since some qdisc implementations
|
||||||
update_ed(cl, next_len);
|
* (e.g., netem/codel) might empty the queue during the peek
|
||||||
else
|
* operation.
|
||||||
update_d(cl, next_len);
|
*/
|
||||||
|
if (cl->qdisc->q.qlen != 0) {
|
||||||
|
if (realtime)
|
||||||
|
update_ed(cl, next_len);
|
||||||
|
else
|
||||||
|
update_d(cl, next_len);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* the class becomes passive */
|
/* the class becomes passive */
|
||||||
eltree_remove(cl);
|
eltree_remove(cl);
|
||||||
|
@ -129,7 +129,7 @@ int sctp_rcv(struct sk_buff *skb)
|
|||||||
* it's better to just linearize it otherwise crc computing
|
* it's better to just linearize it otherwise crc computing
|
||||||
* takes longer.
|
* takes longer.
|
||||||
*/
|
*/
|
||||||
if ((!is_gso && skb_linearize(skb)) ||
|
if (((!is_gso || skb_cloned(skb)) && skb_linearize(skb)) ||
|
||||||
!pskb_may_pull(skb, sizeof(struct sctphdr)))
|
!pskb_may_pull(skb, sizeof(struct sctphdr)))
|
||||||
goto discard_it;
|
goto discard_it;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user