Merge f4345f05c0 ("Merge tag 'block-6.9-20240510' of git://git.kernel.dk/linux") into android-mainline
Steps on the way to v6.9 Signed-off-by: Lee Jones <joneslee@google.com> Change-Id: Iad47a9d210784d4e11f092a143e3a4b6c57753b1
This commit is contained in:
@@ -188,7 +188,10 @@ static int blk_validate_limits(struct queue_limits *lim)
|
||||
* bvec and lower layer bio splitting is supposed to handle the two
|
||||
* correctly.
|
||||
*/
|
||||
if (!lim->virt_boundary_mask) {
|
||||
if (lim->virt_boundary_mask) {
|
||||
if (!lim->max_segment_size)
|
||||
lim->max_segment_size = UINT_MAX;
|
||||
} else {
|
||||
/*
|
||||
* The maximum segment size has an odd historic 64k default that
|
||||
* drivers probably should override. Just like the I/O size we
|
||||
|
||||
@@ -162,6 +162,11 @@ enum nvme_quirks {
|
||||
* Disables simple suspend/resume path.
|
||||
*/
|
||||
NVME_QUIRK_FORCE_NO_SIMPLE_SUSPEND = (1 << 20),
|
||||
|
||||
/*
|
||||
* MSI (but not MSI-X) interrupts are broken and never fire.
|
||||
*/
|
||||
NVME_QUIRK_BROKEN_MSI = (1 << 21),
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
+11
-3
@@ -2224,6 +2224,7 @@ static int nvme_setup_irqs(struct nvme_dev *dev, unsigned int nr_io_queues)
|
||||
.priv = dev,
|
||||
};
|
||||
unsigned int irq_queues, poll_queues;
|
||||
unsigned int flags = PCI_IRQ_ALL_TYPES | PCI_IRQ_AFFINITY;
|
||||
|
||||
/*
|
||||
* Poll queues don't need interrupts, but we need at least one I/O queue
|
||||
@@ -2247,8 +2248,10 @@ static int nvme_setup_irqs(struct nvme_dev *dev, unsigned int nr_io_queues)
|
||||
irq_queues = 1;
|
||||
if (!(dev->ctrl.quirks & NVME_QUIRK_SINGLE_VECTOR))
|
||||
irq_queues += (nr_io_queues - poll_queues);
|
||||
return pci_alloc_irq_vectors_affinity(pdev, 1, irq_queues,
|
||||
PCI_IRQ_ALL_TYPES | PCI_IRQ_AFFINITY, &affd);
|
||||
if (dev->ctrl.quirks & NVME_QUIRK_BROKEN_MSI)
|
||||
flags &= ~PCI_IRQ_MSI;
|
||||
return pci_alloc_irq_vectors_affinity(pdev, 1, irq_queues, flags,
|
||||
&affd);
|
||||
}
|
||||
|
||||
static unsigned int nvme_max_io_queues(struct nvme_dev *dev)
|
||||
@@ -2477,6 +2480,7 @@ static int nvme_pci_enable(struct nvme_dev *dev)
|
||||
{
|
||||
int result = -ENOMEM;
|
||||
struct pci_dev *pdev = to_pci_dev(dev->dev);
|
||||
unsigned int flags = PCI_IRQ_ALL_TYPES;
|
||||
|
||||
if (pci_enable_device_mem(pdev))
|
||||
return result;
|
||||
@@ -2493,7 +2497,9 @@ static int nvme_pci_enable(struct nvme_dev *dev)
|
||||
* interrupts. Pre-enable a single MSIX or MSI vec for setup. We'll
|
||||
* adjust this later.
|
||||
*/
|
||||
result = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
|
||||
if (dev->ctrl.quirks & NVME_QUIRK_BROKEN_MSI)
|
||||
flags &= ~PCI_IRQ_MSI;
|
||||
result = pci_alloc_irq_vectors(pdev, 1, 1, flags);
|
||||
if (result < 0)
|
||||
goto disable;
|
||||
|
||||
@@ -3390,6 +3396,8 @@ static const struct pci_device_id nvme_id_table[] = {
|
||||
.driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY |
|
||||
NVME_QUIRK_DISABLE_WRITE_ZEROES|
|
||||
NVME_QUIRK_IGNORE_DEV_SUBNQN, },
|
||||
{ PCI_DEVICE(0x15b7, 0x5008), /* Sandisk SN530 */
|
||||
.driver_data = NVME_QUIRK_BROKEN_MSI },
|
||||
{ PCI_DEVICE(0x1987, 0x5012), /* Phison E12 */
|
||||
.driver_data = NVME_QUIRK_BOGUS_NID, },
|
||||
{ PCI_DEVICE(0x1987, 0x5016), /* Phison E16 */
|
||||
|
||||
@@ -480,7 +480,7 @@ out_free_response:
|
||||
nvme_auth_free_key(transformed_key);
|
||||
out_free_tfm:
|
||||
crypto_free_shash(shash_tfm);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int nvmet_auth_ctrl_exponential(struct nvmet_req *req,
|
||||
|
||||
@@ -757,10 +757,9 @@ static struct configfs_attribute *nvmet_ns_attrs[] = {
|
||||
bool nvmet_subsys_nsid_exists(struct nvmet_subsys *subsys, u32 nsid)
|
||||
{
|
||||
struct config_item *ns_item;
|
||||
char name[4] = {};
|
||||
char name[12];
|
||||
|
||||
if (sprintf(name, "%u", nsid) <= 0)
|
||||
return false;
|
||||
snprintf(name, sizeof(name), "%u", nsid);
|
||||
mutex_lock(&subsys->namespaces_group.cg_subsys->su_mutex);
|
||||
ns_item = config_group_find_item(&subsys->namespaces_group, name);
|
||||
mutex_unlock(&subsys->namespaces_group.cg_subsys->su_mutex);
|
||||
|
||||
@@ -1686,7 +1686,8 @@ static int __init nvmet_init(void)
|
||||
if (!buffered_io_wq)
|
||||
goto out_free_zbd_work_queue;
|
||||
|
||||
nvmet_wq = alloc_workqueue("nvmet-wq", WQ_MEM_RECLAIM, 0);
|
||||
nvmet_wq = alloc_workqueue("nvmet-wq",
|
||||
WQ_MEM_RECLAIM | WQ_UNBOUND, 0);
|
||||
if (!nvmet_wq)
|
||||
goto out_free_buffered_work_queue;
|
||||
|
||||
|
||||
@@ -474,12 +474,8 @@ nvmet_rdma_alloc_rsps(struct nvmet_rdma_queue *queue)
|
||||
return 0;
|
||||
|
||||
out_free:
|
||||
while (--i >= 0) {
|
||||
struct nvmet_rdma_rsp *rsp = &queue->rsps[i];
|
||||
|
||||
list_del(&rsp->free_list);
|
||||
nvmet_rdma_free_rsp(ndev, rsp);
|
||||
}
|
||||
while (--i >= 0)
|
||||
nvmet_rdma_free_rsp(ndev, &queue->rsps[i]);
|
||||
kfree(queue->rsps);
|
||||
out:
|
||||
return ret;
|
||||
@@ -490,12 +486,8 @@ static void nvmet_rdma_free_rsps(struct nvmet_rdma_queue *queue)
|
||||
struct nvmet_rdma_device *ndev = queue->dev;
|
||||
int i, nr_rsps = queue->recv_queue_size * 2;
|
||||
|
||||
for (i = 0; i < nr_rsps; i++) {
|
||||
struct nvmet_rdma_rsp *rsp = &queue->rsps[i];
|
||||
|
||||
list_del(&rsp->free_list);
|
||||
nvmet_rdma_free_rsp(ndev, rsp);
|
||||
}
|
||||
for (i = 0; i < nr_rsps; i++)
|
||||
nvmet_rdma_free_rsp(ndev, &queue->rsps[i]);
|
||||
kfree(queue->rsps);
|
||||
}
|
||||
|
||||
|
||||
+16
-11
@@ -1911,19 +1911,24 @@ static struct regulator *create_regulator(struct regulator_dev *rdev,
|
||||
}
|
||||
}
|
||||
|
||||
if (err != -EEXIST)
|
||||
if (err != -EEXIST) {
|
||||
regulator->debugfs = debugfs_create_dir(supply_name, rdev->debugfs);
|
||||
if (IS_ERR(regulator->debugfs))
|
||||
rdev_dbg(rdev, "Failed to create debugfs directory\n");
|
||||
if (IS_ERR(regulator->debugfs)) {
|
||||
rdev_dbg(rdev, "Failed to create debugfs directory\n");
|
||||
regulator->debugfs = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
debugfs_create_u32("uA_load", 0444, regulator->debugfs,
|
||||
®ulator->uA_load);
|
||||
debugfs_create_u32("min_uV", 0444, regulator->debugfs,
|
||||
®ulator->voltage[PM_SUSPEND_ON].min_uV);
|
||||
debugfs_create_u32("max_uV", 0444, regulator->debugfs,
|
||||
®ulator->voltage[PM_SUSPEND_ON].max_uV);
|
||||
debugfs_create_file("constraint_flags", 0444, regulator->debugfs,
|
||||
regulator, &constraint_flags_fops);
|
||||
if (regulator->debugfs) {
|
||||
debugfs_create_u32("uA_load", 0444, regulator->debugfs,
|
||||
®ulator->uA_load);
|
||||
debugfs_create_u32("min_uV", 0444, regulator->debugfs,
|
||||
®ulator->voltage[PM_SUSPEND_ON].min_uV);
|
||||
debugfs_create_u32("max_uV", 0444, regulator->debugfs,
|
||||
®ulator->voltage[PM_SUSPEND_ON].max_uV);
|
||||
debugfs_create_file("constraint_flags", 0444, regulator->debugfs,
|
||||
regulator, &constraint_flags_fops);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check now if the regulator is an always on regulator - if
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
/* Value */
|
||||
#define RTQ2208_RAMP_VALUE_MIN_uV 500
|
||||
#define RTQ2208_RAMP_VALUE_MAX_uV 64000
|
||||
#define RTQ2208_RAMP_VALUE_MAX_uV 16000
|
||||
|
||||
#define RTQ2208_BUCK_MASK(uv_irq, ov_irq) (1 << ((uv_irq) % 8) | 1 << ((ov_irq) % 8))
|
||||
|
||||
@@ -142,12 +142,11 @@ static int rtq2208_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
|
||||
* Because the relation of seleltion and value is like that
|
||||
*
|
||||
* seletion: value
|
||||
* 000: 64mv
|
||||
* 001: 32mv
|
||||
* 010: 16mv
|
||||
* ...
|
||||
* 111: 0.5mv
|
||||
*
|
||||
* For example, if I would like to select 64mv, the fls(ramp_delay) - 1 will be 0b111,
|
||||
* For example, if I would like to select 16mv, the fls(ramp_delay) - 1 will be 0b010,
|
||||
* and I need to use 0b111 - sel to do the shifting
|
||||
*/
|
||||
|
||||
|
||||
@@ -283,6 +283,7 @@ static int mchp_coreqspi_setup_clock(struct mchp_coreqspi *qspi, struct spi_devi
|
||||
}
|
||||
|
||||
control = readl_relaxed(qspi->regs + REG_CONTROL);
|
||||
control &= ~CONTROL_CLKRATE_MASK;
|
||||
control |= baud_rate_val << CONTROL_CLKRATE_SHIFT;
|
||||
writel_relaxed(control, qspi->regs + REG_CONTROL);
|
||||
control = readl_relaxed(qspi->regs + REG_CONTROL);
|
||||
|
||||
+2
-12
@@ -1016,10 +1016,8 @@ end_irq:
|
||||
static irqreturn_t stm32fx_spi_irq_thread(int irq, void *dev_id)
|
||||
{
|
||||
struct spi_controller *ctrl = dev_id;
|
||||
struct stm32_spi *spi = spi_controller_get_devdata(ctrl);
|
||||
|
||||
spi_finalize_current_transfer(ctrl);
|
||||
stm32fx_spi_disable(spi);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
@@ -1187,6 +1185,8 @@ static int stm32_spi_prepare_msg(struct spi_controller *ctrl,
|
||||
~clrb) | setb,
|
||||
spi->base + spi->cfg->regs->cpol.reg);
|
||||
|
||||
stm32_spi_enable(spi);
|
||||
|
||||
spin_unlock_irqrestore(&spi->lock, flags);
|
||||
|
||||
return 0;
|
||||
@@ -1204,7 +1204,6 @@ static void stm32fx_spi_dma_tx_cb(void *data)
|
||||
|
||||
if (spi->cur_comm == SPI_SIMPLEX_TX || spi->cur_comm == SPI_3WIRE_TX) {
|
||||
spi_finalize_current_transfer(spi->ctrl);
|
||||
stm32fx_spi_disable(spi);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1219,7 +1218,6 @@ static void stm32_spi_dma_rx_cb(void *data)
|
||||
struct stm32_spi *spi = data;
|
||||
|
||||
spi_finalize_current_transfer(spi->ctrl);
|
||||
spi->cfg->disable(spi);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1307,8 +1305,6 @@ static int stm32fx_spi_transfer_one_irq(struct stm32_spi *spi)
|
||||
|
||||
stm32_spi_set_bits(spi, STM32FX_SPI_CR2, cr2);
|
||||
|
||||
stm32_spi_enable(spi);
|
||||
|
||||
/* starting data transfer when buffer is loaded */
|
||||
if (spi->tx_buf)
|
||||
spi->cfg->write_tx(spi);
|
||||
@@ -1345,8 +1341,6 @@ static int stm32h7_spi_transfer_one_irq(struct stm32_spi *spi)
|
||||
|
||||
spin_lock_irqsave(&spi->lock, flags);
|
||||
|
||||
stm32_spi_enable(spi);
|
||||
|
||||
/* Be sure to have data in fifo before starting data transfer */
|
||||
if (spi->tx_buf)
|
||||
stm32h7_spi_write_txfifo(spi);
|
||||
@@ -1378,8 +1372,6 @@ static void stm32fx_spi_transfer_one_dma_start(struct stm32_spi *spi)
|
||||
*/
|
||||
stm32_spi_set_bits(spi, STM32FX_SPI_CR2, STM32FX_SPI_CR2_ERRIE);
|
||||
}
|
||||
|
||||
stm32_spi_enable(spi);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1413,8 +1405,6 @@ static void stm32h7_spi_transfer_one_dma_start(struct stm32_spi *spi)
|
||||
|
||||
stm32_spi_set_bits(spi, STM32H7_SPI_IER, ier);
|
||||
|
||||
stm32_spi_enable(spi);
|
||||
|
||||
if (STM32_SPI_HOST_MODE(spi))
|
||||
stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_CSTART);
|
||||
}
|
||||
|
||||
@@ -1596,7 +1596,7 @@ static int tmigr_setup_groups(unsigned int cpu, unsigned int node)
|
||||
|
||||
} while (i < tmigr_hierarchy_levels);
|
||||
|
||||
do {
|
||||
while (i > 0) {
|
||||
group = stack[--i];
|
||||
|
||||
if (err < 0) {
|
||||
@@ -1645,7 +1645,7 @@ static int tmigr_setup_groups(unsigned int cpu, unsigned int node)
|
||||
tmigr_connect_child_parent(child, group);
|
||||
}
|
||||
}
|
||||
} while (i > 0);
|
||||
}
|
||||
|
||||
kfree(stack);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user