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

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

Merge 4.19.305 into android-4.19-stable



Changes in 4.19.305
	nfc: llcp_core: Hold a ref to llcp_local->dev when holding a ref to llcp_local
	i40e: Fix filter input checks to prevent config with invalid values
	net: sched: em_text: fix possible memory leak in em_text_destroy()
	ARM: sun9i: smp: Fix array-index-out-of-bounds read in sunxi_mc_smp_init
	net: bcmgenet: Fix FCS generation for fragmented skbuffs
	net: Save and restore msg_namelen in sock_sendmsg
	i40e: fix use-after-free in i40e_aqc_add_filters()
	i40e: Restore VF MSI-X state during PCI reset
	net/qla3xxx: switch from 'pci_' to 'dma_' API
	net/qla3xxx: fix potential memleak in ql_alloc_buffer_queues
	asix: Add check for usbnet_get_endpoints
	bnxt_en: Remove mis-applied code from bnxt_cfg_ntp_filters()
	mm/memory-failure: check the mapcount of the precise page
	firewire: ohci: suppress unexpected system reboot in AMD Ryzen machines and ASM108x/VT630x PCIe cards
	mm: fix unmap_mapping_range high bits shift bug
	mmc: rpmb: fixes pause retune on all RPMB partitions.
	mmc: core: Cancel delayed work before releasing host
	fuse: nlookup missing decrement in fuse_direntplus_link
	netfilter: nf_tables: Reject tables of unsupported family
	PCI: Extract ATS disabling to a helper function
	PCI: Disable ATS for specific Intel IPU E2000 devices
	net: add a route cache full diagnostic message
	net/dst: use a smaller percpu_counter batch for dst entries accounting
	ipv6: make ip6_rt_gc_expire an atomic_t
	ipv6: remove max_size check inline with ipv4
	Linux 4.19.305

Change-Id: Idf89ecb57f78ee64046775110bcc887d081d1862
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parents 782f2a2a abc2dd6a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
VERSION = 4
PATCHLEVEL = 19
SUBLEVEL = 304
SUBLEVEL = 305
EXTRAVERSION =
NAME = "People's Front"

+2 −2
Original line number Diff line number Diff line
@@ -805,12 +805,12 @@ static int __init sunxi_mc_smp_init(void)
			break;
	}

	is_a83t = sunxi_mc_smp_data[i].is_a83t;

	of_node_put(node);
	if (ret)
		return -ENODEV;

	is_a83t = sunxi_mc_smp_data[i].is_a83t;

	if (!sunxi_mc_smp_cpu_table_init())
		return -EINVAL;

+51 −0
Original line number Diff line number Diff line
@@ -292,6 +292,51 @@ static char ohci_driver_name[] = KBUILD_MODNAME;
#define QUIRK_TI_SLLZ059		0x20
#define QUIRK_IR_WAKE			0x40

// On PCI Express Root Complex in any type of AMD Ryzen machine, VIA VT6306/6307/6308 with Asmedia
// ASM1083/1085 brings an inconvenience that the read accesses to 'Isochronous Cycle Timer' register
// (at offset 0xf0 in PCI I/O space) often causes unexpected system reboot. The mechanism is not
// clear, since the read access to the other registers is enough safe; e.g. 'Node ID' register,
// while it is probable due to detection of any type of PCIe error.
#define QUIRK_REBOOT_BY_CYCLE_TIMER_READ	0x80000000

#if IS_ENABLED(CONFIG_X86)

static bool has_reboot_by_cycle_timer_read_quirk(const struct fw_ohci *ohci)
{
	return !!(ohci->quirks & QUIRK_REBOOT_BY_CYCLE_TIMER_READ);
}

#define PCI_DEVICE_ID_ASMEDIA_ASM108X	0x1080

static bool detect_vt630x_with_asm1083_on_amd_ryzen_machine(const struct pci_dev *pdev)
{
	const struct pci_dev *pcie_to_pci_bridge;

	// Detect any type of AMD Ryzen machine.
	if (!static_cpu_has(X86_FEATURE_ZEN))
		return false;

	// Detect VIA VT6306/6307/6308.
	if (pdev->vendor != PCI_VENDOR_ID_VIA)
		return false;
	if (pdev->device != PCI_DEVICE_ID_VIA_VT630X)
		return false;

	// Detect Asmedia ASM1083/1085.
	pcie_to_pci_bridge = pdev->bus->self;
	if (pcie_to_pci_bridge->vendor != PCI_VENDOR_ID_ASMEDIA)
		return false;
	if (pcie_to_pci_bridge->device != PCI_DEVICE_ID_ASMEDIA_ASM108X)
		return false;

	return true;
}

#else
#define has_reboot_by_cycle_timer_read_quirk(ohci) false
#define detect_vt630x_with_asm1083_on_amd_ryzen_machine(pdev)	false
#endif

/* In case of multiple matches in ohci_quirks[], only the first one is used. */
static const struct {
	unsigned short vendor, device, revision, flags;
@@ -1730,6 +1775,9 @@ static u32 get_cycle_time(struct fw_ohci *ohci)
	s32 diff01, diff12;
	int i;

	if (has_reboot_by_cycle_timer_read_quirk(ohci))
		return 0;

	c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);

	if (ohci->quirks & QUIRK_CYCLE_TIMER) {
@@ -3633,6 +3681,9 @@ static int pci_probe(struct pci_dev *dev,
	if (param_quirks)
		ohci->quirks = param_quirks;

	if (detect_vt630x_with_asm1083_on_amd_ryzen_machine(dev))
		ohci->quirks |= QUIRK_REBOOT_BY_CYCLE_TIMER_READ;

	/*
	 * Because dma_alloc_coherent() allocates at least one page,
	 * we save space by using a common buffer for the AR request/
+4 −3
Original line number Diff line number Diff line
@@ -852,9 +852,10 @@ static const struct block_device_operations mmc_bdops = {
static int mmc_blk_part_switch_pre(struct mmc_card *card,
				   unsigned int part_type)
{
	const unsigned int mask = EXT_CSD_PART_CONFIG_ACC_RPMB;
	int ret = 0;

	if (part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) {
	if ((part_type & mask) == mask) {
		if (card->ext_csd.cmdq_en) {
			ret = mmc_cmdq_disable(card);
			if (ret)
@@ -869,9 +870,10 @@ static int mmc_blk_part_switch_pre(struct mmc_card *card,
static int mmc_blk_part_switch_post(struct mmc_card *card,
				    unsigned int part_type)
{
	const unsigned int mask = EXT_CSD_PART_CONFIG_ACC_RPMB;
	int ret = 0;

	if (part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) {
	if ((part_type & mask) == mask) {
		mmc_retune_unpause(card->host);
		if (card->reenable_cmdq && !card->ext_csd.cmdq_en)
			ret = mmc_cmdq_enable(card);
@@ -3105,4 +3107,3 @@ module_exit(mmc_blk_exit);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Multimedia Card (MMC) block device driver");
+1 −0
Original line number Diff line number Diff line
@@ -492,6 +492,7 @@ EXPORT_SYMBOL(mmc_remove_host);
 */
void mmc_free_host(struct mmc_host *host)
{
	cancel_delayed_work_sync(&host->detect);
	mmc_crypto_free_host(host);
	mmc_pwrseq_free(host);
	put_device(&host->class_dev);
Loading