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
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 201
|
||||
SUBLEVEL = 202
|
||||
EXTRAVERSION =
|
||||
NAME = "People's Front"
|
||||
|
||||
|
||||
@@ -132,6 +132,7 @@
|
||||
#include <linux/ioprio.h>
|
||||
#include <linux/sbitmap.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/backing-dev.h>
|
||||
|
||||
#include "blk.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);
|
||||
switch (ioprio_class) {
|
||||
default:
|
||||
dev_err(bfqq->bfqd->queue->backing_dev_info->dev,
|
||||
"bfq: bad prio class %d\n", ioprio_class);
|
||||
pr_err("bdi %s: bfq: bad prio class %d\n",
|
||||
bdi_dev_name(bfqq->bfqd->queue->backing_dev_info),
|
||||
ioprio_class);
|
||||
/* fall through */
|
||||
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 */
|
||||
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;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(blkg_dev_name);
|
||||
|
||||
@@ -100,6 +100,9 @@ int scmi_driver_register(struct scmi_driver *driver, struct module *owner,
|
||||
{
|
||||
int retval;
|
||||
|
||||
if (!driver->probe)
|
||||
return -EINVAL;
|
||||
|
||||
driver->driver.bus = &scmi_bus_type;
|
||||
driver->driver.name = driver->name;
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
rc = qed_mcp_update_pending_cmd(p_hwfn, p_ptt);
|
||||
if (!rc)
|
||||
if (!rc) {
|
||||
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||
break;
|
||||
else if (rc != -EAGAIN)
|
||||
} else if (rc != -EAGAIN) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||
|
||||
/* Send the mailbox command */
|
||||
qed_mcp_reread_offsets(p_hwfn, p_ptt);
|
||||
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);
|
||||
|
||||
if (p_cmd_elem->b_is_completed)
|
||||
if (p_cmd_elem->b_is_completed) {
|
||||
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||
break;
|
||||
}
|
||||
|
||||
rc = qed_mcp_update_pending_cmd(p_hwfn, p_ptt);
|
||||
if (!rc)
|
||||
if (!rc) {
|
||||
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||
break;
|
||||
else if (rc != -EAGAIN)
|
||||
} else if (rc != -EAGAIN) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
spin_unlock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||
} while (++cnt < max_retries);
|
||||
@@ -576,6 +586,7 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
spin_lock_bh(&p_hwfn->mcp_info->cmd_lock);
|
||||
qed_mcp_cmd_del_elem(p_hwfn, p_cmd_elem);
|
||||
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);
|
||||
|
||||
mutex_unlock(&tp->control);
|
||||
|
||||
usb_autopm_put_interface(tp->intf);
|
||||
}
|
||||
|
||||
if (!res)
|
||||
usb_autopm_put_interface(tp->intf);
|
||||
|
||||
free_all_mem(tp);
|
||||
|
||||
return res;
|
||||
|
||||
@@ -391,24 +391,15 @@ static int mtk_spi_fifo_transfer(struct spi_master *master,
|
||||
mtk_spi_prepare_transfer(master, xfer);
|
||||
mtk_spi_setup_packet(master);
|
||||
|
||||
if (xfer->tx_buf) {
|
||||
cnt = xfer->len / 4;
|
||||
if (xfer->tx_buf)
|
||||
iowrite32_rep(mdata->base + SPI_TX_DATA_REG, xfer->tx_buf, cnt);
|
||||
|
||||
if (xfer->rx_buf)
|
||||
ioread32_rep(mdata->base + SPI_RX_DATA_REG, xfer->rx_buf, cnt);
|
||||
|
||||
remainder = xfer->len % 4;
|
||||
if (remainder > 0) {
|
||||
reg_val = 0;
|
||||
if (xfer->tx_buf) {
|
||||
memcpy(®_val, xfer->tx_buf + (cnt * 4), remainder);
|
||||
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);
|
||||
|
||||
@@ -75,8 +75,6 @@
|
||||
#define TCOBASE(p) ((p)->tco_res->start)
|
||||
/* SMI Control and Enable Register */
|
||||
#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 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);
|
||||
|
||||
/*
|
||||
* If TCO SMIs are off, the timer counts down twice before rebooting.
|
||||
* 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))
|
||||
/* For TCO v1 the timer counts down twice before rebooting */
|
||||
if (p->iTCO_version == 1)
|
||||
tmrval /= 2;
|
||||
|
||||
/* from the specs: */
|
||||
@@ -499,7 +493,7 @@ static int iTCO_wdt_probe(struct platform_device *pdev)
|
||||
* Disables TCO logic generating an SMI#
|
||||
*/
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
@@ -270,8 +270,7 @@ static void end_compressed_bio_write(struct bio *bio)
|
||||
cb->start,
|
||||
cb->start + cb->len - 1,
|
||||
NULL,
|
||||
bio->bi_status ?
|
||||
BLK_STS_OK : BLK_STS_NOTSUPP);
|
||||
!cb->errors);
|
||||
cb->compressed_pages[0]->mapping = NULL;
|
||||
|
||||
end_compressed_writeback(inode, cb);
|
||||
|
||||
@@ -251,7 +251,7 @@ int ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
|
||||
goto out;
|
||||
|
||||
snprintf(name, sizeof(name), "../../bdi/%s",
|
||||
dev_name(fsc->sb->s_bdi->dev));
|
||||
bdi_dev_name(fsc->sb->s_bdi));
|
||||
fsc->debugfs_bdi =
|
||||
debugfs_create_symlink("bdi",
|
||||
fsc->client->debugfs_dir,
|
||||
|
||||
@@ -197,6 +197,7 @@ struct backing_dev_info {
|
||||
wait_queue_head_t wb_waitq;
|
||||
|
||||
struct device *dev;
|
||||
char dev_name[64];
|
||||
struct device *owner;
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
extern const char *bdi_unknown_name;
|
||||
|
||||
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);
|
||||
}
|
||||
const char *bdi_dev_name(struct backing_dev_info *bdi);
|
||||
|
||||
#endif /* _LINUX_BACKING_DEV_H */
|
||||
|
||||
@@ -59,6 +59,7 @@ enum cpuhp_state {
|
||||
CPUHP_IOMMU_INTEL_DEAD,
|
||||
CPUHP_LUSTRE_CFS_DEAD,
|
||||
CPUHP_AP_ARM_CACHE_B15_RAC_DEAD,
|
||||
CPUHP_PADATA_DEAD,
|
||||
CPUHP_WORKQUEUE_PREP,
|
||||
CPUHP_POWER_NUMA_PREPARE,
|
||||
CPUHP_HRTIMERS_PREPARE,
|
||||
|
||||
@@ -203,13 +203,13 @@ enum rt5033_reg {
|
||||
#define RT5033_REGULATOR_BUCK_VOLTAGE_MIN 1000000U
|
||||
#define RT5033_REGULATOR_BUCK_VOLTAGE_MAX 3000000U
|
||||
#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 */
|
||||
#define RT5033_REGULATOR_LDO_VOLTAGE_MIN 1200000U
|
||||
#define RT5033_REGULATOR_LDO_VOLTAGE_MAX 3000000U
|
||||
#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 */
|
||||
#define RT5033_REGULATOR_SAFE_LDO_VOLTAGE 4900000U
|
||||
|
||||
@@ -138,7 +138,8 @@ struct parallel_data {
|
||||
/**
|
||||
* 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.
|
||||
* @pd: The internal control structure.
|
||||
* @cpumask: User supplied cpumasks for parallel and serial works.
|
||||
@@ -150,7 +151,8 @@ struct parallel_data {
|
||||
* @flags: padata flags.
|
||||
*/
|
||||
struct padata_instance {
|
||||
struct hlist_node node;
|
||||
struct hlist_node cpu_online_node;
|
||||
struct hlist_node cpu_dead_node;
|
||||
struct workqueue_struct *wq;
|
||||
struct parallel_data *pd;
|
||||
struct padata_cpumask cpumask;
|
||||
|
||||
@@ -33,7 +33,7 @@ TRACE_EVENT(wbt_stat,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strlcpy(__entry->name, dev_name(bdi->dev),
|
||||
strlcpy(__entry->name, bdi_dev_name(bdi),
|
||||
ARRAY_SIZE(__entry->name));
|
||||
__entry->rmean = stat[0].mean;
|
||||
__entry->rmin = stat[0].min;
|
||||
@@ -68,7 +68,7 @@ TRACE_EVENT(wbt_lat,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strlcpy(__entry->name, dev_name(bdi->dev),
|
||||
strlcpy(__entry->name, bdi_dev_name(bdi),
|
||||
ARRAY_SIZE(__entry->name));
|
||||
__entry->lat = div_u64(lat, 1000);
|
||||
),
|
||||
@@ -105,7 +105,7 @@ TRACE_EVENT(wbt_step,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strlcpy(__entry->name, dev_name(bdi->dev),
|
||||
strlcpy(__entry->name, bdi_dev_name(bdi),
|
||||
ARRAY_SIZE(__entry->name));
|
||||
__entry->msg = msg;
|
||||
__entry->step = step;
|
||||
@@ -141,7 +141,7 @@ TRACE_EVENT(wbt_timer,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strlcpy(__entry->name, dev_name(bdi->dev),
|
||||
strlcpy(__entry->name, bdi_dev_name(bdi),
|
||||
ARRAY_SIZE(__entry->name));
|
||||
__entry->status = status;
|
||||
__entry->step = step;
|
||||
|
||||
@@ -682,7 +682,7 @@ static int __padata_remove_cpu(struct padata_instance *pinst, int cpu)
|
||||
{
|
||||
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) ||
|
||||
!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;
|
||||
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))
|
||||
return 0;
|
||||
|
||||
@@ -758,12 +758,12 @@ static int padata_cpu_online(unsigned int cpu, struct hlist_node *node)
|
||||
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;
|
||||
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))
|
||||
return 0;
|
||||
|
||||
@@ -779,7 +779,9 @@ static enum cpuhp_state hp_online;
|
||||
static void __padata_free(struct padata_instance *pinst)
|
||||
{
|
||||
#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
|
||||
|
||||
padata_stop(pinst);
|
||||
@@ -963,7 +965,10 @@ static struct padata_instance *padata_alloc(struct workqueue_struct *wq,
|
||||
mutex_init(&pinst->lock);
|
||||
|
||||
#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
|
||||
return pinst;
|
||||
|
||||
@@ -1010,17 +1015,24 @@ static __init int padata_driver_init(void)
|
||||
int ret;
|
||||
|
||||
ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN, "padata:online",
|
||||
padata_cpu_online,
|
||||
padata_cpu_prep_down);
|
||||
padata_cpu_online, NULL);
|
||||
if (ret < 0)
|
||||
return 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;
|
||||
}
|
||||
module_init(padata_driver_init);
|
||||
|
||||
static __exit void padata_driver_exit(void)
|
||||
{
|
||||
cpuhp_remove_multi_state(CPUHP_PADATA_DEAD);
|
||||
cpuhp_remove_multi_state(hp_online);
|
||||
}
|
||||
module_exit(padata_driver_exit);
|
||||
|
||||
@@ -19,7 +19,7 @@ struct backing_dev_info noop_backing_dev_info = {
|
||||
EXPORT_SYMBOL_GPL(noop_backing_dev_info);
|
||||
|
||||
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
|
||||
@@ -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 */
|
||||
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))
|
||||
return PTR_ERR(dev);
|
||||
|
||||
@@ -976,6 +977,14 @@ void bdi_put(struct backing_dev_info *bdi)
|
||||
}
|
||||
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] = {
|
||||
__WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]),
|
||||
__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);
|
||||
|
||||
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);
|
||||
|
||||
hci_request_cancel_all(hdev);
|
||||
@@ -1682,14 +1690,6 @@ int hci_dev_do_close(struct hci_dev *hdev)
|
||||
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_work(&hdev->cmd_work);
|
||||
|
||||
|
||||
@@ -2705,8 +2705,11 @@ skb_zerocopy_headlen(const struct sk_buff *from)
|
||||
|
||||
if (!from->head_frag ||
|
||||
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);
|
||||
if (!hlen)
|
||||
hlen = from->len;
|
||||
}
|
||||
|
||||
if (skb_has_frag_list(from))
|
||||
hlen = from->len;
|
||||
|
||||
@@ -147,8 +147,8 @@ struct aic31xx_pdata {
|
||||
#define AIC31XX_WORD_LEN_24BITS 0x02
|
||||
#define AIC31XX_WORD_LEN_32BITS 0x03
|
||||
#define AIC31XX_IFACE1_MASTER_MASK GENMASK(3, 2)
|
||||
#define AIC31XX_BCLK_MASTER BIT(2)
|
||||
#define AIC31XX_WCLK_MASTER BIT(3)
|
||||
#define AIC31XX_BCLK_MASTER BIT(3)
|
||||
#define AIC31XX_WCLK_MASTER BIT(2)
|
||||
|
||||
/* AIC31XX_DATA_OFFSET */
|
||||
#define AIC31XX_DATA_OFFSET_MASK GENMASK(7, 0)
|
||||
|
||||
Reference in New Issue
Block a user