Linux 5.4.105
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
I'm announcing the release of the 5.4.105 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 drivers/acpi/acpica/acobject.h | 1 drivers/acpi/acpica/evhandler.c | 7 + drivers/acpi/acpica/evregion.c | 64 +++++++--- drivers/acpi/acpica/evxfregn.c | 2 drivers/acpi/video_detect.c | 7 + drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 2 drivers/hid/hid-ids.h | 3 drivers/hid/hid-mf.c | 2 drivers/hid/hid-quirks.c | 2 drivers/hid/i2c-hid/i2c-hid-core.c | 2 drivers/iommu/amd_iommu.c | 10 - drivers/md/dm-table.c | 174 +++++++++++----------------- drivers/md/dm.c | 2 drivers/md/dm.h | 2 drivers/media/pci/cx23885/cx23885-core.c | 4 drivers/misc/eeprom/eeprom_93xx46.c | 15 ++ drivers/mmc/host/sdhci-of-dwcmshc.c | 1 drivers/net/wireless/marvell/mwifiex/pcie.c | 18 ++ drivers/net/wireless/marvell/mwifiex/pcie.h | 2 drivers/nvme/host/pci.c | 6 drivers/pci/quirks.c | 3 drivers/platform/x86/acer-wmi.c | 169 ++++++++++++++++++++++----- include/linux/eeprom_93xx46.h | 2 net/dsa/Kconfig | 1 net/dsa/dsa.c | 2 net/dsa/dsa_priv.h | 3 net/dsa/slave.c | 10 + sound/soc/intel/boards/bytcr_rt5640.c | 12 + 29 files changed, 370 insertions(+), 160 deletions(-)
Alexander Lobakin (1):
net: dsa: add GRO support via gro_cells
Andrey Ryabinin (1):
iommu/amd: Fix sleeping in atomic in increase_address_space()
AngeloGioacchino Del Regno (1):
drm/msm/a5xx: Remove overwriting A5XX_PC_DBG_ECO_CNTL register
Aswath Govindraju (1):
misc: eeprom_93xx46: Add quirk to support Microchip 93LC46B eeprom
Bjorn Helgaas (1):
PCI: Add function 1 DMA alias quirk for Marvell 9215 SATA controller
Chris Chiu (1):
ASoC: Intel: bytcr_rt5640: Add quirk for ARCHOS Cesium 140
Daniel Lee Kruse (1):
media: cx23885: add more quirks for reset DMA on some AMD IOMMU
Ethan Warth (1):
HID: mf: add support for 0079:1846 Mayflash/Dragonrise USB Gamecube Adapter
Greg Kroah-Hartman (1):
Linux 5.4.105
Hans de Goede (8):
ACPICA: Fix race in generic_serial_bus (I2C) and GPIO op_region parameter handling platform/x86: acer-wmi: Cleanup ACER_CAP_FOO defines
platform/x86: acer-wmi: Cleanup accelerometer device handling platform/x86: acer-wmi: Add new force_caps module parameter platform/x86: acer-wmi: Add ACER_CAP_SET_FUNCTION_MODE capability flag platform/x86: acer-wmi: Add support for SW_TABLET_MODE on Switch devices platform/x86: acer-wmi: Add ACER_CAP_KBD_DOCK quirk for the Aspire Switch 10E SW3-016
HID: i2c-hid: Add I2C_HID_QUIRK_NO_IRQ_AFTER_RESET for ITE8568 EC on Voyo Winpad A15
Jasper St. Pierre (1):
ACPI: video: Add DMI quirk for GIGABYTE GB-BXBT-2807
Jeffle Xu (3):
dm table: fix iterate_devices based device capability checks dm table: fix DAX iterate_devices based device capability checks dm table: fix zoned iterate_devices based device capability checks
Jisheng Zhang (1):
mmc: sdhci-of-dwcmshc: set SDHCI_QUIRK2_PRESET_VALUE_BROKEN
Julian Einwag (1):
nvme-pci: mark Seagate Nytro XM1440 as QUIRK_NO_NS_DESC_LIST.
Pascal Terjan (1):
nvme-pci: add quirks for Lexar 256GB SSD
Tsuchiya Yuto (1):
mwifiex: pcie: skip cancel_work_sync() on reset failure path
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 104 +SUBLEVEL = 105 EXTRAVERSION = NAME = Kleptomaniac Octopus
drivers/acpi/acpica/acobject.h +1 -0
@@ -283,6 +283,7 @@ struct acpi_object_addr_handler {acpi_adr_space_handler handler;struct acpi_namespace_node *node;/* Parent device */ void *context; +acpi_mutex context_mutex;acpi_adr_space_setup setup;union acpi_operand_object *region_list;/* Regions using this handler */ union acpi_operand_object *next;
drivers/acpi/acpica/evhandler.c +7 -0
@@ -489,6 +489,13 @@ acpi_ev_install_space_handler(struct acpi_namespace_node *node,/* Init handler obj */ + status = +acpi_os_create_mutex (&handler_obj->address_space.context_mutex); +if (ACPI_FAILURE (status)) { +acpi_ut_remove_reference (handler_obj); + goto unlock_and_exit; + } + handler_obj->address_space.space_id = (u8 )space_id; handler_obj->address_space.handler_flags = flags; handler_obj->address_space.region_list =NULL ;
drivers/acpi/acpica/evregion.c +47 -17
117 lines not on this page · raw message
drivers/acpi/acpica/evxfregn.c +2 -0
@@ -201,6 +201,8 @@ acpi_remove_address_space_handler(acpi_handle device,/* Now we can delete the handler object */ +acpi_os_release_mutex (handler_obj->address_space. + context_mutex);acpi_ut_remove_reference (handler_obj); goto unlock_and_exit; }
drivers/acpi/video_detect.c +7 -0
@@ -143,6 +143,13 @@ static const struct dmi_system_id video_detect_dmi_table[] = { }, { .callback = video_detect_force_vendor, + .ident = "GIGABYTE GB-BXBT-2807", + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"GIGABYTE" ), + DMI_MATCH(DMI_PRODUCT_NAME, "GB-BXBT-2807"), + }, + }, + { .ident ="Sony VPCEH3U1E" , .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +0 -2
@@ -581,8 +581,6 @@ static int a5xx_hw_init(struct msm_gpu *gpu)if (adreno_gpu->info->quirks &ADRENO_QUIRK_TWO_PASS_USE_WFI )gpu_rmw (gpu,REG_A5XX_PC_DBG_ECO_CNTL ,0 , (1 <<8 )); -gpu_write (gpu,REG_A5XX_PC_DBG_ECO_CNTL ,0xc0200100 ); -/* Enable USE_RETENTION_FLOPS */ gpu_write (gpu,REG_A5XX_CP_CHICKEN_DBG ,0x02000000 );
drivers/hid/hid-ids.h +3 -0
@@ -365,6 +365,7 @@#define USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR 0x1803#define USB_DEVICE_ID_DRAGONRISE_GAMECUBE1 0x1843#define USB_DEVICE_ID_DRAGONRISE_GAMECUBE2 0x1844 +#define USB_DEVICE_ID_DRAGONRISE_GAMECUBE3 0x1846#define USB_VENDOR_ID_DWAV 0x0eef#define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER 0x0001
@@ -640,6 +641,8 @@#define USB_DEVICE_ID_INNEX_GENESIS_ATARI 0x4745#define USB_VENDOR_ID_ITE 0x048d +#define I2C_VENDOR_ID_ITE 0x103c +#define I2C_DEVICE_ID_ITE_VOYO_WINPAD_A15 0x184f#define USB_DEVICE_ID_ITE_LENOVO_YOGA 0x8386#define USB_DEVICE_ID_ITE_LENOVO_YOGA2 0x8350#define I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720 0x837a
drivers/hid/hid-mf.c +2 -0
@@ -153,6 +153,8 @@ static const struct hid_device_id mf_devices[] = { .driver_data = HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE2), .driver_data = 0 }, /* No quirk required */ + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE3), + .driver_data = HID_QUIRK_MULTI_INPUT }, { } };MODULE_DEVICE_TABLE (hid, mf_devices);
drivers/hid/hid-quirks.c +2 -0
@@ -72,6 +72,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_REDRAGON_SEYMUR2), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1), HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE3), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER), HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET },
@@ -491,6 +492,7 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR) }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1) }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE3) }, #endif #if IS_ENABLED(CONFIG_HID_MICROSOFT) { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500) },
drivers/hid/i2c-hid/i2c-hid-core.c +2 -0
@@ -173,6 +173,8 @@ static const struct i2c_hid_quirks { I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV }, {I2C_VENDOR_ID_HANTICK ,I2C_PRODUCT_ID_HANTICK_5288 , I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, + { I2C_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_VOYO_WINPAD_A15, + I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, { I2C_VENDOR_ID_RAYDIUM, I2C_PRODUCT_ID_RAYDIUM_3118, I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, { USB_VENDOR_ID_ELAN, HID_ANY_ID,
drivers/iommu/amd_iommu.c +6 -4
@@ -1469,25 +1469,27 @@ static bool increase_address_space(struct protection_domain *domain,bool ret = false;u64 *pte; + pte = (void *)get_zeroed_page (gfp); +if (!pte) +return false; +spin_lock_irqsave (&domain->lock, flags);if (address <=PM_LEVEL_SIZE (domain->mode) ||WARN_ON_ONCE (domain->mode ==PAGE_MODE_6_LEVEL )) goto out; - pte = (void *)get_zeroed_page (gfp); -if (!pte) - goto out; - *pte =PM_LEVEL_PDE (domain->mode,iommu_virt_to_phys (domain->pt_root)); domain->pt_root = pte; domain->mode +=1 ; + pte =NULL ; ret = true; out:spin_unlock_irqrestore (&domain->lock, flags); +free_page ((unsigned long )pte);return ret; }
drivers/md/dm-table.c +73 -101
302 lines not on this page · raw message
drivers/md/dm.c +1 -1
@@ -1139,7 +1139,7 @@ static bool dm_dax_supported(struct dax_device *dax_dev, struct block_device *bdif (!map) goto out; - ret =dm_table_supports_dax (map, device_supports_dax, &blocksize); + ret =dm_table_supports_dax (map, device_not_dax_capable, &blocksize); out:dm_put_live_table (md, srcu_idx);
drivers/md/dm.h +1 -1
@@ -74,7 +74,7 @@ void dm_table_free_md_mempools(struct dm_table *t);struct dm_md_mempools *dm_table_get_md_mempools (struct dm_table *t);bool dm_table_supports_dax (struct dm_table *t,iterate_devices_callout_fn fn,int *blocksize); -int device_supports_dax (struct dm_target *ti,struct dm_dev *dev, +int device_not_dax_capable (struct dm_target *ti,struct dm_dev *dev,sector_t start,sector_t len,void *data);void dm_lock_md_type (struct mapped_device *md);
drivers/media/pci/cx23885/cx23885-core.c +4 -0
@@ -2074,6 +2074,10 @@ static struct {* 0x1451 is PCI ID for the IOMMU found on Ryzen */ { PCI_VENDOR_ID_AMD, 0x1451 }, +/* According to sudo lspci -nn, +* 0x1423 is the PCI ID for the IOMMU found on Kaveri +*/ + { PCI_VENDOR_ID_AMD, 0x1423 }, };static bool cx23885_does_need_dma_reset (void )
drivers/misc/eeprom/eeprom_93xx46.c +15 -0
@@ -35,6 +35,10 @@ static const struct eeprom_93xx46_devtype_data atmel_at93c46d_data = { EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH, }; +static const struct eeprom_93xx46_devtype_data microchip_93lc46b_data = { + .quirks =EEPROM_93XX46_QUIRK_EXTRA_READ_CYCLE , +}; +struct eeprom_93xx46_dev {struct spi_device *spi;struct eeprom_93xx46_platform_data *pdata;
@@ -55,6 +59,11 @@ static inline bool has_quirk_instruction_length(struct eeprom_93xx46_dev *edev)return edev->pdata->quirks &EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH ; } +static inline bool has_quirk_extra_read_cycle (struct eeprom_93xx46_dev *edev) +{ +return edev->pdata->quirks &EEPROM_93XX46_QUIRK_EXTRA_READ_CYCLE ; +} +static int eeprom_93xx46_read (void *priv,unsigned int off,void *val,size_t count) {
@@ -96,6 +105,11 @@ static int eeprom_93xx46_read(void *priv, unsigned int off,dev_dbg (&edev->spi->dev,"read cmd 0x%x, %d Hz\n" , cmd_addr, edev->spi->max_speed_hz); +if (has_quirk_extra_read_cycle (edev)) { + cmd_addr <<=1 ; + bits +=1 ; + } +spi_message_init (&m); t[0 ].tx_buf = (char *)&cmd_addr;
@@ -363,6 +377,7 @@ static void select_deassert(void *context)static const struct of_device_id eeprom_93xx46_of_table[] = { { .compatible ="eeprom-93xx46" , }, { .compatible ="atmel,at93c46d" , .data = &atmel_at93c46d_data, }, + { .compatible ="microchip,93lc46b" , .data = µchip_93lc46b_data, }, {} };MODULE_DEVICE_TABLE (of, eeprom_93xx46_of_table);
drivers/mmc/host/sdhci-of-dwcmshc.c +1 -0
@@ -58,6 +58,7 @@ static const struct sdhci_ops sdhci_dwcmshc_ops = {static const struct sdhci_pltfm_data sdhci_dwcmshc_pdata = { .ops = &sdhci_dwcmshc_ops, .quirks =SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN , + .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN , };static int dwcmshc_probe (struct platform_device *pdev)
drivers/net/wireless/marvell/mwifiex/pcie.c +17 -1
@@ -377,6 +377,8 @@ static void mwifiex_pcie_reset_prepare(struct pci_dev *pdev)clear_bit (MWIFIEX_IFACE_WORK_DEVICE_DUMP , &card->work_flags);clear_bit (MWIFIEX_IFACE_WORK_CARD_RESET , &card->work_flags);mwifiex_dbg (adapter,INFO ,"%s, successful\n" , __func__); + + card->pci_reset_ongoing = true; }/*
@@ -405,6 +407,8 @@ static void mwifiex_pcie_reset_done(struct pci_dev *pdev)dev_err (&pdev->dev,"reinit failed: %d\n" , ret); else mwifiex_dbg(adapter, INFO, "%s, successful\n", __func__); + + card->pci_reset_ongoing = false; }static const struct pci_error_handlers mwifiex_pcie_err_handler = {
@@ -2995,7 +2999,19 @@ static void mwifiex_cleanup_pcie(struct mwifiex_adapter *adapter)int ret;u32 fw_status; -cancel_work_sync (&card->work); +/* Perform the cancel_work_sync() only when we're not resetting +* the card. It's because that function never returns if we're +* in reset path. If we're here when resetting the card, it means +* that we failed to reset the card (reset failure path). +*/ +if (!card->pci_reset_ongoing) { +mwifiex_dbg (adapter,MSG ,"performing cancel_work_sync()...\n" ); +cancel_work_sync (&card->work); +mwifiex_dbg (adapter,MSG ,"cancel_work_sync() done\n" ); + }else { +mwifiex_dbg (adapter,MSG , +"skipped cancel_work_sync() because we're in card reset failure path\n" ); + } ret =mwifiex_read_reg (adapter, reg->fw_status, &fw_status);if (fw_status ==FIRMWARE_READY_PCIE ) {
drivers/net/wireless/marvell/mwifiex/pcie.h +2 -0
@@ -391,6 +391,8 @@ struct pcie_service_card {struct mwifiex_msix_context share_irq_ctx;struct work_struct work;unsigned long work_flags; + +bool pci_reset_ongoing; }; static inline int
drivers/nvme/host/pci.c +5 -1
@@ -3164,7 +3164,8 @@ static const struct pci_device_id nvme_id_table[] = { { PCI_DEVICE(0x126f, 0x2263), /* Silicon Motion unidentified */ .driver_data = NVME_QUIRK_NO_NS_DESC_LIST, }, { PCI_DEVICE(0x1bb1, 0x0100), /* Seagate Nytro Flash Storage */ - .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, + .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY | + NVME_QUIRK_NO_NS_DESC_LIST, }, { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, { PCI_DEVICE(0x1c58, 0x0023), /* WDC SN200 adapter */
@@ -3178,6 +3179,9 @@ static const struct pci_device_id nvme_id_table[] = { NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE(0x1987, 0x5016), /* Phison E16 */ .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, }, + { PCI_DEVICE(0x1b4b, 0x1092), /* Lexar 256 GB SSD */ + .driver_data = NVME_QUIRK_NO_NS_DESC_LIST | + NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE(0x1d1d, 0x1f1f), /* LighNVM qemu device */ .driver_data = NVME_QUIRK_LIGHTNVM, }, { PCI_DEVICE(0x1d1d, 0x2807), /* CNEX WL */
drivers/pci/quirks.c +3 -0
@@ -4055,6 +4055,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9183,/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c46 */ DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_MARVELL_EXT ,0x91a0 , quirk_dma_func1_alias); +/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c135 */ +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_MARVELL_EXT ,0x9215 , + quirk_dma_func1_alias);/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c127 */ DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_MARVELL_EXT ,0x9220 , quirk_dma_func1_alias);
drivers/platform/x86/acer-wmi.c +140 -29
302 lines not on this page · raw message
include/linux/eeprom_93xx46.h +2 -0
@@ -16,6 +16,8 @@ struct eeprom_93xx46_platform_data {#define EEPROM_93XX46_QUIRK_SINGLE_WORD_READ (1 << 0)/* Instructions such as EWEN are (addrlen + 2) in length. */ #define EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH (1 << 1) +/* Add extra cycle after address during a read */ +#define EEPROM_93XX46_QUIRK_EXTRA_READ_CYCLE BIT(2)/* * optional hooks to control additional logic
net/dsa/Kconfig +1 -0
@@ -9,6 +9,7 @@ menuconfig NET_DSA tristate "Distributed Switch Architecture" depends on HAVE_NET_DSA depends on BRIDGE || BRIDGE=n + select GRO_CELLS select NET_SWITCHDEV select PHYLINK select NET_DEVLINK
net/dsa/dsa.c +1 -1
@@ -238,7 +238,7 @@ static int dsa_switch_rcv(struct sk_buff *skb, struct net_device *dev,if (dsa_skb_defer_rx_timestamp (p, skb))return 0 ; -netif_receive_skb (skb); +gro_cells_receive (&p->gcells, skb);return 0 ; }
net/dsa/dsa_priv.h +3 -0
@@ -11,6 +11,7 @@#include <linux/netdevice.h> #include <linux/netpoll.h> #include <net/dsa.h> +#include <net/gro_cells.h> enum {DSA_NOTIFIER_AGEING_TIME ,
@@ -68,6 +69,8 @@ struct dsa_slave_priv {struct pcpu_sw_netstats *stats64; +struct gro_cells gcells; +/* DSA port data, such as switch, port index, etc. */ struct dsa_port *dp;
net/dsa/slave.c +9 -1
@@ -1431,6 +1431,11 @@ int dsa_slave_create(struct dsa_port *port)free_netdev (slave_dev);return -ENOMEM ; } + + ret =gro_cells_init (&p->gcells, slave_dev); +if (ret) + goto out_free; + p->dp = port;INIT_LIST_HEAD (&p->mall_tc_list);INIT_WORK (&port->xmit_work, dsa_port_xmit_work);
@@ -1443,7 +1448,7 @@ int dsa_slave_create(struct dsa_port *port) ret =dsa_slave_phy_setup (slave_dev);if (ret) {netdev_err (master,"error %d setting up slave phy\n" , ret); - goto out_free; + goto out_gcells; }dsa_slave_notify (slave_dev,DSA_PORT_REGISTER );
@@ -1462,6 +1467,8 @@ int dsa_slave_create(struct dsa_port *port)phylink_disconnect_phy (p->dp->pl);rtnl_unlock ();phylink_destroy (p->dp->pl); +out_gcells: +gro_cells_destroy (&p->gcells); out_free:free_percpu (p->stats64);free_netdev (slave_dev);
@@ -1482,6 +1489,7 @@ void dsa_slave_destroy(struct net_device *slave_dev)dsa_slave_notify (slave_dev,DSA_PORT_UNREGISTER );unregister_netdev (slave_dev);phylink_destroy (dp->pl); +gro_cells_destroy (&p->gcells);free_percpu (p->stats64);free_netdev (slave_dev); }
sound/soc/intel/boards/bytcr_rt5640.c +12 -0
@@ -435,6 +435,18 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {BYT_RT5640_SSP0_AIF1 | BYT_RT5640_MCLK_EN), }, + { + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"ARCHOS" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ARCHOS 140 CESIUM"), + }, + .driver_data = (void *)(BYT_RT5640_IN1_MAP | +BYT_RT5640_JD_SRC_JD2_IN4N | +BYT_RT5640_OVCD_TH_2000UA | +BYT_RT5640_OVCD_SF_0P75 | +BYT_RT5640_SSP0_AIF1 | + BYT_RT5640_MCLK_EN), + }, { .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),