Import of kernel-5.14.0-570.55.1.el9_6
This commit is contained in:
parent
434c65763c
commit
fdf04f711e
@ -12,7 +12,7 @@ RHEL_MINOR = 6
|
|||||||
#
|
#
|
||||||
# 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 = 570.52.1
|
RHEL_RELEASE = 570.55.1
|
||||||
|
|
||||||
#
|
#
|
||||||
# ZSTREAM
|
# ZSTREAM
|
||||||
|
|||||||
@ -815,7 +815,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;
|
||||||
@ -913,13 +913,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) {
|
||||||
@ -927,19 +928,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);
|
||||||
|
|
||||||
@ -986,45 +987,53 @@ 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;
|
|
||||||
|
|
||||||
return devm_of_platform_populate(dev);
|
scpi_drvinfo->scpi_ops = &scpi_ops;
|
||||||
|
|
||||||
|
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[] = {
|
||||||
|
|||||||
@ -255,6 +255,8 @@ static void irdma_remove(struct auxiliary_device *aux_dev)
|
|||||||
ice_rdma_update_vsi_filter(pf, iwdev->vsi_num, false);
|
ice_rdma_update_vsi_filter(pf, iwdev->vsi_num, false);
|
||||||
irdma_deinit_interrupts(iwdev->rf, pf);
|
irdma_deinit_interrupts(iwdev->rf, pf);
|
||||||
|
|
||||||
|
kfree(iwdev->rf);
|
||||||
|
|
||||||
pr_debug("INIT: Gen2 PF[%d] device remove success\n", PCI_FUNC(pf->pdev->devfn));
|
pr_debug("INIT: Gen2 PF[%d] device remove success\n", PCI_FUNC(pf->pdev->devfn));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4871,5 +4871,4 @@ void irdma_ib_dealloc_device(struct ib_device *ibdev)
|
|||||||
|
|
||||||
irdma_rt_deinit_hw(iwdev);
|
irdma_rt_deinit_hw(iwdev);
|
||||||
irdma_ctrl_deinit_hw(iwdev->rf);
|
irdma_ctrl_deinit_hw(iwdev->rf);
|
||||||
kfree(iwdev->rf);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2122,9 +2122,7 @@ static void ibmvnic_tx_scrq_clean_buffer(struct ibmvnic_adapter *adapter,
|
|||||||
tx_pool->num_buffers - 1 :
|
tx_pool->num_buffers - 1 :
|
||||||
tx_pool->consumer_index - 1;
|
tx_pool->consumer_index - 1;
|
||||||
tx_buff = &tx_pool->tx_buff[index];
|
tx_buff = &tx_pool->tx_buff[index];
|
||||||
adapter->netdev->stats.tx_packets--;
|
adapter->tx_stats_buffers[queue_num].batched_packets--;
|
||||||
adapter->netdev->stats.tx_bytes -= tx_buff->skb->len;
|
|
||||||
adapter->tx_stats_buffers[queue_num].packets--;
|
|
||||||
adapter->tx_stats_buffers[queue_num].bytes -=
|
adapter->tx_stats_buffers[queue_num].bytes -=
|
||||||
tx_buff->skb->len;
|
tx_buff->skb->len;
|
||||||
dev_kfree_skb_any(tx_buff->skb);
|
dev_kfree_skb_any(tx_buff->skb);
|
||||||
@ -2227,7 +2225,8 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
unsigned int tx_map_failed = 0;
|
unsigned int tx_map_failed = 0;
|
||||||
union sub_crq indir_arr[16];
|
union sub_crq indir_arr[16];
|
||||||
unsigned int tx_dropped = 0;
|
unsigned int tx_dropped = 0;
|
||||||
unsigned int tx_packets = 0;
|
unsigned int tx_dpackets = 0;
|
||||||
|
unsigned int tx_bpackets = 0;
|
||||||
unsigned int tx_bytes = 0;
|
unsigned int tx_bytes = 0;
|
||||||
dma_addr_t data_dma_addr;
|
dma_addr_t data_dma_addr;
|
||||||
struct netdev_queue *txq;
|
struct netdev_queue *txq;
|
||||||
@ -2399,6 +2398,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
if (lpar_rc != H_SUCCESS)
|
if (lpar_rc != H_SUCCESS)
|
||||||
goto tx_err;
|
goto tx_err;
|
||||||
|
|
||||||
|
tx_dpackets++;
|
||||||
goto early_exit;
|
goto early_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2426,6 +2426,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
if (lpar_rc != H_SUCCESS)
|
if (lpar_rc != H_SUCCESS)
|
||||||
goto tx_err;
|
goto tx_err;
|
||||||
}
|
}
|
||||||
|
tx_bpackets++;
|
||||||
|
|
||||||
early_exit:
|
early_exit:
|
||||||
if (atomic_add_return(num_entries, &tx_scrq->used)
|
if (atomic_add_return(num_entries, &tx_scrq->used)
|
||||||
@ -2434,7 +2435,6 @@ early_exit:
|
|||||||
netif_stop_subqueue(netdev, queue_num);
|
netif_stop_subqueue(netdev, queue_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
tx_packets++;
|
|
||||||
tx_bytes += skb->len;
|
tx_bytes += skb->len;
|
||||||
txq_trans_cond_update(txq);
|
txq_trans_cond_update(txq);
|
||||||
ret = NETDEV_TX_OK;
|
ret = NETDEV_TX_OK;
|
||||||
@ -2462,12 +2462,10 @@ tx_err:
|
|||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
netdev->stats.tx_dropped += tx_dropped;
|
|
||||||
netdev->stats.tx_bytes += tx_bytes;
|
|
||||||
netdev->stats.tx_packets += tx_packets;
|
|
||||||
adapter->tx_send_failed += tx_send_failed;
|
adapter->tx_send_failed += tx_send_failed;
|
||||||
adapter->tx_map_failed += tx_map_failed;
|
adapter->tx_map_failed += tx_map_failed;
|
||||||
adapter->tx_stats_buffers[queue_num].packets += tx_packets;
|
adapter->tx_stats_buffers[queue_num].batched_packets += tx_bpackets;
|
||||||
|
adapter->tx_stats_buffers[queue_num].direct_packets += tx_dpackets;
|
||||||
adapter->tx_stats_buffers[queue_num].bytes += tx_bytes;
|
adapter->tx_stats_buffers[queue_num].bytes += tx_bytes;
|
||||||
adapter->tx_stats_buffers[queue_num].dropped_packets += tx_dropped;
|
adapter->tx_stats_buffers[queue_num].dropped_packets += tx_dropped;
|
||||||
|
|
||||||
@ -3266,6 +3264,25 @@ err:
|
|||||||
return -ret;
|
return -ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ibmvnic_get_stats64(struct net_device *netdev,
|
||||||
|
struct rtnl_link_stats64 *stats)
|
||||||
|
{
|
||||||
|
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < adapter->req_rx_queues; i++) {
|
||||||
|
stats->rx_packets += adapter->rx_stats_buffers[i].packets;
|
||||||
|
stats->rx_bytes += adapter->rx_stats_buffers[i].bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < adapter->req_tx_queues; i++) {
|
||||||
|
stats->tx_packets += adapter->tx_stats_buffers[i].batched_packets;
|
||||||
|
stats->tx_packets += adapter->tx_stats_buffers[i].direct_packets;
|
||||||
|
stats->tx_bytes += adapter->tx_stats_buffers[i].bytes;
|
||||||
|
stats->tx_dropped += adapter->tx_stats_buffers[i].dropped_packets;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void ibmvnic_tx_timeout(struct net_device *dev, unsigned int txqueue)
|
static void ibmvnic_tx_timeout(struct net_device *dev, unsigned int txqueue)
|
||||||
{
|
{
|
||||||
struct ibmvnic_adapter *adapter = netdev_priv(dev);
|
struct ibmvnic_adapter *adapter = netdev_priv(dev);
|
||||||
@ -3381,8 +3398,6 @@ restart_poll:
|
|||||||
|
|
||||||
length = skb->len;
|
length = skb->len;
|
||||||
napi_gro_receive(napi, skb); /* send it up */
|
napi_gro_receive(napi, skb); /* send it up */
|
||||||
netdev->stats.rx_packets++;
|
|
||||||
netdev->stats.rx_bytes += length;
|
|
||||||
adapter->rx_stats_buffers[scrq_num].packets++;
|
adapter->rx_stats_buffers[scrq_num].packets++;
|
||||||
adapter->rx_stats_buffers[scrq_num].bytes += length;
|
adapter->rx_stats_buffers[scrq_num].bytes += length;
|
||||||
frames_processed++;
|
frames_processed++;
|
||||||
@ -3492,6 +3507,7 @@ static const struct net_device_ops ibmvnic_netdev_ops = {
|
|||||||
.ndo_set_rx_mode = ibmvnic_set_multi,
|
.ndo_set_rx_mode = ibmvnic_set_multi,
|
||||||
.ndo_set_mac_address = ibmvnic_set_mac,
|
.ndo_set_mac_address = ibmvnic_set_mac,
|
||||||
.ndo_validate_addr = eth_validate_addr,
|
.ndo_validate_addr = eth_validate_addr,
|
||||||
|
.ndo_get_stats64 = ibmvnic_get_stats64,
|
||||||
.ndo_tx_timeout = ibmvnic_tx_timeout,
|
.ndo_tx_timeout = ibmvnic_tx_timeout,
|
||||||
.ndo_change_mtu = ibmvnic_change_mtu,
|
.ndo_change_mtu = ibmvnic_change_mtu,
|
||||||
.ndo_features_check = ibmvnic_features_check,
|
.ndo_features_check = ibmvnic_features_check,
|
||||||
@ -3656,7 +3672,10 @@ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
|
|||||||
memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
|
memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
|
||||||
|
|
||||||
for (i = 0; i < adapter->req_tx_queues; i++) {
|
for (i = 0; i < adapter->req_tx_queues; i++) {
|
||||||
snprintf(data, ETH_GSTRING_LEN, "tx%d_packets", i);
|
snprintf(data, ETH_GSTRING_LEN, "tx%d_batched_packets", i);
|
||||||
|
data += ETH_GSTRING_LEN;
|
||||||
|
|
||||||
|
snprintf(data, ETH_GSTRING_LEN, "tx%d_direct_packets", i);
|
||||||
data += ETH_GSTRING_LEN;
|
data += ETH_GSTRING_LEN;
|
||||||
|
|
||||||
snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
|
snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
|
||||||
@ -3734,7 +3753,9 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
|
|||||||
(adapter, ibmvnic_stats[i].offset));
|
(adapter, ibmvnic_stats[i].offset));
|
||||||
|
|
||||||
for (j = 0; j < adapter->req_tx_queues; j++) {
|
for (j = 0; j < adapter->req_tx_queues; j++) {
|
||||||
data[i] = adapter->tx_stats_buffers[j].packets;
|
data[i] = adapter->tx_stats_buffers[j].batched_packets;
|
||||||
|
i++;
|
||||||
|
data[i] = adapter->tx_stats_buffers[j].direct_packets;
|
||||||
i++;
|
i++;
|
||||||
data[i] = adapter->tx_stats_buffers[j].bytes;
|
data[i] = adapter->tx_stats_buffers[j].bytes;
|
||||||
i++;
|
i++;
|
||||||
|
|||||||
@ -176,20 +176,25 @@ struct ibmvnic_statistics {
|
|||||||
u8 reserved[72];
|
u8 reserved[72];
|
||||||
} __packed __aligned(8);
|
} __packed __aligned(8);
|
||||||
|
|
||||||
#define NUM_TX_STATS 3
|
|
||||||
struct ibmvnic_tx_queue_stats {
|
struct ibmvnic_tx_queue_stats {
|
||||||
u64 packets;
|
u64 batched_packets;
|
||||||
|
u64 direct_packets;
|
||||||
u64 bytes;
|
u64 bytes;
|
||||||
u64 dropped_packets;
|
u64 dropped_packets;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NUM_RX_STATS 3
|
#define NUM_TX_STATS \
|
||||||
|
(sizeof(struct ibmvnic_tx_queue_stats) / sizeof(u64))
|
||||||
|
|
||||||
struct ibmvnic_rx_queue_stats {
|
struct ibmvnic_rx_queue_stats {
|
||||||
u64 packets;
|
u64 packets;
|
||||||
u64 bytes;
|
u64 bytes;
|
||||||
u64 interrupts;
|
u64 interrupts;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define NUM_RX_STATS \
|
||||||
|
(sizeof(struct ibmvnic_rx_queue_stats) / sizeof(u64))
|
||||||
|
|
||||||
struct ibmvnic_acl_buffer {
|
struct ibmvnic_acl_buffer {
|
||||||
__be32 len;
|
__be32 len;
|
||||||
__be32 version;
|
__be32 version;
|
||||||
|
|||||||
@ -165,7 +165,7 @@ static int tpmi_get_logical_id(unsigned int cpu, struct tpmi_cpu_info *info)
|
|||||||
|
|
||||||
info->punit_thread_id = FIELD_GET(LP_ID_MASK, data);
|
info->punit_thread_id = FIELD_GET(LP_ID_MASK, data);
|
||||||
info->punit_core_id = FIELD_GET(MODULE_ID_MASK, data);
|
info->punit_core_id = FIELD_GET(MODULE_ID_MASK, data);
|
||||||
info->pkg_id = topology_physical_package_id(cpu);
|
info->pkg_id = topology_logical_package_id(cpu);
|
||||||
info->linux_cpu = cpu;
|
info->linux_cpu = cpu;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -1245,7 +1245,7 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,
|
|||||||
struct lpfc_nvmet_tgtport *tgtp;
|
struct lpfc_nvmet_tgtport *tgtp;
|
||||||
struct lpfc_async_xchg_ctx *ctxp =
|
struct lpfc_async_xchg_ctx *ctxp =
|
||||||
container_of(rsp, struct lpfc_async_xchg_ctx, hdlrctx.fcp_req);
|
container_of(rsp, struct lpfc_async_xchg_ctx, hdlrctx.fcp_req);
|
||||||
struct rqb_dmabuf *nvmebuf = ctxp->rqb_buffer;
|
struct rqb_dmabuf *nvmebuf;
|
||||||
struct lpfc_hba *phba = ctxp->phba;
|
struct lpfc_hba *phba = ctxp->phba;
|
||||||
unsigned long iflag;
|
unsigned long iflag;
|
||||||
|
|
||||||
@ -1253,13 +1253,18 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,
|
|||||||
lpfc_nvmeio_data(phba, "NVMET DEFERRCV: xri x%x sz %d CPU %02x\n",
|
lpfc_nvmeio_data(phba, "NVMET DEFERRCV: xri x%x sz %d CPU %02x\n",
|
||||||
ctxp->oxid, ctxp->size, raw_smp_processor_id());
|
ctxp->oxid, ctxp->size, raw_smp_processor_id());
|
||||||
|
|
||||||
|
spin_lock_irqsave(&ctxp->ctxlock, iflag);
|
||||||
|
nvmebuf = ctxp->rqb_buffer;
|
||||||
if (!nvmebuf) {
|
if (!nvmebuf) {
|
||||||
|
spin_unlock_irqrestore(&ctxp->ctxlock, iflag);
|
||||||
lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
|
lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
|
||||||
"6425 Defer rcv: no buffer oxid x%x: "
|
"6425 Defer rcv: no buffer oxid x%x: "
|
||||||
"flg %x ste %x\n",
|
"flg %x ste %x\n",
|
||||||
ctxp->oxid, ctxp->flag, ctxp->state);
|
ctxp->oxid, ctxp->flag, ctxp->state);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ctxp->rqb_buffer = NULL;
|
||||||
|
spin_unlock_irqrestore(&ctxp->ctxlock, iflag);
|
||||||
|
|
||||||
tgtp = phba->targetport->private;
|
tgtp = phba->targetport->private;
|
||||||
if (tgtp)
|
if (tgtp)
|
||||||
@ -1267,9 +1272,6 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,
|
|||||||
|
|
||||||
/* Free the nvmebuf since a new buffer already replaced it */
|
/* Free the nvmebuf since a new buffer already replaced it */
|
||||||
nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
|
nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
|
||||||
spin_lock_irqsave(&ctxp->ctxlock, iflag);
|
|
||||||
ctxp->rqb_buffer = NULL;
|
|
||||||
spin_unlock_irqrestore(&ctxp->ctxlock, iflag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -90,6 +90,10 @@ static int efivarfs_d_compare(const struct dentry *dentry,
|
|||||||
{
|
{
|
||||||
int guid = len - EFI_VARIABLE_GUID_LEN;
|
int guid = len - EFI_VARIABLE_GUID_LEN;
|
||||||
|
|
||||||
|
/* Parallel lookups may produce a temporary invalid filename */
|
||||||
|
if (guid <= 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (name->len != len)
|
if (name->len != len)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
|||||||
@ -2236,8 +2236,13 @@ static __net_init int nfsd_net_init(struct net *net)
|
|||||||
retval = nfsd_stat_counters_init(nn);
|
retval = nfsd_stat_counters_init(nn);
|
||||||
if (retval)
|
if (retval)
|
||||||
goto out_repcache_error;
|
goto out_repcache_error;
|
||||||
|
|
||||||
memset(&nn->nfsd_svcstats, 0, sizeof(nn->nfsd_svcstats));
|
memset(&nn->nfsd_svcstats, 0, sizeof(nn->nfsd_svcstats));
|
||||||
nn->nfsd_svcstats.program = &nfsd_program;
|
nn->nfsd_svcstats.program = &nfsd_program;
|
||||||
|
if (!nfsd_proc_stat_init(net)) {
|
||||||
|
retval = -ENOMEM;
|
||||||
|
goto out_proc_error;
|
||||||
|
}
|
||||||
nn->nfsd_versions = NULL;
|
nn->nfsd_versions = NULL;
|
||||||
nn->nfsd4_minorversions = NULL;
|
nn->nfsd4_minorversions = NULL;
|
||||||
nn->nfsd_info.mutex = &nfsd_mutex;
|
nn->nfsd_info.mutex = &nfsd_mutex;
|
||||||
@ -2245,10 +2250,11 @@ static __net_init int nfsd_net_init(struct net *net)
|
|||||||
nfsd4_init_leases_net(nn);
|
nfsd4_init_leases_net(nn);
|
||||||
get_random_bytes(&nn->siphash_key, sizeof(nn->siphash_key));
|
get_random_bytes(&nn->siphash_key, sizeof(nn->siphash_key));
|
||||||
seqlock_init(&nn->writeverf_lock);
|
seqlock_init(&nn->writeverf_lock);
|
||||||
nfsd_proc_stat_init(net);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
out_proc_error:
|
||||||
|
percpu_counter_destroy_many(nn->counter, NFSD_STATS_COUNTERS_NUM);
|
||||||
out_repcache_error:
|
out_repcache_error:
|
||||||
nfsd_idmap_shutdown(net);
|
nfsd_idmap_shutdown(net);
|
||||||
out_idmap_error:
|
out_idmap_error:
|
||||||
|
|||||||
@ -115,11 +115,11 @@ void nfsd_stat_counters_destroy(struct nfsd_net *nn)
|
|||||||
nfsd_percpu_counters_destroy(nn->counter, NFSD_STATS_COUNTERS_NUM);
|
nfsd_percpu_counters_destroy(nn->counter, NFSD_STATS_COUNTERS_NUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nfsd_proc_stat_init(struct net *net)
|
struct proc_dir_entry *nfsd_proc_stat_init(struct net *net)
|
||||||
{
|
{
|
||||||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||||
|
|
||||||
svc_proc_register(net, &nn->nfsd_svcstats, &nfsd_proc_ops);
|
return svc_proc_register(net, &nn->nfsd_svcstats, &nfsd_proc_ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nfsd_proc_stat_shutdown(struct net *net)
|
void nfsd_proc_stat_shutdown(struct net *net)
|
||||||
|
|||||||
@ -15,7 +15,7 @@ void nfsd_percpu_counters_reset(struct percpu_counter *counters, int num);
|
|||||||
void nfsd_percpu_counters_destroy(struct percpu_counter *counters, int num);
|
void nfsd_percpu_counters_destroy(struct percpu_counter *counters, int num);
|
||||||
int nfsd_stat_counters_init(struct nfsd_net *nn);
|
int nfsd_stat_counters_init(struct nfsd_net *nn);
|
||||||
void nfsd_stat_counters_destroy(struct nfsd_net *nn);
|
void nfsd_stat_counters_destroy(struct nfsd_net *nn);
|
||||||
void nfsd_proc_stat_init(struct net *net);
|
struct proc_dir_entry *nfsd_proc_stat_init(struct net *net);
|
||||||
void nfsd_proc_stat_shutdown(struct net *net);
|
void nfsd_proc_stat_shutdown(struct net *net);
|
||||||
|
|
||||||
static inline void nfsd_stats_rc_hits_inc(struct nfsd_net *nn)
|
static inline void nfsd_stats_rc_hits_inc(struct nfsd_net *nn)
|
||||||
|
|||||||
@ -255,20 +255,47 @@ svc_tcp_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
svc_tcp_sock_recv_cmsg(struct svc_sock *svsk, struct msghdr *msg)
|
svc_tcp_sock_recv_cmsg(struct socket *sock, unsigned int *msg_flags)
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
struct cmsghdr cmsg;
|
struct cmsghdr cmsg;
|
||||||
u8 buf[CMSG_SPACE(sizeof(u8))];
|
u8 buf[CMSG_SPACE(sizeof(u8))];
|
||||||
} u;
|
} u;
|
||||||
struct socket *sock = svsk->sk_sock;
|
u8 alert[2];
|
||||||
|
struct kvec alert_kvec = {
|
||||||
|
.iov_base = alert,
|
||||||
|
.iov_len = sizeof(alert),
|
||||||
|
};
|
||||||
|
struct msghdr msg = {
|
||||||
|
.msg_flags = *msg_flags,
|
||||||
|
.msg_control = &u,
|
||||||
|
.msg_controllen = sizeof(u),
|
||||||
|
};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
msg->msg_control = &u;
|
iov_iter_kvec(&msg.msg_iter, ITER_DEST, &alert_kvec, 1,
|
||||||
msg->msg_controllen = sizeof(u);
|
alert_kvec.iov_len);
|
||||||
|
ret = sock_recvmsg(sock, &msg, MSG_DONTWAIT);
|
||||||
|
if (ret > 0 &&
|
||||||
|
tls_get_record_type(sock->sk, &u.cmsg) == TLS_RECORD_TYPE_ALERT) {
|
||||||
|
iov_iter_revert(&msg.msg_iter, ret);
|
||||||
|
ret = svc_tcp_sock_process_cmsg(sock, &msg, &u.cmsg, -EAGAIN);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
svc_tcp_sock_recvmsg(struct svc_sock *svsk, struct msghdr *msg)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct socket *sock = svsk->sk_sock;
|
||||||
|
|
||||||
ret = sock_recvmsg(sock, msg, MSG_DONTWAIT);
|
ret = sock_recvmsg(sock, msg, MSG_DONTWAIT);
|
||||||
if (unlikely(msg->msg_controllen != sizeof(u)))
|
if (msg->msg_flags & MSG_CTRUNC) {
|
||||||
ret = svc_tcp_sock_process_cmsg(sock, msg, &u.cmsg, ret);
|
msg->msg_flags &= ~(MSG_CTRUNC | MSG_EOR);
|
||||||
|
if (ret == 0 || ret == -EIO)
|
||||||
|
ret = svc_tcp_sock_recv_cmsg(sock, &msg->msg_flags);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -322,7 +349,7 @@ static ssize_t svc_tcp_read_msg(struct svc_rqst *rqstp, size_t buflen,
|
|||||||
iov_iter_advance(&msg.msg_iter, seek);
|
iov_iter_advance(&msg.msg_iter, seek);
|
||||||
buflen -= seek;
|
buflen -= seek;
|
||||||
}
|
}
|
||||||
len = svc_tcp_sock_recv_cmsg(svsk, &msg);
|
len = svc_tcp_sock_recvmsg(svsk, &msg);
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
svc_flush_bvec(bvec, len, seek);
|
svc_flush_bvec(bvec, len, seek);
|
||||||
|
|
||||||
@ -1018,7 +1045,7 @@ static ssize_t svc_tcp_read_marker(struct svc_sock *svsk,
|
|||||||
iov.iov_base = ((char *)&svsk->sk_marker) + svsk->sk_tcplen;
|
iov.iov_base = ((char *)&svsk->sk_marker) + svsk->sk_tcplen;
|
||||||
iov.iov_len = want;
|
iov.iov_len = want;
|
||||||
iov_iter_kvec(&msg.msg_iter, READ, &iov, 1, want);
|
iov_iter_kvec(&msg.msg_iter, READ, &iov, 1, want);
|
||||||
len = svc_tcp_sock_recv_cmsg(svsk, &msg);
|
len = svc_tcp_sock_recvmsg(svsk, &msg);
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
return len;
|
return len;
|
||||||
svsk->sk_tcplen += len;
|
svsk->sk_tcplen += len;
|
||||||
|
|||||||
@ -359,7 +359,7 @@ xs_alloc_sparse_pages(struct xdr_buf *buf, size_t want, gfp_t gfp)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
xs_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
xs_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
||||||
struct cmsghdr *cmsg, int ret)
|
unsigned int *msg_flags, struct cmsghdr *cmsg, int ret)
|
||||||
{
|
{
|
||||||
u8 content_type = tls_get_record_type(sock->sk, cmsg);
|
u8 content_type = tls_get_record_type(sock->sk, cmsg);
|
||||||
u8 level, description;
|
u8 level, description;
|
||||||
@ -372,7 +372,7 @@ xs_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
|||||||
* record, even though there might be more frames
|
* record, even though there might be more frames
|
||||||
* waiting to be decrypted.
|
* waiting to be decrypted.
|
||||||
*/
|
*/
|
||||||
msg->msg_flags &= ~MSG_EOR;
|
*msg_flags &= ~MSG_EOR;
|
||||||
break;
|
break;
|
||||||
case TLS_RECORD_TYPE_ALERT:
|
case TLS_RECORD_TYPE_ALERT:
|
||||||
tls_alert_recv(sock->sk, msg, &level, &description);
|
tls_alert_recv(sock->sk, msg, &level, &description);
|
||||||
@ -387,19 +387,33 @@ xs_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xs_sock_recv_cmsg(struct socket *sock, struct msghdr *msg, int flags)
|
xs_sock_recv_cmsg(struct socket *sock, unsigned int *msg_flags, int flags)
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
struct cmsghdr cmsg;
|
struct cmsghdr cmsg;
|
||||||
u8 buf[CMSG_SPACE(sizeof(u8))];
|
u8 buf[CMSG_SPACE(sizeof(u8))];
|
||||||
} u;
|
} u;
|
||||||
|
u8 alert[2];
|
||||||
|
struct kvec alert_kvec = {
|
||||||
|
.iov_base = alert,
|
||||||
|
.iov_len = sizeof(alert),
|
||||||
|
};
|
||||||
|
struct msghdr msg = {
|
||||||
|
.msg_flags = *msg_flags,
|
||||||
|
.msg_control = &u,
|
||||||
|
.msg_controllen = sizeof(u),
|
||||||
|
};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
msg->msg_control = &u;
|
iov_iter_kvec(&msg.msg_iter, ITER_DEST, &alert_kvec, 1,
|
||||||
msg->msg_controllen = sizeof(u);
|
alert_kvec.iov_len);
|
||||||
ret = sock_recvmsg(sock, msg, flags);
|
ret = sock_recvmsg(sock, &msg, flags);
|
||||||
if (msg->msg_controllen != sizeof(u))
|
if (ret > 0) {
|
||||||
ret = xs_sock_process_cmsg(sock, msg, &u.cmsg, ret);
|
if (tls_get_record_type(sock->sk, &u.cmsg) == TLS_RECORD_TYPE_ALERT)
|
||||||
|
iov_iter_revert(&msg.msg_iter, ret);
|
||||||
|
ret = xs_sock_process_cmsg(sock, &msg, msg_flags, &u.cmsg,
|
||||||
|
-EAGAIN);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,7 +423,13 @@ xs_sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags, size_t seek)
|
|||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
if (seek != 0)
|
if (seek != 0)
|
||||||
iov_iter_advance(&msg->msg_iter, seek);
|
iov_iter_advance(&msg->msg_iter, seek);
|
||||||
ret = xs_sock_recv_cmsg(sock, msg, flags);
|
ret = sock_recvmsg(sock, msg, flags);
|
||||||
|
/* Handle TLS inband control message lazily */
|
||||||
|
if (msg->msg_flags & MSG_CTRUNC) {
|
||||||
|
msg->msg_flags &= ~(MSG_CTRUNC | MSG_EOR);
|
||||||
|
if (ret == 0 || ret == -EIO)
|
||||||
|
ret = xs_sock_recv_cmsg(sock, &msg->msg_flags, flags);
|
||||||
|
}
|
||||||
return ret > 0 ? ret + seek : ret;
|
return ret > 0 ? ret + seek : ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,7 +455,7 @@ xs_read_discard(struct socket *sock, struct msghdr *msg, int flags,
|
|||||||
size_t count)
|
size_t count)
|
||||||
{
|
{
|
||||||
iov_iter_discard(&msg->msg_iter, READ, count);
|
iov_iter_discard(&msg->msg_iter, READ, count);
|
||||||
return xs_sock_recv_cmsg(sock, msg, flags);
|
return xs_sock_recvmsg(sock, msg, flags, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
|
#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
|
||||||
|
|||||||
@ -903,13 +903,16 @@ void __cfg80211_connect_result(struct net_device *dev,
|
|||||||
if (!wdev->u.client.ssid_len) {
|
if (!wdev->u.client.ssid_len) {
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
for_each_valid_link(cr, link) {
|
for_each_valid_link(cr, link) {
|
||||||
|
u32 ssid_len;
|
||||||
|
|
||||||
ssid = ieee80211_bss_get_elem(cr->links[link].bss,
|
ssid = ieee80211_bss_get_elem(cr->links[link].bss,
|
||||||
WLAN_EID_SSID);
|
WLAN_EID_SSID);
|
||||||
|
|
||||||
if (!ssid || !ssid->datalen)
|
if (!ssid || !ssid->datalen)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
memcpy(wdev->u.client.ssid, ssid->data, ssid->datalen);
|
ssid_len = min(ssid->datalen, IEEE80211_MAX_SSID_LEN);
|
||||||
|
memcpy(wdev->u.client.ssid, ssid->data, ssid_len);
|
||||||
wdev->u.client.ssid_len = ssid->datalen;
|
wdev->u.client.ssid_len = ssid->datalen;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,25 @@
|
|||||||
|
* Tue Oct 14 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.55.1.el9_6]
|
||||||
|
- scsi: lpfc: Fix buffer free/clear order in deferred receive path (CKI Backport Bot) [RHEL-119115] {CVE-2025-39841}
|
||||||
|
Resolves: RHEL-119115
|
||||||
|
|
||||||
|
* Sat Oct 11 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.54.1.el9_6]
|
||||||
|
- firmware: arm_scpi: Ensure scpi_info is not assigned if the probe fails (Charles Mirabile) [RHEL-113836] {CVE-2022-50087}
|
||||||
|
- SUNRPC: call xs_sock_process_cmsg for all cmsg (Olga Kornievskaia) [RHEL-110811]
|
||||||
|
- sunrpc: fix client side handling of tls alerts (Olga Kornievskaia) [RHEL-110811] {CVE-2025-38571}
|
||||||
|
- efivarfs: Fix slab-out-of-bounds in efivarfs_d_compare (CKI Backport Bot) [RHEL-118256] {CVE-2025-39817}
|
||||||
|
- sunrpc: fix handling of server side tls alerts (Steve Dickson) [RHEL-111070] {CVE-2025-38566}
|
||||||
|
- platform/x86/intel: power-domains: Use topology_logical_package_id() for package ID (Jay Shin) [RHEL-116679]
|
||||||
|
Resolves: RHEL-110811, RHEL-111070, RHEL-113836, RHEL-116679, RHEL-118256
|
||||||
|
|
||||||
|
* Thu Oct 09 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.53.1.el9_6]
|
||||||
|
- wifi: cfg80211: sme: cap SSID length in __cfg80211_connect_result() (CKI Backport Bot) [RHEL-117578] {CVE-2025-39849}
|
||||||
|
- ibmvnic: Use ndo_get_stats64 to fix inaccurate SAR reporting (Mamatha Inamdar) [RHEL-114436]
|
||||||
|
- ibmvnic: Fix hardcoded NUM_RX_STATS/NUM_TX_STATS with dynamic sizeof (Mamatha Inamdar) [RHEL-114436]
|
||||||
|
- ibmvnic: Add stat for tx direct vs tx batched (Mamatha Inamdar) [RHEL-114436]
|
||||||
|
- nfsd: don't ignore the return code of svc_proc_register() (Olga Kornievskaia) [RHEL-93610] {CVE-2025-22026}
|
||||||
|
- irdma: free iwdev->rf after removing MSI-X (CKI Backport Bot) [RHEL-111485]
|
||||||
|
Resolves: RHEL-111485, RHEL-114436, RHEL-117578, RHEL-93610
|
||||||
|
|
||||||
* Sat Oct 04 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.52.1.el9_6]
|
* Sat Oct 04 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.52.1.el9_6]
|
||||||
- crypto: seqiv - Handle EBUSY correctly (CKI Backport Bot) [RHEL-117232] {CVE-2023-53373}
|
- crypto: seqiv - Handle EBUSY correctly (CKI Backport Bot) [RHEL-117232] {CVE-2023-53373}
|
||||||
- ibmvnic: Increase max subcrq indirect entries with fallback (Mamatha Inamdar) [RHEL-116186]
|
- ibmvnic: Increase max subcrq indirect entries with fallback (Mamatha Inamdar) [RHEL-116186]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user