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:
Greg Kroah-Hartman
2021-08-08 09:10:51 +02:00
22 changed files with 98 additions and 76 deletions

View File

@@ -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"

View File

@@ -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:
/* /*

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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(&reg_val, xfer->tx_buf + (cnt * 4), remainder); memcpy(&reg_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), &reg_val, remainder);
}
} }
mtk_spi_enable_transfer(master); mtk_spi_enable_transfer(master);

View File

@@ -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));
} }

View File

@@ -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);

View File

@@ -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,

View File

@@ -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;

View File

@@ -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 */

View File

@@ -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,

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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])

View File

@@ -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);

View File

@@ -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;

View File

@@ -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)