Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51181630 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge 4.19.66 into android-4.19-q



Changes in 4.19.66
	scsi: fcoe: Embed fc_rport_priv in fcoe_rport structure
	gcc-9: don't warn about uninitialized variable
	driver core: Establish order of operations for device_add and device_del via bitflag
	drivers/base: Introduce kill_device()
	libnvdimm/bus: Prevent duplicate device_unregister() calls
	libnvdimm/region: Register badblocks before namespaces
	libnvdimm/bus: Prepare the nd_ioctl() path to be re-entrant
	libnvdimm/bus: Fix wait_nvdimm_bus_probe_idle() ABBA deadlock
	HID: wacom: fix bit shift for Cintiq Companion 2
	HID: Add quirk for HP X1200 PIXART OEM mouse
	IB: directly cast the sockaddr union to aockaddr
	atm: iphase: Fix Spectre v1 vulnerability
	bnx2x: Disable multi-cos feature.
	ife: error out when nla attributes are empty
	ip6_gre: reload ipv6h in prepare_ip6gre_xmit_ipv6
	ip6_tunnel: fix possible use-after-free on xmit
	ipip: validate header length in ipip_tunnel_xmit
	mlxsw: spectrum: Fix error path in mlxsw_sp_module_init()
	mvpp2: fix panic on module removal
	mvpp2: refactor MTU change code
	net: bridge: delete local fdb on device init failure
	net: bridge: mcast: don't delete permanent entries when fast leave is enabled
	net: fix ifindex collision during namespace removal
	net/mlx5e: always initialize frag->last_in_page
	net/mlx5: Use reversed order when unregister devices
	net: phylink: Fix flow control for fixed-link
	net: qualcomm: rmnet: Fix incorrect UL checksum offload logic
	net: sched: Fix a possible null-pointer dereference in dequeue_func()
	net sched: update vlan action for batched events operations
	net: sched: use temporary variable for actions indexes
	net/smc: do not schedule tx_work in SMC_CLOSED state
	NFC: nfcmrvl: fix gpio-handling regression
	ocelot: Cancel delayed work before wq destruction
	tipc: compat: allow tipc commands without arguments
	tun: mark small packets as owned by the tap sock
	net/mlx5: Fix modify_cq_in alignment
	net/mlx5e: Prevent encap flow counter update async to user query
	r8169: don't use MSI before RTL8168d
	compat_ioctl: pppoe: fix PPPOEIOCSFWD handling
	cgroup: Call cgroup_release() before __exit_signal()
	cgroup: Implement css_task_iter_skip()
	cgroup: Include dying leaders with live threads in PROCS iterations
	cgroup: css_task_iter_skip()'d iterators must be advanced before accessed
	cgroup: Fix css_task_iter_advance_css_set() cset skip condition
	spi: bcm2835: Fix 3-wire mode if DMA is enabled
	Linux 4.19.66

Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
Change-Id: I58f1b77149c4f3285db3e64c05240080b7425ae4
parents 03d5ba40 893af1c7
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
# SPDX-License-Identifier: GPL-2.0
VERSION = 4
VERSION = 4
PATCHLEVEL = 19
PATCHLEVEL = 19
SUBLEVEL = 65
SUBLEVEL = 66
EXTRAVERSION =
EXTRAVERSION =
NAME = "People's Front"
NAME = "People's Front"


+6 −2
Original line number Original line Diff line number Diff line
@@ -63,6 +63,7 @@
#include <asm/byteorder.h>  
#include <asm/byteorder.h>  
#include <linux/vmalloc.h>
#include <linux/vmalloc.h>
#include <linux/jiffies.h>
#include <linux/jiffies.h>
#include <linux/nospec.h>
#include "iphase.h"		  
#include "iphase.h"		  
#include "suni.h"		  
#include "suni.h"		  
#define swap_byte_order(x) (((x & 0xff) << 8) | ((x & 0xff00) >> 8))
#define swap_byte_order(x) (((x & 0xff) << 8) | ((x & 0xff00) >> 8))
@@ -2760,8 +2761,11 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg)
   }
   }
   if (copy_from_user(&ia_cmds, arg, sizeof ia_cmds)) return -EFAULT; 
   if (copy_from_user(&ia_cmds, arg, sizeof ia_cmds)) return -EFAULT; 
   board = ia_cmds.status;
   board = ia_cmds.status;

	if ((board < 0) || (board > iadev_count))
	if ((board < 0) || (board > iadev_count))
		board = 0;
		board = 0;
	board = array_index_nospec(board, iadev_count + 1);

   iadev = ia_dev[board];
   iadev = ia_dev[board];
   switch (ia_cmds.cmd) {
   switch (ia_cmds.cmd) {
   case MEMDUMP:
   case MEMDUMP:
+4 −0
Original line number Original line Diff line number Diff line
@@ -66,6 +66,9 @@ struct driver_private {
 *	probed first.
 *	probed first.
 * @device - pointer back to the struct device that this structure is
 * @device - pointer back to the struct device that this structure is
 * associated with.
 * associated with.
 * @dead - This device is currently either in the process of or has been
 *	removed from the system. Any asynchronous events scheduled for this
 *	device should exit without taking any action.
 *
 *
 * Nothing outside of the driver core should ever touch these fields.
 * Nothing outside of the driver core should ever touch these fields.
 */
 */
@@ -76,6 +79,7 @@ struct device_private {
	struct klist_node knode_bus;
	struct klist_node knode_bus;
	struct list_head deferred_probe;
	struct list_head deferred_probe;
	struct device *device;
	struct device *device;
	u8 dead:1;
};
};
#define to_device_private_parent(obj)	\
#define to_device_private_parent(obj)	\
	container_of(obj, struct device_private, knode_parent)
	container_of(obj, struct device_private, knode_parent)
+22 −0
Original line number Original line Diff line number Diff line
@@ -2031,6 +2031,24 @@ void put_device(struct device *dev)
}
}
EXPORT_SYMBOL_GPL(put_device);
EXPORT_SYMBOL_GPL(put_device);


bool kill_device(struct device *dev)
{
	/*
	 * Require the device lock and set the "dead" flag to guarantee that
	 * the update behavior is consistent with the other bitfields near
	 * it and that we cannot have an asynchronous probe routine trying
	 * to run while we are tearing out the bus/class/sysfs from
	 * underneath the device.
	 */
	lockdep_assert_held(&dev->mutex);

	if (dev->p->dead)
		return false;
	dev->p->dead = true;
	return true;
}
EXPORT_SYMBOL_GPL(kill_device);

/**
/**
 * device_del - delete device from system.
 * device_del - delete device from system.
 * @dev: device.
 * @dev: device.
@@ -2050,6 +2068,10 @@ void device_del(struct device *dev)
	struct kobject *glue_dir = NULL;
	struct kobject *glue_dir = NULL;
	struct class_interface *class_intf;
	struct class_interface *class_intf;


	device_lock(dev);
	kill_device(dev);
	device_unlock(dev);

	/* Notify clients of device removal.  This call must come
	/* Notify clients of device removal.  This call must come
	 * before dpm_sysfs_remove().
	 * before dpm_sysfs_remove().
	 */
	 */
+11 −11
Original line number Original line Diff line number Diff line
@@ -725,15 +725,6 @@ static int __device_attach_driver(struct device_driver *drv, void *_data)
	bool async_allowed;
	bool async_allowed;
	int ret;
	int ret;


	/*
	 * Check if device has already been claimed. This may
	 * happen with driver loading, device discovery/registration,
	 * and deferred probe processing happens all at once with
	 * multiple threads.
	 */
	if (dev->driver)
		return -EBUSY;

	ret = driver_match_device(drv, dev);
	ret = driver_match_device(drv, dev);
	if (ret == 0) {
	if (ret == 0) {
		/* no match */
		/* no match */
@@ -768,6 +759,15 @@ static void __device_attach_async_helper(void *_dev, async_cookie_t cookie)


	device_lock(dev);
	device_lock(dev);


	/*
	 * Check if device has already been removed or claimed. This may
	 * happen with driver loading, device discovery/registration,
	 * and deferred probe processing happens all at once with
	 * multiple threads.
	 */
	if (dev->p->dead || dev->driver)
		goto out_unlock;

	if (dev->parent)
	if (dev->parent)
		pm_runtime_get_sync(dev->parent);
		pm_runtime_get_sync(dev->parent);


@@ -778,7 +778,7 @@ static void __device_attach_async_helper(void *_dev, async_cookie_t cookie)


	if (dev->parent)
	if (dev->parent)
		pm_runtime_put(dev->parent);
		pm_runtime_put(dev->parent);

out_unlock:
	device_unlock(dev);
	device_unlock(dev);


	put_device(dev);
	put_device(dev);
@@ -891,7 +891,7 @@ static int __driver_attach(struct device *dev, void *data)
	if (dev->parent && dev->bus->need_parent_lock)
	if (dev->parent && dev->bus->need_parent_lock)
		device_lock(dev->parent);
		device_lock(dev->parent);
	device_lock(dev);
	device_lock(dev);
	if (!dev->driver)
	if (!dev->p->dead && !dev->driver)
		driver_probe_device(drv, dev);
		driver_probe_device(drv, dev);
	device_unlock(dev);
	device_unlock(dev);
	if (dev->parent && dev->bus->need_parent_lock)
	if (dev->parent && dev->bus->need_parent_lock)
Loading