This is the 4.9.172 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAlzKnPkACgkQONu9yGCS aT4HYQ/+OwPT3G4gIh5Gye5PfLvLYrBvNncdOsmlETpNyYhjw3RWv2OJynSyJim2 HpPKckl3Tc8MryVUpDbl9kRgxHXS3AjHH4KWzJJBTljFHFwN7feW2YLAsXHrKsqx Bj/rNs0/nv8/RbNXPviddtb4pia0Q+Kj9nQ0U6ukN+B6FBROI2R7FZwPykY9my1c Ts2yEdM40mrS6TqmLbcyYYxbNJ+A2cOQ7N+qlDgMHUBhFnOhtVe2kJAjnwQnvdKY 4aSODp3P1vyT0+WlQx/Fn+uTOjw17oVF0PK5cls480+Vl/Eds1KbPIm6rps5hiGa 0Nxi0iaF13kCgZw2J+QGStXDHl+E4h4QlgBvlPRzbB88pqv6lZqBXBY69XOQWCkX 2Yoo3DS8ijDXQ3TwcqCxYLkJkXkCN3f1u5tt52tDggh+N+g1u3MSAswXWAnXS7/F 8hGdNFAGLa7iJ8NxTfoo123dmwnZHyohpmgkDKFchZwazytG+Gy1GZ2B/PvZ0TRk cm05qR4rWJmbg/d7TO2NES0uFbfcKdnxjUEnBwDv/oCw++qOQ5yhgLJ/iSebAV9e RYVSldAmme9OGa+XzhSY5b9MPjG+PoNzN1MgLKTJeWeVz80PhepzaKnrt+IVV5Af XMBvpgKKsw/KrJ/CBDL28HN5Lw01TFAsalQdTIovmlNp2keG4uY= =CjNf -----END PGP SIGNATURE----- Merge 4.9.172 into android-4.9 Changes in 4.9.172 kbuild: simplify ld-option implementation cifs: do not attempt cifs operation on smb2+ rename error tracing: Fix a memory leak by early error exit in trace_pid_write() MIPS: scall64-o32: Fix indirect syscall number load trace: Fix preempt_enable_no_resched() abuse IB/rdmavt: Fix frwr memory registration sched/numa: Fix a possible divide-by-zero ceph: ensure d_name stability in ceph_dentry_hash() ceph: fix ci->i_head_snapc leak nfsd: Don't release the callback slot unless it was actually held sunrpc: don't mark uninitialised items as VALID. Input: synaptics-rmi4 - write config register values to the right offset dmaengine: sh: rcar-dmac: With cyclic DMA residue 0 is valid ARM: 8857/1: efi: enable CP15 DMB instructions before cleaning the cache drm/vc4: Fix memory leak during gpu reset. drm/vc4: Fix compilation error reported by kbuild test bot USB: Add new USB LPM helpers USB: Consolidate LPM checks to avoid enabling LPM twice vsock/virtio: fix kernel panic from virtio_transport_reset_no_sock tipc: handle the err returned from cmd header function slip: make slhc_free() silently accept an error pointer intel_th: gth: Fix an off-by-one in output unassigning fs/proc/proc_sysctl.c: Fix a NULL pointer dereference NFS: Forbid setting AF_INET6 to "struct sockaddr_in"->sin_family. netfilter: ebtables: CONFIG_COMPAT: drop a bogus WARN_ON fm10k: Fix a potential NULL pointer dereference tipc: check bearer name with right length in tipc_nl_compat_bearer_enable tipc: check link name with right length in tipc_nl_compat_link_set Revert "block/loop: Use global lock for ioctl() operation." ipv4: add sanity checks in ipv4_link_failure() mlxsw: spectrum: Fix autoneg status in ethtool net/mlx5e: ethtool, Remove unsupported SFP EEPROM high pages query net: rds: exchange of 8K and 1M pool team: fix possible recursive locking when add slaves net: stmmac: move stmmac_check_ether_addr() to driver probe ipv4: set the tcp_min_rtt_wlen range from 0 to one day ipv6: frags: fix a lockdep false positive net: IP defrag: encapsulate rbtree defrag code into callable functions ipv6: remove dependency of nf_defrag_ipv6 on ipv6 module net: IP6 defrag: use rbtrees for IPv6 defrag net: IP6 defrag: use rbtrees in nf_conntrack_reasm.c powerpc/fsl: Add FSL_PPC_BOOK3E as supported arch for nospectre_v2 boot arg Documentation: Add nospectre_v1 parameter Linux 4.9.172 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
2dbf78bcd8
54 changed files with 870 additions and 854 deletions
|
|
@ -2770,6 +2770,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||
|
||||
nohugeiomap [KNL,x86] Disable kernel huge I/O mappings.
|
||||
|
||||
nospectre_v1 [PPC] Disable mitigations for Spectre Variant 1 (bounds
|
||||
check bypass). With this option data leaks are possible
|
||||
in the system.
|
||||
|
||||
nosmt [KNL,S390] Disable symmetric multithreading (SMT).
|
||||
Equivalent to smt=1.
|
||||
|
||||
|
|
@ -2777,7 +2781,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||
nosmt=force: Force disable SMT, cannot be undone
|
||||
via the sysfs control file.
|
||||
|
||||
nospectre_v2 [X86] Disable all mitigations for the Spectre variant 2
|
||||
nospectre_v2 [X86,PPC_FSL_BOOK3E] Disable all mitigations for the Spectre variant 2
|
||||
(indirect branch prediction) vulnerability. System may
|
||||
allow data leaks with this option, which is equivalent
|
||||
to spectre_v2=off.
|
||||
|
|
|
|||
|
|
@ -405,6 +405,7 @@ tcp_min_rtt_wlen - INTEGER
|
|||
minimum RTT when it is moved to a longer path (e.g., due to traffic
|
||||
engineering). A longer window makes the filter more resistant to RTT
|
||||
inflations such as transient congestion. The unit is seconds.
|
||||
Possible values: 0 - 86400 (1 day)
|
||||
Default: 300
|
||||
|
||||
tcp_moderate_rcvbuf - BOOLEAN
|
||||
|
|
|
|||
2
Makefile
2
Makefile
|
|
@ -1,6 +1,6 @@
|
|||
VERSION = 4
|
||||
PATCHLEVEL = 9
|
||||
SUBLEVEL = 171
|
||||
SUBLEVEL = 172
|
||||
EXTRAVERSION =
|
||||
NAME = Roaring Lionus
|
||||
|
||||
|
|
|
|||
|
|
@ -1385,7 +1385,21 @@ ENTRY(efi_stub_entry)
|
|||
|
||||
@ Preserve return value of efi_entry() in r4
|
||||
mov r4, r0
|
||||
bl cache_clean_flush
|
||||
|
||||
@ our cache maintenance code relies on CP15 barrier instructions
|
||||
@ but since we arrived here with the MMU and caches configured
|
||||
@ by UEFI, we must check that the CP15BEN bit is set in SCTLR.
|
||||
@ Note that this bit is RAO/WI on v6 and earlier, so the ISB in
|
||||
@ the enable path will be executed on v7+ only.
|
||||
mrc p15, 0, r1, c1, c0, 0 @ read SCTLR
|
||||
tst r1, #(1 << 5) @ CP15BEN bit set?
|
||||
bne 0f
|
||||
orr r1, r1, #(1 << 5) @ CP15 barrier instructions
|
||||
mcr p15, 0, r1, c1, c0, 0 @ write SCTLR
|
||||
ARM( .inst 0xf57ff06f @ v7+ isb )
|
||||
THUMB( isb )
|
||||
|
||||
0: bl cache_clean_flush
|
||||
bl cache_off
|
||||
|
||||
@ Set parameters for booting zImage according to boot protocol
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ trace_a_syscall:
|
|||
subu t1, v0, __NR_O32_Linux
|
||||
move a1, v0
|
||||
bnez t1, 1f /* __NR_syscall at offset 0 */
|
||||
lw a1, PT_R4(sp) /* Arg1 for __NR_syscall case */
|
||||
ld a1, PT_R4(sp) /* Arg1 for __NR_syscall case */
|
||||
.set pop
|
||||
|
||||
1: jal syscall_trace_enter
|
||||
|
|
|
|||
|
|
@ -82,7 +82,6 @@
|
|||
|
||||
static DEFINE_IDR(loop_index_idr);
|
||||
static DEFINE_MUTEX(loop_index_mutex);
|
||||
static DEFINE_MUTEX(loop_ctl_mutex);
|
||||
|
||||
static int max_part;
|
||||
static int part_shift;
|
||||
|
|
@ -1034,7 +1033,7 @@ static int loop_clr_fd(struct loop_device *lo)
|
|||
*/
|
||||
if (atomic_read(&lo->lo_refcnt) > 1) {
|
||||
lo->lo_flags |= LO_FLAGS_AUTOCLEAR;
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1084,12 +1083,12 @@ static int loop_clr_fd(struct loop_device *lo)
|
|||
if (!part_shift)
|
||||
lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN;
|
||||
loop_unprepare_queue(lo);
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
/*
|
||||
* Need not hold loop_ctl_mutex to fput backing file.
|
||||
* Calling fput holding loop_ctl_mutex triggers a circular
|
||||
* Need not hold lo_ctl_mutex to fput backing file.
|
||||
* Calling fput holding lo_ctl_mutex triggers a circular
|
||||
* lock dependency possibility warning as fput can take
|
||||
* bd_mutex which is usually taken before loop_ctl_mutex.
|
||||
* bd_mutex which is usually taken before lo_ctl_mutex.
|
||||
*/
|
||||
fput(filp);
|
||||
return 0;
|
||||
|
|
@ -1402,7 +1401,7 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
|
|||
struct loop_device *lo = bdev->bd_disk->private_data;
|
||||
int err;
|
||||
|
||||
mutex_lock_nested(&loop_ctl_mutex, 1);
|
||||
mutex_lock_nested(&lo->lo_ctl_mutex, 1);
|
||||
switch (cmd) {
|
||||
case LOOP_SET_FD:
|
||||
err = loop_set_fd(lo, mode, bdev, arg);
|
||||
|
|
@ -1411,7 +1410,7 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
|
|||
err = loop_change_fd(lo, bdev, arg);
|
||||
break;
|
||||
case LOOP_CLR_FD:
|
||||
/* loop_clr_fd would have unlocked loop_ctl_mutex on success */
|
||||
/* loop_clr_fd would have unlocked lo_ctl_mutex on success */
|
||||
err = loop_clr_fd(lo);
|
||||
if (!err)
|
||||
goto out_unlocked;
|
||||
|
|
@ -1452,7 +1451,7 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
|
|||
default:
|
||||
err = lo->ioctl ? lo->ioctl(lo, cmd, arg) : -EINVAL;
|
||||
}
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
|
||||
out_unlocked:
|
||||
return err;
|
||||
|
|
@ -1585,16 +1584,16 @@ static int lo_compat_ioctl(struct block_device *bdev, fmode_t mode,
|
|||
|
||||
switch(cmd) {
|
||||
case LOOP_SET_STATUS:
|
||||
mutex_lock(&loop_ctl_mutex);
|
||||
mutex_lock(&lo->lo_ctl_mutex);
|
||||
err = loop_set_status_compat(
|
||||
lo, (const struct compat_loop_info __user *) arg);
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
break;
|
||||
case LOOP_GET_STATUS:
|
||||
mutex_lock(&loop_ctl_mutex);
|
||||
mutex_lock(&lo->lo_ctl_mutex);
|
||||
err = loop_get_status_compat(
|
||||
lo, (struct compat_loop_info __user *) arg);
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
break;
|
||||
case LOOP_SET_CAPACITY:
|
||||
case LOOP_CLR_FD:
|
||||
|
|
@ -1639,7 +1638,7 @@ static void __lo_release(struct loop_device *lo)
|
|||
if (atomic_dec_return(&lo->lo_refcnt))
|
||||
return;
|
||||
|
||||
mutex_lock(&loop_ctl_mutex);
|
||||
mutex_lock(&lo->lo_ctl_mutex);
|
||||
if (lo->lo_flags & LO_FLAGS_AUTOCLEAR) {
|
||||
/*
|
||||
* In autoclear mode, stop the loop thread
|
||||
|
|
@ -1656,7 +1655,7 @@ static void __lo_release(struct loop_device *lo)
|
|||
loop_flush(lo);
|
||||
}
|
||||
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
}
|
||||
|
||||
static void lo_release(struct gendisk *disk, fmode_t mode)
|
||||
|
|
@ -1702,10 +1701,10 @@ static int unregister_transfer_cb(int id, void *ptr, void *data)
|
|||
struct loop_device *lo = ptr;
|
||||
struct loop_func_table *xfer = data;
|
||||
|
||||
mutex_lock(&loop_ctl_mutex);
|
||||
mutex_lock(&lo->lo_ctl_mutex);
|
||||
if (lo->lo_encryption == xfer)
|
||||
loop_release_xfer(lo);
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1872,6 +1871,7 @@ static int loop_add(struct loop_device **l, int i)
|
|||
if (!part_shift)
|
||||
disk->flags |= GENHD_FL_NO_PART_SCAN;
|
||||
disk->flags |= GENHD_FL_EXT_DEVT;
|
||||
mutex_init(&lo->lo_ctl_mutex);
|
||||
atomic_set(&lo->lo_refcnt, 0);
|
||||
lo->lo_number = i;
|
||||
spin_lock_init(&lo->lo_lock);
|
||||
|
|
@ -1984,19 +1984,19 @@ static long loop_control_ioctl(struct file *file, unsigned int cmd,
|
|||
ret = loop_lookup(&lo, parm);
|
||||
if (ret < 0)
|
||||
break;
|
||||
mutex_lock(&loop_ctl_mutex);
|
||||
mutex_lock(&lo->lo_ctl_mutex);
|
||||
if (lo->lo_state != Lo_unbound) {
|
||||
ret = -EBUSY;
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
break;
|
||||
}
|
||||
if (atomic_read(&lo->lo_refcnt) > 0) {
|
||||
ret = -EBUSY;
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
break;
|
||||
}
|
||||
lo->lo_disk->private_data = NULL;
|
||||
mutex_unlock(&loop_ctl_mutex);
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
idr_remove(&loop_index_idr, lo->lo_number);
|
||||
loop_remove(lo);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ struct loop_device {
|
|||
|
||||
spinlock_t lo_lock;
|
||||
int lo_state;
|
||||
struct mutex lo_ctl_mutex;
|
||||
struct kthread_worker worker;
|
||||
struct task_struct *worker_task;
|
||||
bool use_dio;
|
||||
|
|
|
|||
|
|
@ -1311,6 +1311,7 @@ static enum dma_status rcar_dmac_tx_status(struct dma_chan *chan,
|
|||
enum dma_status status;
|
||||
unsigned long flags;
|
||||
unsigned int residue;
|
||||
bool cyclic;
|
||||
|
||||
status = dma_cookie_status(chan, cookie, txstate);
|
||||
if (status == DMA_COMPLETE || !txstate)
|
||||
|
|
@ -1318,10 +1319,11 @@ static enum dma_status rcar_dmac_tx_status(struct dma_chan *chan,
|
|||
|
||||
spin_lock_irqsave(&rchan->lock, flags);
|
||||
residue = rcar_dmac_chan_get_residue(rchan, cookie);
|
||||
cyclic = rchan->desc.running ? rchan->desc.running->cyclic : false;
|
||||
spin_unlock_irqrestore(&rchan->lock, flags);
|
||||
|
||||
/* if there's no residue, the cookie is complete */
|
||||
if (!residue)
|
||||
if (!residue && !cyclic)
|
||||
return DMA_COMPLETE;
|
||||
|
||||
dma_set_residue(txstate, residue);
|
||||
|
|
|
|||
|
|
@ -846,7 +846,7 @@ static void
|
|||
vc4_crtc_reset(struct drm_crtc *crtc)
|
||||
{
|
||||
if (crtc->state)
|
||||
__drm_atomic_helper_crtc_destroy_state(crtc->state);
|
||||
vc4_crtc_destroy_state(crtc, crtc->state);
|
||||
|
||||
crtc->state = kzalloc(sizeof(struct vc4_crtc_state), GFP_KERNEL);
|
||||
if (crtc->state)
|
||||
|
|
|
|||
|
|
@ -605,7 +605,7 @@ static void intel_th_gth_unassign(struct intel_th_device *thdev,
|
|||
othdev->output.port = -1;
|
||||
othdev->output.active = false;
|
||||
gth->output[port].output = NULL;
|
||||
for (master = 0; master < TH_CONFIGURABLE_MASTERS; master++)
|
||||
for (master = 0; master <= TH_CONFIGURABLE_MASTERS; master++)
|
||||
if (gth->master[master] == port)
|
||||
gth->master[master] = -1;
|
||||
spin_unlock(>h->gth_lock);
|
||||
|
|
|
|||
|
|
@ -497,11 +497,6 @@ static int rvt_set_page(struct ib_mr *ibmr, u64 addr)
|
|||
if (unlikely(mapped_segs == mr->mr.max_segs))
|
||||
return -ENOMEM;
|
||||
|
||||
if (mr->mr.length == 0) {
|
||||
mr->mr.user_base = addr;
|
||||
mr->mr.iova = addr;
|
||||
}
|
||||
|
||||
m = mapped_segs / RVT_SEGSZ;
|
||||
n = mapped_segs % RVT_SEGSZ;
|
||||
mr->mr.map[m]->segs[n].vaddr = (void *)addr;
|
||||
|
|
@ -518,17 +513,24 @@ static int rvt_set_page(struct ib_mr *ibmr, u64 addr)
|
|||
* @sg_nents: number of entries in sg
|
||||
* @sg_offset: offset in bytes into sg
|
||||
*
|
||||
* Overwrite rvt_mr length with mr length calculated by ib_sg_to_pages.
|
||||
*
|
||||
* Return: number of sg elements mapped to the memory region
|
||||
*/
|
||||
int rvt_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg,
|
||||
int sg_nents, unsigned int *sg_offset)
|
||||
{
|
||||
struct rvt_mr *mr = to_imr(ibmr);
|
||||
int ret;
|
||||
|
||||
mr->mr.length = 0;
|
||||
mr->mr.page_shift = PAGE_SHIFT;
|
||||
return ib_sg_to_pages(ibmr, sg, sg_nents, sg_offset,
|
||||
rvt_set_page);
|
||||
ret = ib_sg_to_pages(ibmr, sg, sg_nents, sg_offset, rvt_set_page);
|
||||
mr->mr.user_base = ibmr->iova;
|
||||
mr->mr.iova = ibmr->iova;
|
||||
mr->mr.offset = ibmr->iova - (u64)mr->mr.map[0]->segs[0].vaddr;
|
||||
mr->mr.length = (size_t)ibmr->length;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -559,6 +561,7 @@ int rvt_fast_reg_mr(struct rvt_qp *qp, struct ib_mr *ibmr, u32 key,
|
|||
ibmr->rkey = key;
|
||||
mr->mr.lkey = key;
|
||||
mr->mr.access_flags = access;
|
||||
mr->mr.iova = ibmr->iova;
|
||||
atomic_set(&mr->mr.lkey_invalid, 0);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -1198,7 +1198,7 @@ static int rmi_f11_initialize(struct rmi_function *fn)
|
|||
ctrl->ctrl0_11[11] = ctrl->ctrl0_11[11] & ~BIT(0);
|
||||
|
||||
rc = f11_write_control_regs(fn, &f11->sens_query,
|
||||
&f11->dev_controls, fn->fd.query_base_addr);
|
||||
&f11->dev_controls, fn->fd.control_base_addr);
|
||||
if (rc)
|
||||
dev_warn(&fn->dev, "Failed to write control registers\n");
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,8 @@ static int __init fm10k_init_module(void)
|
|||
/* create driver workqueue */
|
||||
fm10k_workqueue = alloc_workqueue("%s", WQ_MEM_RECLAIM, 0,
|
||||
fm10k_driver_name);
|
||||
if (!fm10k_workqueue)
|
||||
return -ENOMEM;
|
||||
|
||||
fm10k_dbg_init();
|
||||
|
||||
|
|
|
|||
|
|
@ -1365,7 +1365,7 @@ static int mlx5e_get_module_info(struct net_device *netdev,
|
|||
break;
|
||||
case MLX5_MODULE_ID_SFP:
|
||||
modinfo->type = ETH_MODULE_SFF_8472;
|
||||
modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
|
||||
modinfo->eeprom_len = MLX5_EEPROM_PAGE_LENGTH;
|
||||
break;
|
||||
default:
|
||||
netdev_err(priv->netdev, "%s: cable type not recognized:0x%x\n",
|
||||
|
|
|
|||
|
|
@ -368,10 +368,6 @@ int mlx5_query_module_eeprom(struct mlx5_core_dev *dev,
|
|||
size -= offset + size - MLX5_EEPROM_PAGE_LENGTH;
|
||||
|
||||
i2c_addr = MLX5_I2C_ADDR_LOW;
|
||||
if (offset >= MLX5_EEPROM_PAGE_LENGTH) {
|
||||
i2c_addr = MLX5_I2C_ADDR_HIGH;
|
||||
offset -= MLX5_EEPROM_PAGE_LENGTH;
|
||||
}
|
||||
|
||||
MLX5_SET(mcia_reg, in, l, 0);
|
||||
MLX5_SET(mcia_reg, in, module, module_num);
|
||||
|
|
|
|||
|
|
@ -2059,11 +2059,11 @@ mlxsw_sp_port_set_link_ksettings(struct net_device *dev,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
mlxsw_sp_port->link.autoneg = autoneg;
|
||||
|
||||
if (!netif_running(dev))
|
||||
return 0;
|
||||
|
||||
mlxsw_sp_port->link.autoneg = autoneg;
|
||||
|
||||
mlxsw_sp_port_admin_status_set(mlxsw_sp_port, false);
|
||||
mlxsw_sp_port_admin_status_set(mlxsw_sp_port, true);
|
||||
|
||||
|
|
|
|||
|
|
@ -1796,8 +1796,6 @@ static int stmmac_open(struct net_device *dev)
|
|||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
int ret;
|
||||
|
||||
stmmac_check_ether_addr(priv);
|
||||
|
||||
if (priv->hw->pcs != STMMAC_PCS_RGMII &&
|
||||
priv->hw->pcs != STMMAC_PCS_TBI &&
|
||||
priv->hw->pcs != STMMAC_PCS_RTBI) {
|
||||
|
|
@ -3355,6 +3353,8 @@ int stmmac_dvr_probe(struct device *device,
|
|||
if (ret)
|
||||
goto error_hw_init;
|
||||
|
||||
stmmac_check_ether_addr(priv);
|
||||
|
||||
ndev->netdev_ops = &stmmac_netdev_ops;
|
||||
|
||||
ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ out_fail:
|
|||
void
|
||||
slhc_free(struct slcompress *comp)
|
||||
{
|
||||
if ( comp == NULLSLCOMPR )
|
||||
if ( IS_ERR_OR_NULL(comp) )
|
||||
return;
|
||||
|
||||
if ( comp->tstate != NULLSLSTATE )
|
||||
|
|
|
|||
|
|
@ -1163,6 +1163,12 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (netdev_has_upper_dev(dev, port_dev)) {
|
||||
netdev_err(dev, "Device %s is already an upper device of the team interface\n",
|
||||
portname);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (port_dev->features & NETIF_F_VLAN_CHALLENGED &&
|
||||
vlan_uses_dev(dev)) {
|
||||
netdev_err(dev, "Device %s is VLAN challenged and team device has VLAN set up\n",
|
||||
|
|
|
|||
|
|
@ -1888,14 +1888,11 @@ int usb_runtime_idle(struct device *dev)
|
|||
return -EBUSY;
|
||||
}
|
||||
|
||||
int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
|
||||
static int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
|
||||
{
|
||||
struct usb_hcd *hcd = bus_to_hcd(udev->bus);
|
||||
int ret = -EPERM;
|
||||
|
||||
if (enable && !udev->usb2_hw_lpm_allowed)
|
||||
return 0;
|
||||
|
||||
if (hcd->driver->set_usb2_hw_lpm) {
|
||||
ret = hcd->driver->set_usb2_hw_lpm(hcd, udev, enable);
|
||||
if (!ret)
|
||||
|
|
@ -1905,6 +1902,24 @@ int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int usb_enable_usb2_hardware_lpm(struct usb_device *udev)
|
||||
{
|
||||
if (!udev->usb2_hw_lpm_capable ||
|
||||
!udev->usb2_hw_lpm_allowed ||
|
||||
udev->usb2_hw_lpm_enabled)
|
||||
return 0;
|
||||
|
||||
return usb_set_usb2_hardware_lpm(udev, 1);
|
||||
}
|
||||
|
||||
int usb_disable_usb2_hardware_lpm(struct usb_device *udev)
|
||||
{
|
||||
if (!udev->usb2_hw_lpm_enabled)
|
||||
return 0;
|
||||
|
||||
return usb_set_usb2_hardware_lpm(udev, 0);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
struct bus_type usb_bus_type = {
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue