Merge 4.19.202 into android-4.19-stable
Changes in 4.19.202
btrfs: mark compressed range uptodate only if all bio succeed
regulator: rt5033: Fix n_voltages settings for BUCK and LDO
ASoC: tlv320aic31xx: fix reversed bclk/wclk master bits
r8152: Fix potential PM refcount imbalance
qed: fix possible unpaired spin_{un}lock_bh in _qed_mcp_cmd_and_union()
net: Fix zero-copy head len calculation.
bdi: move bdi_dev_name out of line
bdi: use bdi_dev_name() to get device name
bdi: add a ->dev_name field to struct backing_dev_info
Revert "Bluetooth: Shutdown controller after workqueues are flushed or cancelled"
drm/i915: Ensure intel_engine_init_execlist() builds with Clang
firmware: arm_scmi: Ensure drivers provide a probe function
Revert "watchdog: iTCO_wdt: Account for rebooting on second timeout"
padata: validate cpumask without removed CPU during offline
padata: add separate cpuhp node for CPUHP_PADATA_DEAD
spi: mediatek: Fix fifo transfer
Linux 4.19.202
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I7778013d057c7b9d1c0749b9d80c00b71f23f116
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 19
|
PATCHLEVEL = 19
|
||||||
SUBLEVEL = 201
|
SUBLEVEL = 202
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = "People's Front"
|
NAME = "People's Front"
|
||||||
|
|
||||||
|
|||||||
@@ -132,6 +132,7 @@
|
|||||||
#include <linux/ioprio.h>
|
#include <linux/ioprio.h>
|
||||||
#include <linux/sbitmap.h>
|
#include <linux/sbitmap.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/backing-dev.h>
|
||||||
|
|
||||||
#include "blk.h"
|
#include "blk.h"
|
||||||
#include "blk-mq.h"
|
#include "blk-mq.h"
|
||||||
@@ -4212,8 +4213,9 @@ bfq_set_next_ioprio_data(struct bfq_queue *bfqq, struct bfq_io_cq *bic)
|
|||||||
ioprio_class = IOPRIO_PRIO_CLASS(bic->ioprio);
|
ioprio_class = IOPRIO_PRIO_CLASS(bic->ioprio);
|
||||||
switch (ioprio_class) {
|
switch (ioprio_class) {
|
||||||
default:
|
default:
|
||||||
dev_err(bfqq->bfqd->queue->backing_dev_info->dev,
|
pr_err("bdi %s: bfq: bad prio class %d\n",
|
||||||
"bfq: bad prio class %d\n", ioprio_class);
|
bdi_dev_name(bfqq->bfqd->queue->backing_dev_info),
|
||||||
|
ioprio_class);
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case IOPRIO_CLASS_NONE:
|
case IOPRIO_CLASS_NONE:
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -474,7 +474,7 @@ const char *blkg_dev_name(struct blkcg_gq *blkg)
|
|||||||
{
|
{
|
||||||
/* some drivers (floppy) instantiate a queue w/o disk registered */
|
/* some drivers (floppy) instantiate a queue w/o disk registered */
|
||||||
if (blkg->q->backing_dev_info->dev)
|
if (blkg->q->backing_dev_info->dev)
|
||||||
return dev_name(blkg->q->backing_dev_info->dev);
|
return bdi_dev_name(blkg->q->backing_dev_info);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(blkg_dev_name);
|
EXPORT_SYMBOL_GPL(blkg_dev_name);
|
||||||
|
|||||||
@@ -100,6 +100,9 @@ int scmi_driver_register(struct scmi_driver *driver, struct module *owner,
|
|||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
|
if (!driver->probe)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
driver->driver.bus = &scmi_bus_type;
|
driver->driver.bus = &scmi_bus_type;
|
||||||
driver->driver.name = driver->name;
|
driver->driver.name = driver->name;
|
||||||
driver->driver.owner = owner;
|
driver->driver.owner = owner;
|
||||||
|
|||||||
@@ -463,7 +463,7 @@ static void intel_engine_init_execlist(struct intel_engine_cs *engine)
|
|||||||
struct intel_engine_execlists * const execlists = &engine->execlists;
|
struct intel_engine_execlists * const execlists = &engine->execlists;
|
||||||
|
|
||||||
execlists->port_mask = 1;
|
execlists->port_mask = 1;
|
||||||
BUILD_BUG_ON_NOT_POWER_OF_2(execlists_num_ports(execlists));
|
GEM_BUG_ON(!is_power_of_2(execlists_num_ports(execlists)));
|
||||||
GEM_BUG_ON(execlists_num_ports(execlists) > EXECLIST_MAX_PORTS);
|
GEM_BUG_ON(execlists_num_ports(execlists) > EXECLIST_MAX_PORTS);
|
||||||
|
|
||||||
execlists->queue_priority = INT_MIN;
|
execlists->queue_priority = INT_MIN;
|
||||||
|
|||||||
@@ -498,14 +498,18 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
|
|||||||
|
|
||||||
spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
|
spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
|
|
||||||
if (!qed_mcp_has_pending_cmd(p_hwfn))
|
if (!qed_mcp_has_pending_cmd(p_hwfn)) {
|
||||||
|
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
rc = qed_mcp_update_pending_cmd(p_hwfn, p_ptt);
|
rc = qed_mcp_update_pending_cmd(p_hwfn, p_ptt);
|
||||||
if (!rc)
|
if (!rc) {
|
||||||
|
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
break;
|
break;
|
||||||
else if (rc != -EAGAIN)
|
} else if (rc != -EAGAIN) {
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
|
|
||||||
@@ -522,6 +526,8 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
|
|||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
|
|
||||||
/* Send the mailbox command */
|
/* Send the mailbox command */
|
||||||
qed_mcp_reread_offsets(p_hwfn, p_ptt);
|
qed_mcp_reread_offsets(p_hwfn, p_ptt);
|
||||||
seq_num = ++p_hwfn->mcp_info->drv_mb_seq;
|
seq_num = ++p_hwfn->mcp_info->drv_mb_seq;
|
||||||
@@ -548,14 +554,18 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
|
|||||||
|
|
||||||
spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
|
spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
|
|
||||||
if (p_cmd_elem->b_is_completed)
|
if (p_cmd_elem->b_is_completed) {
|
||||||
|
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
rc = qed_mcp_update_pending_cmd(p_hwfn, p_ptt);
|
rc = qed_mcp_update_pending_cmd(p_hwfn, p_ptt);
|
||||||
if (!rc)
|
if (!rc) {
|
||||||
|
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
break;
|
break;
|
||||||
else if (rc != -EAGAIN)
|
} else if (rc != -EAGAIN) {
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
} while (++cnt < max_retries);
|
} while (++cnt < max_retries);
|
||||||
@@ -576,6 +586,7 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
|
|||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
qed_mcp_cmd_del_elem(p_hwfn, p_cmd_elem);
|
qed_mcp_cmd_del_elem(p_hwfn, p_cmd_elem);
|
||||||
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||||
|
|
||||||
|
|||||||
@@ -3960,10 +3960,11 @@ static int rtl8152_close(struct net_device *netdev)
|
|||||||
tp->rtl_ops.down(tp);
|
tp->rtl_ops.down(tp);
|
||||||
|
|
||||||
mutex_unlock(&tp->control);
|
mutex_unlock(&tp->control);
|
||||||
|
|
||||||
usb_autopm_put_interface(tp->intf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
usb_autopm_put_interface(tp->intf);
|
||||||
|
|
||||||
free_all_mem(tp);
|
free_all_mem(tp);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
@@ -391,24 +391,15 @@ static int mtk_spi_fifo_transfer(struct spi_master *master,
|
|||||||
mtk_spi_prepare_transfer(master, xfer);
|
mtk_spi_prepare_transfer(master, xfer);
|
||||||
mtk_spi_setup_packet(master);
|
mtk_spi_setup_packet(master);
|
||||||
|
|
||||||
cnt = xfer->len / 4;
|
if (xfer->tx_buf) {
|
||||||
if (xfer->tx_buf)
|
cnt = xfer->len / 4;
|
||||||
iowrite32_rep(mdata->base + SPI_TX_DATA_REG, xfer->tx_buf, cnt);
|
iowrite32_rep(mdata->base + SPI_TX_DATA_REG, xfer->tx_buf, cnt);
|
||||||
|
remainder = xfer->len % 4;
|
||||||
if (xfer->rx_buf)
|
if (remainder > 0) {
|
||||||
ioread32_rep(mdata->base + SPI_RX_DATA_REG, xfer->rx_buf, cnt);
|
reg_val = 0;
|
||||||
|
|
||||||
remainder = xfer->len % 4;
|
|
||||||
if (remainder > 0) {
|
|
||||||
reg_val = 0;
|
|
||||||
if (xfer->tx_buf) {
|
|
||||||
memcpy(®_val, xfer->tx_buf + (cnt * 4), remainder);
|
memcpy(®_val, xfer->tx_buf + (cnt * 4), remainder);
|
||||||
writel(reg_val, mdata->base + SPI_TX_DATA_REG);
|
writel(reg_val, mdata->base + SPI_TX_DATA_REG);
|
||||||
}
|
}
|
||||||
if (xfer->rx_buf) {
|
|
||||||
reg_val = readl(mdata->base + SPI_RX_DATA_REG);
|
|
||||||
memcpy(xfer->rx_buf + (cnt * 4), ®_val, remainder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mtk_spi_enable_transfer(master);
|
mtk_spi_enable_transfer(master);
|
||||||
|
|||||||
@@ -75,8 +75,6 @@
|
|||||||
#define TCOBASE(p) ((p)->tco_res->start)
|
#define TCOBASE(p) ((p)->tco_res->start)
|
||||||
/* SMI Control and Enable Register */
|
/* SMI Control and Enable Register */
|
||||||
#define SMI_EN(p) ((p)->smi_res->start)
|
#define SMI_EN(p) ((p)->smi_res->start)
|
||||||
#define TCO_EN (1 << 13)
|
|
||||||
#define GBL_SMI_EN (1 << 0)
|
|
||||||
|
|
||||||
#define TCO_RLD(p) (TCOBASE(p) + 0x00) /* TCO Timer Reload/Curr. Value */
|
#define TCO_RLD(p) (TCOBASE(p) + 0x00) /* TCO Timer Reload/Curr. Value */
|
||||||
#define TCOv1_TMR(p) (TCOBASE(p) + 0x01) /* TCOv1 Timer Initial Value*/
|
#define TCOv1_TMR(p) (TCOBASE(p) + 0x01) /* TCOv1 Timer Initial Value*/
|
||||||
@@ -332,12 +330,8 @@ static int iTCO_wdt_set_timeout(struct watchdog_device *wd_dev, unsigned int t)
|
|||||||
|
|
||||||
tmrval = seconds_to_ticks(p, t);
|
tmrval = seconds_to_ticks(p, t);
|
||||||
|
|
||||||
/*
|
/* For TCO v1 the timer counts down twice before rebooting */
|
||||||
* If TCO SMIs are off, the timer counts down twice before rebooting.
|
if (p->iTCO_version == 1)
|
||||||
* Otherwise, the BIOS generally reboots when the SMI triggers.
|
|
||||||
*/
|
|
||||||
if (p->smi_res &&
|
|
||||||
(SMI_EN(p) & (TCO_EN | GBL_SMI_EN)) != (TCO_EN | GBL_SMI_EN))
|
|
||||||
tmrval /= 2;
|
tmrval /= 2;
|
||||||
|
|
||||||
/* from the specs: */
|
/* from the specs: */
|
||||||
@@ -499,7 +493,7 @@ static int iTCO_wdt_probe(struct platform_device *pdev)
|
|||||||
* Disables TCO logic generating an SMI#
|
* Disables TCO logic generating an SMI#
|
||||||
*/
|
*/
|
||||||
val32 = inl(SMI_EN(p));
|
val32 = inl(SMI_EN(p));
|
||||||
val32 &= ~TCO_EN; /* Turn off SMI clearing watchdog */
|
val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */
|
||||||
outl(val32, SMI_EN(p));
|
outl(val32, SMI_EN(p));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -270,8 +270,7 @@ static void end_compressed_bio_write(struct bio *bio)
|
|||||||
cb->start,
|
cb->start,
|
||||||
cb->start + cb->len - 1,
|
cb->start + cb->len - 1,
|
||||||
NULL,
|
NULL,
|
||||||
bio->bi_status ?
|
!cb->errors);
|
||||||
BLK_STS_OK : BLK_STS_NOTSUPP);
|
|
||||||
cb->compressed_pages[0]->mapping = NULL;
|
cb->compressed_pages[0]->mapping = NULL;
|
||||||
|
|
||||||
end_compressed_writeback(inode, cb);
|
end_compressed_writeback(inode, cb);
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ int ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
snprintf(name, sizeof(name), "../../bdi/%s",
|
snprintf(name, sizeof(name), "../../bdi/%s",
|
||||||
dev_name(fsc->sb->s_bdi->dev));
|
bdi_dev_name(fsc->sb->s_bdi));
|
||||||
fsc->debugfs_bdi =
|
fsc->debugfs_bdi =
|
||||||
debugfs_create_symlink("bdi",
|
debugfs_create_symlink("bdi",
|
||||||
fsc->client->debugfs_dir,
|
fsc->client->debugfs_dir,
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ struct backing_dev_info {
|
|||||||
wait_queue_head_t wb_waitq;
|
wait_queue_head_t wb_waitq;
|
||||||
|
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
char dev_name[64];
|
||||||
struct device *owner;
|
struct device *owner;
|
||||||
|
|
||||||
struct timer_list laptop_mode_wb_timer;
|
struct timer_list laptop_mode_wb_timer;
|
||||||
|
|||||||
@@ -499,13 +499,6 @@ static inline int bdi_rw_congested(struct backing_dev_info *bdi)
|
|||||||
(1 << WB_async_congested));
|
(1 << WB_async_congested));
|
||||||
}
|
}
|
||||||
|
|
||||||
extern const char *bdi_unknown_name;
|
const char *bdi_dev_name(struct backing_dev_info *bdi);
|
||||||
|
|
||||||
static inline const char *bdi_dev_name(struct backing_dev_info *bdi)
|
|
||||||
{
|
|
||||||
if (!bdi || !bdi->dev)
|
|
||||||
return bdi_unknown_name;
|
|
||||||
return dev_name(bdi->dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _LINUX_BACKING_DEV_H */
|
#endif /* _LINUX_BACKING_DEV_H */
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ enum cpuhp_state {
|
|||||||
CPUHP_IOMMU_INTEL_DEAD,
|
CPUHP_IOMMU_INTEL_DEAD,
|
||||||
CPUHP_LUSTRE_CFS_DEAD,
|
CPUHP_LUSTRE_CFS_DEAD,
|
||||||
CPUHP_AP_ARM_CACHE_B15_RAC_DEAD,
|
CPUHP_AP_ARM_CACHE_B15_RAC_DEAD,
|
||||||
|
CPUHP_PADATA_DEAD,
|
||||||
CPUHP_WORKQUEUE_PREP,
|
CPUHP_WORKQUEUE_PREP,
|
||||||
CPUHP_POWER_NUMA_PREPARE,
|
CPUHP_POWER_NUMA_PREPARE,
|
||||||
CPUHP_HRTIMERS_PREPARE,
|
CPUHP_HRTIMERS_PREPARE,
|
||||||
|
|||||||
@@ -203,13 +203,13 @@ enum rt5033_reg {
|
|||||||
#define RT5033_REGULATOR_BUCK_VOLTAGE_MIN 1000000U
|
#define RT5033_REGULATOR_BUCK_VOLTAGE_MIN 1000000U
|
||||||
#define RT5033_REGULATOR_BUCK_VOLTAGE_MAX 3000000U
|
#define RT5033_REGULATOR_BUCK_VOLTAGE_MAX 3000000U
|
||||||
#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP 100000U
|
#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP 100000U
|
||||||
#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP_NUM 32
|
#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP_NUM 21
|
||||||
|
|
||||||
/* RT5033 regulator LDO output voltage uV */
|
/* RT5033 regulator LDO output voltage uV */
|
||||||
#define RT5033_REGULATOR_LDO_VOLTAGE_MIN 1200000U
|
#define RT5033_REGULATOR_LDO_VOLTAGE_MIN 1200000U
|
||||||
#define RT5033_REGULATOR_LDO_VOLTAGE_MAX 3000000U
|
#define RT5033_REGULATOR_LDO_VOLTAGE_MAX 3000000U
|
||||||
#define RT5033_REGULATOR_LDO_VOLTAGE_STEP 100000U
|
#define RT5033_REGULATOR_LDO_VOLTAGE_STEP 100000U
|
||||||
#define RT5033_REGULATOR_LDO_VOLTAGE_STEP_NUM 32
|
#define RT5033_REGULATOR_LDO_VOLTAGE_STEP_NUM 19
|
||||||
|
|
||||||
/* RT5033 regulator SAFE LDO output voltage uV */
|
/* RT5033 regulator SAFE LDO output voltage uV */
|
||||||
#define RT5033_REGULATOR_SAFE_LDO_VOLTAGE 4900000U
|
#define RT5033_REGULATOR_SAFE_LDO_VOLTAGE 4900000U
|
||||||
|
|||||||
@@ -138,7 +138,8 @@ struct parallel_data {
|
|||||||
/**
|
/**
|
||||||
* struct padata_instance - The overall control structure.
|
* struct padata_instance - The overall control structure.
|
||||||
*
|
*
|
||||||
* @cpu_notifier: cpu hotplug notifier.
|
* @cpu_online_node: Linkage for CPU online callback.
|
||||||
|
* @cpu_dead_node: Linkage for CPU offline callback.
|
||||||
* @wq: The workqueue in use.
|
* @wq: The workqueue in use.
|
||||||
* @pd: The internal control structure.
|
* @pd: The internal control structure.
|
||||||
* @cpumask: User supplied cpumasks for parallel and serial works.
|
* @cpumask: User supplied cpumasks for parallel and serial works.
|
||||||
@@ -150,7 +151,8 @@ struct parallel_data {
|
|||||||
* @flags: padata flags.
|
* @flags: padata flags.
|
||||||
*/
|
*/
|
||||||
struct padata_instance {
|
struct padata_instance {
|
||||||
struct hlist_node node;
|
struct hlist_node cpu_online_node;
|
||||||
|
struct hlist_node cpu_dead_node;
|
||||||
struct workqueue_struct *wq;
|
struct workqueue_struct *wq;
|
||||||
struct parallel_data *pd;
|
struct parallel_data *pd;
|
||||||
struct padata_cpumask cpumask;
|
struct padata_cpumask cpumask;
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ TRACE_EVENT(wbt_stat,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
strlcpy(__entry->name, dev_name(bdi->dev),
|
strlcpy(__entry->name, bdi_dev_name(bdi),
|
||||||
ARRAY_SIZE(__entry->name));
|
ARRAY_SIZE(__entry->name));
|
||||||
__entry->rmean = stat[0].mean;
|
__entry->rmean = stat[0].mean;
|
||||||
__entry->rmin = stat[0].min;
|
__entry->rmin = stat[0].min;
|
||||||
@@ -68,7 +68,7 @@ TRACE_EVENT(wbt_lat,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
strlcpy(__entry->name, dev_name(bdi->dev),
|
strlcpy(__entry->name, bdi_dev_name(bdi),
|
||||||
ARRAY_SIZE(__entry->name));
|
ARRAY_SIZE(__entry->name));
|
||||||
__entry->lat = div_u64(lat, 1000);
|
__entry->lat = div_u64(lat, 1000);
|
||||||
),
|
),
|
||||||
@@ -105,7 +105,7 @@ TRACE_EVENT(wbt_step,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
strlcpy(__entry->name, dev_name(bdi->dev),
|
strlcpy(__entry->name, bdi_dev_name(bdi),
|
||||||
ARRAY_SIZE(__entry->name));
|
ARRAY_SIZE(__entry->name));
|
||||||
__entry->msg = msg;
|
__entry->msg = msg;
|
||||||
__entry->step = step;
|
__entry->step = step;
|
||||||
@@ -141,7 +141,7 @@ TRACE_EVENT(wbt_timer,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
strlcpy(__entry->name, dev_name(bdi->dev),
|
strlcpy(__entry->name, bdi_dev_name(bdi),
|
||||||
ARRAY_SIZE(__entry->name));
|
ARRAY_SIZE(__entry->name));
|
||||||
__entry->status = status;
|
__entry->status = status;
|
||||||
__entry->step = step;
|
__entry->step = step;
|
||||||
|
|||||||
@@ -682,7 +682,7 @@ static int __padata_remove_cpu(struct padata_instance *pinst, int cpu)
|
|||||||
{
|
{
|
||||||
struct parallel_data *pd = NULL;
|
struct parallel_data *pd = NULL;
|
||||||
|
|
||||||
if (cpumask_test_cpu(cpu, cpu_online_mask)) {
|
if (!cpumask_test_cpu(cpu, cpu_online_mask)) {
|
||||||
|
|
||||||
if (!padata_validate_cpumask(pinst, pinst->cpumask.pcpu) ||
|
if (!padata_validate_cpumask(pinst, pinst->cpumask.pcpu) ||
|
||||||
!padata_validate_cpumask(pinst, pinst->cpumask.cbcpu))
|
!padata_validate_cpumask(pinst, pinst->cpumask.cbcpu))
|
||||||
@@ -748,7 +748,7 @@ static int padata_cpu_online(unsigned int cpu, struct hlist_node *node)
|
|||||||
struct padata_instance *pinst;
|
struct padata_instance *pinst;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pinst = hlist_entry_safe(node, struct padata_instance, node);
|
pinst = hlist_entry_safe(node, struct padata_instance, cpu_online_node);
|
||||||
if (!pinst_has_cpu(pinst, cpu))
|
if (!pinst_has_cpu(pinst, cpu))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -758,12 +758,12 @@ static int padata_cpu_online(unsigned int cpu, struct hlist_node *node)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int padata_cpu_prep_down(unsigned int cpu, struct hlist_node *node)
|
static int padata_cpu_dead(unsigned int cpu, struct hlist_node *node)
|
||||||
{
|
{
|
||||||
struct padata_instance *pinst;
|
struct padata_instance *pinst;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pinst = hlist_entry_safe(node, struct padata_instance, node);
|
pinst = hlist_entry_safe(node, struct padata_instance, cpu_dead_node);
|
||||||
if (!pinst_has_cpu(pinst, cpu))
|
if (!pinst_has_cpu(pinst, cpu))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -779,7 +779,9 @@ static enum cpuhp_state hp_online;
|
|||||||
static void __padata_free(struct padata_instance *pinst)
|
static void __padata_free(struct padata_instance *pinst)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
cpuhp_state_remove_instance_nocalls(hp_online, &pinst->node);
|
cpuhp_state_remove_instance_nocalls(CPUHP_PADATA_DEAD,
|
||||||
|
&pinst->cpu_dead_node);
|
||||||
|
cpuhp_state_remove_instance_nocalls(hp_online, &pinst->cpu_online_node);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
padata_stop(pinst);
|
padata_stop(pinst);
|
||||||
@@ -963,7 +965,10 @@ static struct padata_instance *padata_alloc(struct workqueue_struct *wq,
|
|||||||
mutex_init(&pinst->lock);
|
mutex_init(&pinst->lock);
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
cpuhp_state_add_instance_nocalls_cpuslocked(hp_online, &pinst->node);
|
cpuhp_state_add_instance_nocalls_cpuslocked(hp_online,
|
||||||
|
&pinst->cpu_online_node);
|
||||||
|
cpuhp_state_add_instance_nocalls_cpuslocked(CPUHP_PADATA_DEAD,
|
||||||
|
&pinst->cpu_dead_node);
|
||||||
#endif
|
#endif
|
||||||
return pinst;
|
return pinst;
|
||||||
|
|
||||||
@@ -1010,17 +1015,24 @@ static __init int padata_driver_init(void)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN, "padata:online",
|
ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN, "padata:online",
|
||||||
padata_cpu_online,
|
padata_cpu_online, NULL);
|
||||||
padata_cpu_prep_down);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
hp_online = ret;
|
hp_online = ret;
|
||||||
|
|
||||||
|
ret = cpuhp_setup_state_multi(CPUHP_PADATA_DEAD, "padata:dead",
|
||||||
|
NULL, padata_cpu_dead);
|
||||||
|
if (ret < 0) {
|
||||||
|
cpuhp_remove_multi_state(hp_online);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
module_init(padata_driver_init);
|
module_init(padata_driver_init);
|
||||||
|
|
||||||
static __exit void padata_driver_exit(void)
|
static __exit void padata_driver_exit(void)
|
||||||
{
|
{
|
||||||
|
cpuhp_remove_multi_state(CPUHP_PADATA_DEAD);
|
||||||
cpuhp_remove_multi_state(hp_online);
|
cpuhp_remove_multi_state(hp_online);
|
||||||
}
|
}
|
||||||
module_exit(padata_driver_exit);
|
module_exit(padata_driver_exit);
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ struct backing_dev_info noop_backing_dev_info = {
|
|||||||
EXPORT_SYMBOL_GPL(noop_backing_dev_info);
|
EXPORT_SYMBOL_GPL(noop_backing_dev_info);
|
||||||
|
|
||||||
static struct class *bdi_class;
|
static struct class *bdi_class;
|
||||||
const char *bdi_unknown_name = "(unknown)";
|
static const char *bdi_unknown_name = "(unknown)";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* bdi_lock protects updates to bdi_list. bdi_list has RCU reader side
|
* bdi_lock protects updates to bdi_list. bdi_list has RCU reader side
|
||||||
@@ -880,7 +880,8 @@ int bdi_register_va(struct backing_dev_info *bdi, const char *fmt, va_list args)
|
|||||||
if (bdi->dev) /* The driver needs to use separate queues per device */
|
if (bdi->dev) /* The driver needs to use separate queues per device */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
dev = device_create_vargs(bdi_class, NULL, MKDEV(0, 0), bdi, fmt, args);
|
vsnprintf(bdi->dev_name, sizeof(bdi->dev_name), fmt, args);
|
||||||
|
dev = device_create(bdi_class, NULL, MKDEV(0, 0), bdi, bdi->dev_name);
|
||||||
if (IS_ERR(dev))
|
if (IS_ERR(dev))
|
||||||
return PTR_ERR(dev);
|
return PTR_ERR(dev);
|
||||||
|
|
||||||
@@ -976,6 +977,14 @@ void bdi_put(struct backing_dev_info *bdi)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(bdi_put);
|
EXPORT_SYMBOL(bdi_put);
|
||||||
|
|
||||||
|
const char *bdi_dev_name(struct backing_dev_info *bdi)
|
||||||
|
{
|
||||||
|
if (!bdi || !bdi->dev)
|
||||||
|
return bdi_unknown_name;
|
||||||
|
return bdi->dev_name;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(bdi_dev_name);
|
||||||
|
|
||||||
static wait_queue_head_t congestion_wqh[2] = {
|
static wait_queue_head_t congestion_wqh[2] = {
|
||||||
__WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]),
|
__WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]),
|
||||||
__WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1])
|
__WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1])
|
||||||
|
|||||||
@@ -1609,6 +1609,14 @@ int hci_dev_do_close(struct hci_dev *hdev)
|
|||||||
|
|
||||||
BT_DBG("%s %p", hdev->name, hdev);
|
BT_DBG("%s %p", hdev->name, hdev);
|
||||||
|
|
||||||
|
if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) &&
|
||||||
|
!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
|
||||||
|
test_bit(HCI_UP, &hdev->flags)) {
|
||||||
|
/* Execute vendor specific shutdown routine */
|
||||||
|
if (hdev->shutdown)
|
||||||
|
hdev->shutdown(hdev);
|
||||||
|
}
|
||||||
|
|
||||||
cancel_delayed_work(&hdev->power_off);
|
cancel_delayed_work(&hdev->power_off);
|
||||||
|
|
||||||
hci_request_cancel_all(hdev);
|
hci_request_cancel_all(hdev);
|
||||||
@@ -1682,14 +1690,6 @@ int hci_dev_do_close(struct hci_dev *hdev)
|
|||||||
clear_bit(HCI_INIT, &hdev->flags);
|
clear_bit(HCI_INIT, &hdev->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) &&
|
|
||||||
!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
|
|
||||||
test_bit(HCI_UP, &hdev->flags)) {
|
|
||||||
/* Execute vendor specific shutdown routine */
|
|
||||||
if (hdev->shutdown)
|
|
||||||
hdev->shutdown(hdev);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* flush cmd work */
|
/* flush cmd work */
|
||||||
flush_work(&hdev->cmd_work);
|
flush_work(&hdev->cmd_work);
|
||||||
|
|
||||||
|
|||||||
@@ -2705,8 +2705,11 @@ skb_zerocopy_headlen(const struct sk_buff *from)
|
|||||||
|
|
||||||
if (!from->head_frag ||
|
if (!from->head_frag ||
|
||||||
skb_headlen(from) < L1_CACHE_BYTES ||
|
skb_headlen(from) < L1_CACHE_BYTES ||
|
||||||
skb_shinfo(from)->nr_frags >= MAX_SKB_FRAGS)
|
skb_shinfo(from)->nr_frags >= MAX_SKB_FRAGS) {
|
||||||
hlen = skb_headlen(from);
|
hlen = skb_headlen(from);
|
||||||
|
if (!hlen)
|
||||||
|
hlen = from->len;
|
||||||
|
}
|
||||||
|
|
||||||
if (skb_has_frag_list(from))
|
if (skb_has_frag_list(from))
|
||||||
hlen = from->len;
|
hlen = from->len;
|
||||||
|
|||||||
@@ -147,8 +147,8 @@ struct aic31xx_pdata {
|
|||||||
#define AIC31XX_WORD_LEN_24BITS 0x02
|
#define AIC31XX_WORD_LEN_24BITS 0x02
|
||||||
#define AIC31XX_WORD_LEN_32BITS 0x03
|
#define AIC31XX_WORD_LEN_32BITS 0x03
|
||||||
#define AIC31XX_IFACE1_MASTER_MASK GENMASK(3, 2)
|
#define AIC31XX_IFACE1_MASTER_MASK GENMASK(3, 2)
|
||||||
#define AIC31XX_BCLK_MASTER BIT(2)
|
#define AIC31XX_BCLK_MASTER BIT(3)
|
||||||
#define AIC31XX_WCLK_MASTER BIT(3)
|
#define AIC31XX_WCLK_MASTER BIT(2)
|
||||||
|
|
||||||
/* AIC31XX_DATA_OFFSET */
|
/* AIC31XX_DATA_OFFSET */
|
||||||
#define AIC31XX_DATA_OFFSET_MASK GENMASK(7, 0)
|
#define AIC31XX_DATA_OFFSET_MASK GENMASK(7, 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user