Linux 5.6.17
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.6.17 kernel.
All users of the 5.6 kernel series must upgrade.
The updated 5.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.6.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 - arch/arc/kernel/setup.c | 5 +- arch/arc/plat-eznps/Kconfig | 1 arch/riscv/mm/init.c | 2 - arch/s390/mm/hugetlbpage.c | 9 +++- arch/x86/hyperv/hv_init.c | 19 ++++++++- arch/x86/include/asm/pgtable.h | 1 arch/x86/include/uapi/asm/unistd.h | 11 ++++- arch/x86/mm/mmio-mod.c | 4 +- crypto/algapi.c | 22 ++++++++--- crypto/api.c | 3 + crypto/internal.h | 1 drivers/block/null_blk_zoned.c | 4 ++ drivers/dma/ti/k3-udma.c | 6 ++- drivers/firmware/efi/earlycon.c | 14 ++++--- drivers/firmware/efi/libstub/arm-stub.c | 6 ++- drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 27 +++++++++++++ drivers/gpu/drm/drm_edid.c | 3 + drivers/hid/hid-multitouch.c | 26 +++++++++++++ drivers/hid/hid-sony.c | 17 ++++++++ drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c | 8 ++++ drivers/i2c/busses/i2c-altera.c | 10 ++++- drivers/net/can/ifi_canfd/ifi_canfd.c | 5 ++ drivers/net/can/sun4i_can.c | 2 - drivers/net/dsa/b53/b53_srab.c | 2 - drivers/net/dsa/mt7530.c | 11 ++++- drivers/net/dsa/mt7530.h | 6 +++ drivers/net/ethernet/apple/bmac.c | 2 - drivers/net/ethernet/freescale/ucc_geth.c | 13 +++--- drivers/net/ethernet/marvell/pxa168_eth.c | 2 - drivers/net/ethernet/smsc/smsc911x.c | 9 ++-- drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 13 ++++++ drivers/net/ethernet/ti/cpsw_ale.c | 2 - drivers/net/ethernet/ti/cpsw_priv.c | 4 +- drivers/net/ethernet/ti/netcp_ethss.c | 4 +- drivers/net/phy/phy_device.c | 4 +- drivers/net/wireless/cisco/airo.c | 12 ++++++ drivers/net/wireless/intersil/p54/p54usb.c | 1 drivers/net/wireless/mediatek/mt76/mt76x02.h | 1 drivers/net/wireless/mediatek/mt76/mt76x2/usb.c | 1 drivers/scsi/scsi_pm.c | 10 ++++- drivers/staging/media/ipu3/include/intel-ipu3.h | 7 ++- fs/io_uring.c | 28 +++++++++----- include/uapi/linux/mmc/ioctl.h | 1 kernel/cgroup/rstat.c | 16 +------- kernel/relay.c | 5 ++ mm/mremap.c | 2 - security/integrity/evm/evm_crypto.c | 2 - security/integrity/evm/evm_main.c | 4 +- security/integrity/evm/evm_secfs.c | 9 ++++ tools/arch/x86/include/uapi/asm/unistd.h | 2 - tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh | 2 - tools/testing/selftests/wireguard/qemu/Makefile | 2 - 53 files changed, 293 insertions(+), 92 deletions(-)
Amit Cohen (1):
selftests: mlxsw: qos_mc_aware: Specify arping timeout as an integer
Andy Lutomirski (1):
x86/syscalls: Revert "x86/syscalls: Make __X32_SYSCALL_BIT be unsigned long"
Atsushi Nemoto (1):
i2c: altera: Fix race between xfer_msg and isr thread
Benjamin Tissoires (1):
HID: multitouch: enable multi-input as a quirk for some devices
Can Guo (1):
scsi: pm: Balance pm_only counter of request queue during system resume
Chaitanya Kulkarni (1):
null_blk: return error for invalid zone size
DENG Qingfang (1):
net: dsa: mt7530: set CPU port to fallback mode
Dan Carpenter (1):
airo: Fix read overflows sending packets
Daniel Axtens (1):
kernel/relay.c: handle alloc_percpu returning NULL in relay_open
Dave Young (1):
efi/earlycon: Fix early printk for wider fonts
Dinghao Liu (1):
net: smsc911x: Fix runtime PM imbalance on error
Eugeniy Paltsev (1):
ARC: Fix ICCM & DCCM runtime size checks
Fan Yang (1):
mm: Fix mremap not considering huge pmd devmap
Gerald Schaefer (1):
s390/mm: fix set_huge_pte_at() for empty ptes
Giuseppe Marco Randazzo (1):
p54usb: add AirVasT USB stick device-id
Greg Kroah-Hartman (1):
Linux 5.6.17
Heinrich Schuchardt (1):
efi/libstub: Avoid returning uninitialized data from setup_graphics()
Herbert Xu (1):
crypto: api - Fix use-after-free and race in crypto_spawn_alg
Jan Schmidt (1):
drm/edid: Add Oculus Rift S to non-desktop list
Jason A. Donenfeld (1):
wireguard: selftests: use newer iproute2 for gcc-10
Jens Axboe (1):
io_uring: initialize ctx->sqo_wait earlier
Jeremy Kerr (1):
net: bmac: Fix read of MAC address from ROM
Jonathan McDowell (1):
net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x
Julian Sax (1):
HID: i2c-hid: add Schneider SCL142ALM to descriptor override
Jérôme Pouiller (1):
mmc: fix compilation of user API
Kefeng Wang (1):
riscv: Fix print_vm_layout build error if NOMMU
Leon Romanovsky (1):
net: phy: propagate an error back to the callers of phy_sfp_probe
Madhuparna Bhowmik (1):
evm: Fix RCU list related warnings
Matthew Garrett (1):
mt76: mt76x02u: Add support for newer versions of the XBox One wifi adapter
Nathan Chancellor (1):
x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables
Pavel Begunkov (2):
io_uring: don't prepare DRAIN reqs twice
io_uring: fix FORCE_ASYNC req preparation
Peter Ujfalusi (1):
dmaengine: ti: k3-udma: Fix TR mode flags for slave_sg and memcpy
Sakari Ailus (2):
media: Revert "staging: imgu: Address a compiler warning on alignment"
media: staging: ipu3-imgu: Move alignment attribute to field
Scott Shumate (1):
HID: sony: Fix for broken buttons on DS3 USB dongles
Tejun Heo (1):
Revert "cgroup: Add memory barriers to plug cgroup_rstat_updated() race window"
Tiezhu Yang (1):
net: Fix return value about devm_platform_ioremap_resource()
Valentin Longchamp (1):
net/ethernet/freescale: rework quiesce/activate for ucc_geth
Vineet Gupta (1):
ARC: [plat-eznps]: Restrict to CONFIG_ISA_ARCOMPACT
Vitaly Kuznetsov (1):
x86/hyperv: Properly suspend/resume reenlightenment notifications
Vladimir Stempen (1):
drm/amd/display: DP training to set properly SCRAMBLING_DISABLE
Wei Yongjun (1):
net: ethernet: ti: fix some return value check of cpsw_ale_create()
Xiaoguang Wang (1):
io_uring: reset -EBUSY error when io sq thread is waken up
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 6 -SUBLEVEL = 16 +SUBLEVEL = 17 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arc/kernel/setup.c +3 -2
@@ -11,6 +11,7 @@#include <linux/clocksource.h> #include <linux/console.h> #include <linux/module.h> +#include <linux/sizes.h> #include <linux/cpu.h> #include <linux/of_clk.h> #include <linux/of_fdt.h>
@@ -409,12 +410,12 @@ static void arc_chk_core_config(void)if ((unsigned int )__arc_dccm_base != cpu->dccm.base_addr)panic ("Linux built with incorrect DCCM Base address\n" ); -if (CONFIG_ARC_DCCM_SZ != cpu->dccm.sz) +if (CONFIG_ARC_DCCM_SZ *SZ_1K != cpu->dccm.sz)panic ("Linux built with incorrect DCCM Size\n" );#endif #ifdef CONFIG_ARC_HAS_ICCM -if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz) +if (CONFIG_ARC_ICCM_SZ *SZ_1K != cpu->iccm.sz)panic ("Linux built with incorrect ICCM Size\n" );#endif
arch/arc/plat-eznps/Kconfig +1 -0
@@ -6,6 +6,7 @@ menuconfig ARC_PLAT_EZNPS bool "\"EZchip\" ARC dev platform" + depends on ISA_ARCOMPACT select CPU_BIG_ENDIAN select CLKSRC_NPS if !PHYS_ADDR_T_64BIT select EZNPS_GIC
arch/riscv/mm/init.c +1 -1
@@ -46,7 +46,7 @@ static void setup_zero_page(void)memset ((void *)empty_zero_page,0 ,PAGE_SIZE ); } -#ifdef CONFIG_DEBUG_VM +#if defined(CONFIG_MMU ) && defined(CONFIG_DEBUG_VM )static inline void print_mlk (char *name,unsigned long b,unsigned long t) { pr_notice("%12s : 0x%08lx - 0x%08lx (%4ld kB)\n", name, b, t,
arch/s390/mm/hugetlbpage.c +6 -3
@@ -159,10 +159,13 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, rste &= ~_SEGMENT_ENTRY_NOEXEC;/* Set correct table type for 2G hugepages */ -if ((pte_val (*ptep) & _REGION_ENTRY_TYPE_MASK) == _REGION_ENTRY_TYPE_R3) - rste |= _REGION_ENTRY_TYPE_R3 | _REGION3_ENTRY_LARGE; -else +if ((pte_val (*ptep) & _REGION_ENTRY_TYPE_MASK) == _REGION_ENTRY_TYPE_R3) { +if (likely (pte_present (pte))) + rste |= _REGION3_ENTRY_LARGE; + rste |= _REGION_ENTRY_TYPE_R3; + }else if (likely (pte_present (pte))) rste |= _SEGMENT_ENTRY_LARGE; +clear_huge_pte_skeys (mm, rste);pte_val (*ptep) = rste; }
arch/x86/hyperv/hv_init.c +17 -2
@@ -226,10 +226,18 @@ static int hv_cpu_die(unsigned int cpu)rdmsrl (HV_X64_MSR_REENLIGHTENMENT_CONTROL , *((u64 *)&re_ctrl));if (re_ctrl.target_vp == hv_vp_index[cpu]) { -/* Reassign to some other online CPU */ +/* +* Reassign reenlightenment notifications to some other online +* CPU or just disable the feature if there are no online CPUs +* left (happens on hibernation). +*/ new_cpu =cpumask_any_but (cpu_online_mask, cpu); - re_ctrl.target_vp = hv_vp_index[new_cpu]; +if (new_cpu < nr_cpu_ids) + re_ctrl.target_vp = hv_vp_index[new_cpu]; +else + re_ctrl.enabled =0 ; +wrmsrl (HV_X64_MSR_REENLIGHTENMENT_CONTROL , *((u64 *)&re_ctrl)); }
@@ -293,6 +301,13 @@ static void hv_resume(void) hv_hypercall_pg = hv_hypercall_pg_saved; hv_hypercall_pg_saved =NULL ; + +/* +* Reenlightenment notifications are disabled by hv_cpu_die(0), +* reenable them here if hv_reenlightenment_cb was previously set. +*/ +if (hv_reenlightenment_cb) +set_hv_tscchange_cb (hv_reenlightenment_cb); }/* Note: when the ops are called, only CPU0 is online and IRQs are disabled. */
arch/x86/include/asm/pgtable.h +1 -0
@@ -256,6 +256,7 @@ static inline int pmd_large(pmd_t pte) }#ifdef CONFIG_TRANSPARENT_HUGEPAGE +/* NOTE: when predicate huge page, consider also pmd_devmap, or use pmd_large */ static inline int pmd_trans_huge (pmd_t pmd) {return (pmd_val (pmd) & (_PAGE_PSE|_PAGE_DEVMAP)) == _PAGE_PSE;
arch/x86/include/uapi/asm/unistd.h +9 -2
@@ -2,8 +2,15 @@#ifndef _UAPI_ASM_X86_UNISTD_H#define _UAPI_ASM_X86_UNISTD_H -/* x32 syscall flag bit */ -#define __X32_SYSCALL_BIT 0x40000000UL +/* +* x32 syscall flag bit. Some user programs expect syscall NR macros +* and __X32_SYSCALL_BIT to have type int, even though syscall numbers +* are, for practical purposes, unsigned long. +* +* Fortunately, expressions like (nr & ~__X32_SYSCALL_BIT) do the right +* thing regardless. +*/ +#define __X32_SYSCALL_BIT 0x40000000#ifndef __KERNEL__# ifdef __i386__
arch/x86/mm/mmio-mod.c +2 -2
@@ -372,7 +372,7 @@ static void enter_uniprocessor(void)int cpu;int err; -if (downed_cpus ==NULL && +if (!cpumask_available (downed_cpus) && !alloc_cpumask_var (&downed_cpus,GFP_KERNEL )) {pr_notice ("Failed to allocate mask\n" ); goto out;
@@ -402,7 +402,7 @@ static void leave_uniprocessor(void)int cpu;int err; -if (downed_cpus ==NULL ||cpumask_weight (downed_cpus) ==0 ) +if (!cpumask_available (downed_cpus) ||cpumask_weight (downed_cpus) ==0 )return ;pr_notice ("Re-enabling CPUs...\n" );for_each_cpu (cpu, downed_cpus) {
crypto/algapi.c +16 -6
@@ -716,17 +716,27 @@ EXPORT_SYMBOL_GPL(crypto_drop_spawn);static struct crypto_alg *crypto_spawn_alg (struct crypto_spawn *spawn) { -struct crypto_alg *alg; +struct crypto_alg *alg =ERR_PTR (-EAGAIN ); +struct crypto_alg *target; +bool shoot = false;down_read (&crypto_alg_sem); - alg = spawn->alg; -if (!spawn->dead && !crypto_mod_get (alg)) { - alg->cra_flags |=CRYPTO_ALG_DYING ; - alg =NULL ; +if (!spawn->dead) { + alg = spawn->alg; +if (!crypto_mod_get (alg)) { + target =crypto_alg_get (alg); + shoot = true; + alg =ERR_PTR (-EAGAIN ); + } }up_read (&crypto_alg_sem); -return alg ?:ERR_PTR (-EAGAIN ); +if (shoot) { +crypto_shoot_alg (target); +crypto_alg_put (target); + } + +return alg; } struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type,
crypto/api.c +2 -1
@@ -333,12 +333,13 @@ static unsigned int crypto_ctxsize(struct crypto_alg *alg, u32 type, u32 mask)return len; } -static void crypto_shoot_alg (struct crypto_alg *alg) +void crypto_shoot_alg (struct crypto_alg *alg) {down_write (&crypto_alg_sem); alg->cra_flags |=CRYPTO_ALG_DYING ;up_write (&crypto_alg_sem); } +EXPORT_SYMBOL_GPL (crypto_shoot_alg);struct crypto_tfm *__crypto_alloc_tfm (struct crypto_alg *alg,u32 type,u32 mask)
crypto/internal.h +1 -0
@@ -65,6 +65,7 @@ void crypto_alg_tested(const char *name, int err);void crypto_remove_spawns (struct crypto_alg *alg,struct list_head *list,struct crypto_alg *nalg);void crypto_remove_final (struct list_head *list); +void crypto_shoot_alg (struct crypto_alg *alg);struct crypto_tfm *__crypto_alloc_tfm (struct crypto_alg *alg,u32 type,u32 mask); void *crypto_create_tfm(struct crypto_alg *alg,
drivers/block/null_blk_zoned.c +4 -0
@@ -20,6 +20,10 @@ int null_zone_init(struct nullb_device *dev)pr_err ("zone_size must be power-of-two\n" );return -EINVAL ; } +if (dev->zone_size > dev->size) { +pr_err ("Zone size larger than device capacity\n" ); +return -EINVAL ; + } dev->zone_size_sects = dev->zone_size <<ZONE_SIZE_SHIFT ; dev->nr_zones = dev_size >>
drivers/dma/ti/k3-udma.c +4 -2
@@ -2148,7 +2148,8 @@ udma_prep_slave_sg_tr(struct udma_chan *uc, struct scatterlist *sgl, d->residue +=sg_dma_len (sgent); } -cppi5_tr_csf_set (&tr_req[tr_idx -1 ].flags,CPPI5_TR_CSF_EOP ); +cppi5_tr_csf_set (&tr_req[tr_idx -1 ].flags, +CPPI5_TR_CSF_SUPR_EVT |CPPI5_TR_CSF_EOP );return d; }
@@ -2725,7 +2726,8 @@ udma_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, tr_req[1 ].dicnt3 =1 ; } -cppi5_tr_csf_set (&tr_req[num_tr -1 ].flags,CPPI5_TR_CSF_EOP ); +cppi5_tr_csf_set (&tr_req[num_tr -1 ].flags, +CPPI5_TR_CSF_SUPR_EVT |CPPI5_TR_CSF_EOP );if (uc->config.metadata_size) d->vd.tx.metadata_ops = &metadata_ops;
drivers/firmware/efi/earlycon.c +8 -6
@@ -114,14 +114,16 @@ static void efi_earlycon_write_char(u32 *dst, unsigned char c, unsigned int h)const u32 color_black =0x00000000 ;const u32 color_white =0x00ffffff ;const u8 *src; -u8 s8; -int m; +int m, n, bytes; +u8 x; - src = font->data + c * font->height; - s8 = *(src + h); + bytes =BITS_TO_BYTES (font->width); + src = font->data + c * font->height * bytes + h * bytes; -for (m =0 ; m <8 ; m++) { -if ((s8 >> (7 - m)) &1 ) +for (m =0 ; m < font->width; m++) { + n = m %8 ; + x = *(src + m /8 ); +if ((x >> (7 - n)) &1 ) *dst = color_white;else *dst = color_black;
drivers/firmware/efi/libstub/arm-stub.c +5 -1
@@ -59,7 +59,11 @@ static struct screen_info *setup_graphics(void) si =alloc_screen_info ();if (!si)return NULL ; -efi_setup_gop (si, &gop_proto, size); + status =efi_setup_gop (si, &gop_proto, size); +if (status !=EFI_SUCCESS ) { +free_screen_info (si); +return NULL ; + } }return si; }
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +27 -0
@@ -220,6 +220,30 @@ static enum dpcd_training_patternsreturn dpcd_tr_pattern; } +static uint8_t dc_dp_initialize_scrambling_data_symbols ( +struct dc_link *link, +enum dc_dp_training_pattern pattern) +{ +uint8_t disable_scrabled_data_symbols =0 ; + +switch (pattern) { +case DP_TRAINING_PATTERN_SEQUENCE_1 : +case DP_TRAINING_PATTERN_SEQUENCE_2 : +case DP_TRAINING_PATTERN_SEQUENCE_3 : + disable_scrabled_data_symbols =1 ; +break ; +case DP_TRAINING_PATTERN_SEQUENCE_4 : + disable_scrabled_data_symbols =0 ; +break ; +default : +ASSERT (0 ); +DC_LOG_HW_LINK_TRAINING ("%s: Invalid HW Training pattern: %d\n" , + __func__, pattern); +break ; + } +return disable_scrabled_data_symbols; +} +static inline bool is_repeater (struct dc_link *link,uint32_t offset) {return (!link->is_lttpr_mode_transparent && offset !=0 );
@@ -252,6 +276,9 @@ static void dpcd_set_lt_pattern_and_lane_settings( dpcd_pattern.v1_4.TRAINING_PATTERN_SET =dc_dp_training_pattern_to_dpcd_training_pattern (link, pattern); + dpcd_pattern.v1_4.SCRAMBLING_DISABLE = +dc_dp_initialize_scrambling_data_symbols (link, pattern); + dpcd_lt_buffer[DP_TRAINING_PATTERN_SET -DP_TRAINING_PATTERN_SET ] = dpcd_pattern.raw;
drivers/gpu/drm/drm_edid.c +2 -1
@@ -191,10 +191,11 @@ static const struct edid_quirk { { "HVR", 0xaa01, EDID_QUIRK_NON_DESKTOP }, { "HVR", 0xaa02, EDID_QUIRK_NON_DESKTOP }, -/* Oculus Rift DK1, DK2, and CV1 VR Headsets */ +/* Oculus Rift DK1, DK2, CV1 and Rift S VR Headsets */ { "OVR", 0x0001, EDID_QUIRK_NON_DESKTOP }, { "OVR", 0x0003, EDID_QUIRK_NON_DESKTOP }, { "OVR", 0x0004, EDID_QUIRK_NON_DESKTOP }, + { "OVR", 0x0012, EDID_QUIRK_NON_DESKTOP },/* Windows Mixed Reality Headsets */ { "ACR", 0x7fce, EDID_QUIRK_NON_DESKTOP },
drivers/hid/hid-multitouch.c +26 -0
@@ -69,6 +69,7 @@ MODULE_LICENSE("GPL");#define MT_QUIRK_ASUS_CUSTOM_UP BIT(17)#define MT_QUIRK_WIN8_PTP_BUTTONS BIT(18)#define MT_QUIRK_SEPARATE_APP_REPORT BIT(19) +#define MT_QUIRK_FORCE_MULTI_INPUT BIT(20)#define MT_INPUTMODE_TOUCHSCREEN 0x02#define MT_INPUTMODE_TOUCHPAD 0x03
@@ -189,6 +190,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);#define MT_CLS_WIN_8 0x0012#define MT_CLS_EXPORT_ALL_INPUTS 0x0013#define MT_CLS_WIN_8_DUAL 0x0014 +#define MT_CLS_WIN_8_FORCE_MULTI_INPUT 0x0015/* vendor specific classes */ #define MT_CLS_3M 0x0101
@@ -279,6 +281,15 @@ static const struct mt_class mt_classes[] = {MT_QUIRK_CONTACT_CNT_ACCURATE | MT_QUIRK_WIN8_PTP_BUTTONS, .export_all_inputs = true }, + { .name = MT_CLS_WIN_8_FORCE_MULTI_INPUT, + .quirks =MT_QUIRK_ALWAYS_VALID | +MT_QUIRK_IGNORE_DUPLICATES | +MT_QUIRK_HOVERING | +MT_QUIRK_CONTACT_CNT_ACCURATE | +MT_QUIRK_STICKY_FINGERS | +MT_QUIRK_WIN8_PTP_BUTTONS | + MT_QUIRK_FORCE_MULTI_INPUT, + .export_all_inputs = true },/* * vendor specific classes
@@ -1714,6 +1725,11 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)if (id->group !=HID_GROUP_MULTITOUCH_WIN_8 ) hdev->quirks |=HID_QUIRK_MULTI_INPUT ; +if (mtclass->quirks &MT_QUIRK_FORCE_MULTI_INPUT ) { + hdev->quirks &= ~HID_QUIRK_INPUT_PER_APP ; + hdev->quirks |=HID_QUIRK_MULTI_INPUT ; + } +timer_setup (&td->release_timer, mt_expired_timeout,0 ); ret =hid_parse (hdev);
@@ -1926,6 +1942,11 @@ static const struct hid_device_id mt_devices[] = { MT_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002) }, +/* Elan devices */ + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT, +HID_DEVICE (BUS_I2C ,HID_GROUP_MULTITOUCH_WIN_8 , + USB_VENDOR_ID_ELAN, 0x313a) }, + /* Elitegroup panel */ { .driver_data = MT_CLS_SERIAL, MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
@@ -2056,6 +2077,11 @@ static const struct hid_device_id mt_devices[] = { MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM, USB_DEVICE_ID_MTP_STM)}, +/* Synaptics devices */ + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT, +HID_DEVICE (BUS_I2C ,HID_GROUP_MULTITOUCH_WIN_8 , + USB_VENDOR_ID_SYNAPTICS, 0xce08) }, + /* TopSeed panels */ { .driver_data = MT_CLS_TOPSEED, MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
drivers/hid/hid-sony.c +17 -0
@@ -867,6 +867,23 @@ static u8 *sony_report_fixup(struct hid_device *hdev, u8 *rdesc,if (sc->quirks &PS3REMOTE )return ps3remote_fixup (hdev, rdesc, rsize); +/* +* Some knock-off USB dongles incorrectly report their button count +* as 13 instead of 16 causing three non-functional buttons. +*/ +if ((sc->quirks &SIXAXIS_CONTROLLER_USB ) && *rsize >=45 && +/* Report Count (13) */ + rdesc[23 ] ==0x95 && rdesc[24 ] ==0x0D && +/* Usage Maximum (13) */ + rdesc[37 ] ==0x29 && rdesc[38 ] ==0x0D && +/* Report Count (3) */ + rdesc[43 ] ==0x95 && rdesc[44 ] ==0x03 ) { +hid_info (hdev,"Fixing up USB dongle report descriptor\n" ); + rdesc[24 ] =0x10 ; + rdesc[38 ] =0x10 ; + rdesc[44 ] =0x00 ; + } +return rdesc; }
drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c +8 -0
@@ -389,6 +389,14 @@ static const struct dmi_system_id i2c_hid_dmi_desc_override_table[] = { }, .driver_data = (void *)&sipodev_desc }, + { + .ident = "Schneider SCL142ALM", + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SCHNEIDER"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SCL142ALM"), + }, + .driver_data = (void *)&sipodev_desc + }, { } /* Terminate list */ };
drivers/i2c/busses/i2c-altera.c +9 -1
@@ -70,6 +70,7 @@* @isr_mask: cached copy of local ISR enables. * @isr_status: cached copy of local ISR status. * @lock: spinlock for IRQ synchronization. +* @isr_mutex: mutex for IRQ thread. */ struct altr_i2c_dev {void __iomem *base;
@@ -86,6 +87,7 @@ struct altr_i2c_dev {u32 isr_mask;u32 isr_status;spinlock_t lock;/* IRQ synchronization */ +struct mutex isr_mutex; }; static void
@@ -245,10 +247,11 @@ static irqreturn_t altr_i2c_isr(int irq, void *_dev)struct altr_i2c_dev *idev = _dev;u32 status = idev->isr_status; +mutex_lock (&idev->isr_mutex);if (!idev->msg) {dev_warn (idev->dev,"unexpected interrupt\n" );altr_i2c_int_clear (idev,ALTR_I2C_ALL_IRQ ); -return IRQ_HANDLED ; + goto out; } read = (idev->msg->flags &I2C_M_RD ) !=0 ;
@@ -301,6 +304,8 @@ static irqreturn_t altr_i2c_isr(int irq, void *_dev)complete (&idev->msg_complete);dev_dbg (idev->dev,"Message Complete\n" ); } +out: +mutex_unlock (&idev->isr_mutex);return IRQ_HANDLED ; }
@@ -312,6 +317,7 @@ static int altr_i2c_xfer_msg(struct altr_i2c_dev *idev, struct i2c_msg *msg)u32 value;u8 addr =i2c_8bit_addr_from_msg (msg); +mutex_lock (&idev->isr_mutex); idev->msg = msg; idev->msg_len = msg->len; idev->buf = msg->buf;
@@ -336,6 +342,7 @@ static int altr_i2c_xfer_msg(struct altr_i2c_dev *idev, struct i2c_msg *msg)altr_i2c_int_enable (idev, imask, true);altr_i2c_fill_tx_fifo (idev); } +mutex_unlock (&idev->isr_mutex); time_left =wait_for_completion_timeout (&idev->msg_complete,ALTR_I2C_XFER_TIMEOUT );
@@ -409,6 +416,7 @@ static int altr_i2c_probe(struct platform_device *pdev) idev->dev = &pdev->dev;init_completion (&idev->msg_complete);spin_lock_init (&idev->lock); +mutex_init (&idev->isr_mutex); ret =device_property_read_u32 (idev->dev,"fifo-size" , &idev->fifo_size);
drivers/net/can/ifi_canfd/ifi_canfd.c +4 -1
@@ -947,8 +947,11 @@ static int ifi_canfd_plat_probe(struct platform_device *pdev)u32 id, rev; addr =devm_platform_ioremap_resource (pdev,0 ); +if (IS_ERR (addr)) +return PTR_ERR (addr); + irq =platform_get_irq (pdev,0 ); -if (IS_ERR (addr) || irq <0 ) +if (irq <0 )return -EINVAL ; id =readl (addr +IFI_CANFD_IP_ID );
drivers/net/can/sun4i_can.c +1 -1
@@ -792,7 +792,7 @@ static int sun4ican_probe(struct platform_device *pdev) addr =devm_platform_ioremap_resource (pdev,0 );if (IS_ERR (addr)) { - err = -EBUSY ; + err =PTR_ERR (addr); goto exit; }
drivers/net/dsa/b53/b53_srab.c +1 -1
@@ -609,7 +609,7 @@ static int b53_srab_probe(struct platform_device *pdev) priv->regs =devm_platform_ioremap_resource (pdev,0 );if (IS_ERR (priv->regs)) -return -ENOMEM ; +return PTR_ERR (priv->regs); dev =b53_switch_alloc (&pdev->dev, &b53_srab_ops, priv);if (!dev)
drivers/net/dsa/mt7530.c +8 -3
@@ -818,10 +818,15 @@ mt7530_port_set_vlan_aware(struct dsa_switch *ds, int port) PCR_MATRIX_MASK, PCR_MATRIX(MT7530_ALL_MEMBERS));/* Trapped into security mode allows packet forwarding through VLAN -* table lookup. +* table lookup. CPU port is set to fallback mode to let untagged +* frames pass through. */ -mt7530_rmw (priv,MT7530_PCR_P (port),PCR_PORT_VLAN_MASK , -MT7530_PORT_SECURITY_MODE ); +if (dsa_is_cpu_port (ds, port)) +mt7530_rmw (priv,MT7530_PCR_P (port),PCR_PORT_VLAN_MASK , +MT7530_PORT_FALLBACK_MODE ); +else +mt7530_rmw (priv,MT7530_PCR_P (port),PCR_PORT_VLAN_MASK , +MT7530_PORT_SECURITY_MODE );/* Set the port as a user port which is to be able to recognize VID * from incoming packets before fetching entry within the VLAN table.
drivers/net/dsa/mt7530.h +6 -0
@@ -148,6 +148,12 @@ enum mt7530_port_mode {/* Port Matrix Mode: Frames are forwarded by the PCR_MATRIX members. */ MT7530_PORT_MATRIX_MODE =PORT_VLAN (0 ), +/* Fallback Mode: Forward received frames with ingress ports that do +* not belong to the VLAN member. Frames whose VID is not listed on +* the VLAN table are forwarded by the PCR_MATRIX members. +*/ + MT7530_PORT_FALLBACK_MODE = PORT_VLAN(1), +/* Security Mode: Discard any frame due to ingress membership * violation or VID missed on the VLAN table. */
drivers/net/ethernet/apple/bmac.c +1 -1
@@ -1182,7 +1182,7 @@ bmac_get_station_address(struct net_device *dev, unsigned char *ea)int i;unsigned short data; -for (i =0 ; i <6 ; i++) +for (i =0 ; i <3 ; i++) {reset_and_select_srom (dev); data =read_srom (dev, i + EnetAddressOffset/2 , SROMAddressBits);
drivers/net/ethernet/freescale/ucc_geth.c +7 -6
@@ -42,6 +42,7 @@#include <soc/fsl/qe/ucc.h> #include <soc/fsl/qe/ucc_fast.h> #include <asm/machdep.h> +#include <net/sch_generic.h> #include "ucc_geth.h"
@@ -1548,11 +1549,8 @@ static int ugeth_disable(struct ucc_geth_private *ugeth, enum comm_dir mode)static void ugeth_quiesce (struct ucc_geth_private *ugeth) { -/* Prevent any further xmits, plus detach the device. */ -netif_device_detach (ugeth->ndev); - -/* Wait for any current xmits to finish. */ -netif_tx_disable (ugeth->ndev); +/* Prevent any further xmits */ +netif_tx_stop_all_queues (ugeth->ndev);/* Disable the interrupt to avoid NAPI rescheduling. */ disable_irq (ugeth->ug_info->uf_info.irq);
@@ -1565,7 +1563,10 @@ static void ugeth_activate(struct ucc_geth_private *ugeth) {napi_enable (&ugeth->napi);enable_irq (ugeth->ug_info->uf_info.irq); -netif_device_attach (ugeth->ndev); + +/* allow to xmit again */ +netif_tx_wake_all_queues (ugeth->ndev); +__netdev_watchdog_up (ugeth->ndev); }/* Called every time the controller might need to be made
drivers/net/ethernet/marvell/pxa168_eth.c +1 -1
@@ -1418,7 +1418,7 @@ static int pxa168_eth_probe(struct platform_device *pdev) pep->base =devm_platform_ioremap_resource (pdev,0 );if (IS_ERR (pep->base)) { - err = -ENOMEM ; + err =PTR_ERR (pep->base); goto err_netdev; }
drivers/net/ethernet/smsc/smsc911x.c +5 -4
@@ -2493,20 +2493,20 @@ static int smsc911x_drv_probe(struct platform_device *pdev) retval =smsc911x_init (dev);if (retval <0 ) - goto out_disable_resources; + goto out_init_fail;netif_carrier_off (dev); retval =smsc911x_mii_init (pdev, dev);if (retval) {SMSC_WARN (pdata, probe,"Error %i initialising mii" , retval); - goto out_disable_resources; + goto out_init_fail; } retval =register_netdev (dev);if (retval) {SMSC_WARN (pdata, probe,"Error %i registering device" , retval); - goto out_disable_resources; + goto out_init_fail; }else {SMSC_TRACE (pdata, probe,"Network interface: \"%s\"" , dev->name);
@@ -2547,9 +2547,10 @@ static int smsc911x_drv_probe(struct platform_device *pdev)return 0 ; -out_disable_resources: +out_init_fail:pm_runtime_put (&pdev->dev);pm_runtime_disable (&pdev->dev); +out_disable_resources: (void )smsc911x_disable_resources (pdev); out_enable_resources_fail:smsc911x_free_resources (pdev);
drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c +13 -0
@@ -319,6 +319,19 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)/* Enable PTP clock */ regmap_read (gmac->nss_common,NSS_COMMON_CLK_GATE , &val); val |=NSS_COMMON_CLK_GATE_PTP_EN (gmac->id); +switch (gmac->phy_mode) { +case PHY_INTERFACE_MODE_RGMII : + val |=NSS_COMMON_CLK_GATE_RGMII_RX_EN (gmac->id) | +NSS_COMMON_CLK_GATE_RGMII_TX_EN (gmac->id); +break ; +case PHY_INTERFACE_MODE_SGMII : + val |=NSS_COMMON_CLK_GATE_GMII_RX_EN (gmac->id) | +NSS_COMMON_CLK_GATE_GMII_TX_EN (gmac->id); +break ; +default : +/* We don't get here; the switch above will have errored out */ +unreachable (); + }regmap_write (gmac->nss_common,NSS_COMMON_CLK_GATE , val);if (gmac->phy_mode ==PHY_INTERFACE_MODE_SGMII ) {
drivers/net/ethernet/ti/cpsw_ale.c +1 -1
@@ -917,7 +917,7 @@ struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params) ale =devm_kzalloc (params->dev,sizeof (*ale),GFP_KERNEL );if (!ale) -return NULL ; +return ERR_PTR (-ENOMEM ); ale->p0_untag_vid_mask = devm_kmalloc_array(params->dev, BITS_TO_LONGS(VLAN_N_VID),
drivers/net/ethernet/ti/cpsw_priv.c +2 -2
@@ -490,9 +490,9 @@ int cpsw_init_common(struct cpsw_common *cpsw, void __iomem *ss_regs, ale_params.ale_ports =CPSW_ALE_PORTS_NUM ; cpsw->ale =cpsw_ale_create (&ale_params); -if (!cpsw->ale) { +if (IS_ERR (cpsw->ale)) {dev_err (dev,"error initializing ale engine\n" ); -return -ENODEV ; +return PTR_ERR (cpsw->ale); } dma_params.dev = dev;
drivers/net/ethernet/ti/netcp_ethss.c +2 -2
@@ -3704,9 +3704,9 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev, ale_params.nu_switch_ale = true; } gbe_dev->ale =cpsw_ale_create (&ale_params); -if (!gbe_dev->ale) { +if (IS_ERR (gbe_dev->ale)) {dev_err (gbe_dev->dev,"error initializing ale engine\n" ); - ret = -ENODEV ; + ret =PTR_ERR (gbe_dev->ale); goto free_sec_ports; }else {dev_dbg (gbe_dev->dev,"Created a gbe ale engine\n" );
drivers/net/phy/phy_device.c +2 -2
@@ -1239,7 +1239,7 @@ int phy_sfp_probe(struct phy_device *phydev, const struct sfp_upstream_ops *ops) {struct sfp_bus *bus; -int ret; +int ret =0 ;if (phydev->mdio.dev.fwnode) { bus =sfp_bus_find_fwnode (phydev->mdio.dev.fwnode);
@@ -1251,7 +1251,7 @@ int phy_sfp_probe(struct phy_device *phydev, ret =sfp_bus_add_upstream (bus, phydev, ops);sfp_bus_put (bus); } -return 0 ; +return ret; }EXPORT_SYMBOL (phy_sfp_probe);
drivers/net/wireless/cisco/airo.c +12 -0
@@ -1925,6 +1925,10 @@ static netdev_tx_t mpi_start_xmit(struct sk_buff *skb,airo_print_err (dev->name,"%s: skb == NULL!" ,__func__);return NETDEV_TX_OK ; } +if (skb_padto (skb,ETH_ZLEN )) { + dev->stats.tx_dropped++; +return NETDEV_TX_OK ; + } npacks =skb_queue_len (&ai->txq);if (npacks >=MAXTXQ -1 ) {
@@ -2127,6 +2131,10 @@ static netdev_tx_t airo_start_xmit(struct sk_buff *skb,airo_print_err (dev->name,"%s: skb == NULL!" , __func__);return NETDEV_TX_OK ; } +if (skb_padto (skb,ETH_ZLEN )) { + dev->stats.tx_dropped++; +return NETDEV_TX_OK ; + }/* Find a vacant FID */ for ( i =0 ; i <MAX_FIDS /2 && (fids[i] &0xffff0000 ); i++ );
@@ -2201,6 +2209,10 @@ static netdev_tx_t airo_start_xmit11(struct sk_buff *skb,airo_print_err (dev->name,"%s: skb == NULL!" , __func__);return NETDEV_TX_OK ; } +if (skb_padto (skb,ETH_ZLEN )) { + dev->stats.tx_dropped++; +return NETDEV_TX_OK ; + }/* Find a vacant FID */ for ( i =MAX_FIDS /2 ; i <MAX_FIDS && (fids[i] &0xffff0000 ); i++ );
drivers/net/wireless/intersil/p54/p54usb.c +1 -0
@@ -61,6 +61,7 @@ static const struct usb_device_id p54u_table[] = { {USB_DEVICE(0x0db0, 0x6826)}, /* MSI UB54G (MS-6826) */ {USB_DEVICE(0x107b, 0x55f2)}, /* Gateway WGU-210 (Gemtek) */ {USB_DEVICE(0x124a, 0x4023)}, /* Shuttle PN15, Airvast WM168g, IOGear GWU513 */ + {USB_DEVICE(0x124a, 0x4026)}, /* AirVasT USB wireless device */ {USB_DEVICE(0x1435, 0x0210)}, /* Inventel UR054G */ {USB_DEVICE(0x15a9, 0x0002)}, /* Gemtek WUBI-100GW 802.11g */ {USB_DEVICE(0x1630, 0x0005)}, /* 2Wire 802.11g USB (v1) / Z-Com */
drivers/net/wireless/mediatek/mt76/mt76x02.h +1 -0
@@ -211,6 +211,7 @@ static inline bool is_mt76x0(struct mt76x02_dev *dev)static inline bool is_mt76x2 (struct mt76x02_dev *dev) {return mt76_chip (&dev->mt76) ==0x7612 || +mt76_chip (&dev->mt76) ==0x7632 ||mt76_chip (&dev->mt76) ==0x7662 ||mt76_chip (&dev->mt76) ==0x7602 ; }
drivers/net/wireless/mediatek/mt76/mt76x2/usb.c +1 -0
@@ -18,6 +18,7 @@ static const struct usb_device_id mt76x2u_device_table[] = { { USB_DEVICE(0x7392, 0xb711) }, /* Edimax EW 7722 UAC */ { USB_DEVICE(0x0846, 0x9053) }, /* Netgear A6210 */ { USB_DEVICE(0x045e, 0x02e6) }, /* XBox One Wireless Adapter */ + { USB_DEVICE(0x045e, 0x02fe) }, /* XBox One Wireless Adapter */ { }, };
drivers/scsi/scsi_pm.c +8 -2
@@ -80,6 +80,10 @@ static int scsi_dev_type_resume(struct device *dev,dev_dbg (dev,"scsi resume: %d\n" , err);if (err ==0 ) { +bool was_runtime_suspended; + + was_runtime_suspended =pm_runtime_suspended (dev); +pm_runtime_disable (dev); err =pm_runtime_set_active (dev);pm_runtime_enable (dev);
@@ -93,8 +97,10 @@ static int scsi_dev_type_resume(struct device *dev,*/ if (!err &&scsi_is_sdev_device (dev)) {struct scsi_device *sdev =to_scsi_device (dev); - -blk_set_runtime_active (sdev->request_queue); +if (was_runtime_suspended) +blk_post_runtime_resume (sdev->request_queue,0 ); +else +blk_set_runtime_active (sdev->request_queue); } }
drivers/staging/media/ipu3/include/intel-ipu3.h +4 -3
@@ -450,7 +450,7 @@ struct ipu3_uapi_awb_fr_config_s {__u32 bayer_sign;__u8 bayer_nf;__u8 reserved2[7 ]; -} __attribute__((aligned(32))) __packed; +} __packed;/** * struct ipu3_uapi_4a_config - 4A config
@@ -466,7 +466,8 @@ struct ipu3_uapi_4a_config {struct ipu3_uapi_ae_grid_config ae_grd_config;__u8 padding[20 ];struct ipu3_uapi_af_config_s af_config; -struct ipu3_uapi_awb_fr_config_s awb_fr_config; + struct ipu3_uapi_awb_fr_config_s awb_fr_config + __attribute__((aligned(32))); } __packed;/**
@@ -2477,7 +2478,7 @@ struct ipu3_uapi_acc_param { struct ipu3_uapi_yuvp1_yds_config yds2 __attribute__((aligned(32))); struct ipu3_uapi_yuvp2_tcc_static_config tcc __attribute__((aligned(32)));struct ipu3_uapi_anr_config anr; - struct ipu3_uapi_awb_fr_config_s awb_fr __attribute__((aligned(32))); +struct ipu3_uapi_awb_fr_config_s awb_fr;struct ipu3_uapi_ae_config ae;struct ipu3_uapi_af_config_s af;struct ipu3_uapi_awb_config awb;
fs/io_uring.c +18 -10
@@ -822,6 +822,7 @@ static struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p) goto err; ctx->flags = p->flags; +init_waitqueue_head (&ctx->sqo_wait);init_waitqueue_head (&ctx->cq_wait);INIT_LIST_HEAD (&ctx->cq_overflow_list);init_completion (&ctx->completions[0 ]);
@@ -4261,12 +4262,13 @@ static int io_req_defer(struct io_kiocb *req, const struct io_uring_sqe *sqe)if (!req_need_defer (req) &&list_empty_careful (&ctx->defer_list))return 0 ; -if (!req->io &&io_alloc_async_ctx (req)) -return -EAGAIN ; - - ret =io_req_defer_prep (req, sqe); -if (ret <0 ) -return ret; +if (!req->io) { +if (io_alloc_async_ctx (req)) +return -EAGAIN ; + ret =io_req_defer_prep (req, sqe); +if (ret <0 ) +return ret; + }spin_lock_irq (&ctx->completion_lock);if (!req_need_defer (req) &&list_empty (&ctx->defer_list)) {
@@ -4821,9 +4823,15 @@ static void io_queue_sqe(struct io_kiocb *req, const struct io_uring_sqe *sqe)io_double_put_req (req); } }else if (req->flags &REQ_F_FORCE_ASYNC ) { - ret =io_req_defer_prep (req, sqe); -if (unlikely (ret <0 )) - goto fail_req; +if (!req->io) { + ret = -EAGAIN ; +if (io_alloc_async_ctx (req)) + goto fail_req; + ret =io_req_defer_prep (req, sqe); +if (unlikely (ret <0 )) + goto fail_req; + } +/* * Never try inline submit of IOSQE_ASYNC is set, go straight * to async execution.
@@ -5216,6 +5224,7 @@ static int io_sq_thread(void *data)finish_wait (&ctx->sqo_wait, &wait); ctx->rings->sq_flags &= ~IORING_SQ_NEED_WAKEUP ; + ret =0 ;continue ; }finish_wait (&ctx->sqo_wait, &wait);
@@ -6004,7 +6013,6 @@ static int io_sq_offload_start(struct io_ring_ctx *ctx, {int ret; -init_waitqueue_head (&ctx->sqo_wait);mmgrab (current->mm); ctx->sqo_mm = current->mm;
include/uapi/linux/mmc/ioctl.h +1 -0
@@ -3,6 +3,7 @@#define LINUX_MMC_IOCTL_H #include <linux/types.h> +#include <linux/major.h> struct mmc_ioc_cmd {/*
kernel/cgroup/rstat.c +3 -13
@@ -33,12 +33,9 @@ void cgroup_rstat_updated(struct cgroup *cgrp, int cpu)return ;/* -* Paired with the one in cgroup_rstat_cpu_pop_updated(). Either we -* see NULL updated_next or they see our updated stat. -*/ -smp_mb (); - -/* +* Speculative already-on-list test. This may race leading to +* temporary inaccuracies, which is fine. +* * Because @parent's updated_children is terminated with @parent * instead of NULL, we can tell whether @cgrp is on the list by * testing the next pointer for NULL.
@@ -134,13 +131,6 @@ static struct cgroup *cgroup_rstat_cpu_pop_updated(struct cgroup *pos, *nextp = rstatc->updated_next; rstatc->updated_next =NULL ; -/* -* Paired with the one in cgroup_rstat_cpu_updated(). -* Either they see NULL updated_next or we see their -* updated stat. -*/ -smp_mb (); -return pos; }
kernel/relay.c +5 -0
@@ -581,6 +581,11 @@ struct rchan *relay_open(const char *base_filename,return NULL ; chan->buf = alloc_percpu(struct rchan_buf *); +if (!chan->buf) { +kfree (chan); +return NULL ; + } + chan->version =RELAYFS_CHANNEL_VERSION ; chan->n_subbufs = n_subbufs; chan->subbuf_size = subbuf_size;
mm/mremap.c +1 -1
@@ -266,7 +266,7 @@ unsigned long move_page_tables(struct vm_area_struct *vma, new_pmd =alloc_new_pmd (vma->vm_mm, vma, new_addr);if (!new_pmd)break ; -if (is_swap_pmd (*old_pmd) ||pmd_trans_huge (*old_pmd)) { +if (is_swap_pmd (*old_pmd) ||pmd_trans_huge (*old_pmd) ||pmd_devmap (*old_pmd)) {if (extent ==HPAGE_PMD_SIZE ) {bool moved;/* See comment in move_ptes() */
security/integrity/evm/evm_crypto.c +1 -1
@@ -209,7 +209,7 @@ static int evm_calc_hmac_or_hash(struct dentry *dentry, data->hdr.length =crypto_shash_digestsize (desc->tfm); error = -ENODATA ; -list_for_each_entry_rcu (xattr, &evm_config_xattrnames, list) { +list_for_each_entry_lockless (xattr, &evm_config_xattrnames, list) {bool is_ima = false;if (strcmp (xattr->name,XATTR_NAME_IMA ) ==0 )
security/integrity/evm/evm_main.c +2 -2
@@ -99,7 +99,7 @@ static int evm_find_protected_xattrs(struct dentry *dentry)if (!(inode->i_opflags &IOP_XATTR ))return -EOPNOTSUPP ; -list_for_each_entry_rcu (xattr, &evm_config_xattrnames, list) { +list_for_each_entry_lockless (xattr, &evm_config_xattrnames, list) { error =__vfs_getxattr (dentry, inode, xattr->name,NULL ,0 );if (error <0 ) {if (error == -ENODATA )
@@ -230,7 +230,7 @@ static int evm_protected_xattr(const char *req_xattr_name)struct xattr_list *xattr; namelen =strlen (req_xattr_name); -list_for_each_entry_rcu (xattr, &evm_config_xattrnames, list) { +list_for_each_entry_lockless (xattr, &evm_config_xattrnames, list) {if ((strlen (xattr->name) == namelen) && (strncmp (req_xattr_name, xattr->name, namelen) ==0 )) { found =1 ;
security/integrity/evm/evm_secfs.c +8 -1
@@ -234,7 +234,14 @@ static ssize_t evm_write_xattrs(struct file *file, const char __user *buf, goto out; } -/* Guard against races in evm_read_xattrs */ +/* +* xattr_list_mutex guards against races in evm_read_xattrs(). +* Entries are only added to the evm_config_xattrnames list +* and never deleted. Therefore, the list is traversed +* using list_for_each_entry_lockless() without holding +* the mutex in evm_calc_hmac_or_hash(), evm_find_protected_xattrs() +* and evm_protected_xattr(). +*/ mutex_lock (&xattr_list_mutex);list_for_each_entry (tmp, &evm_config_xattrnames, list) {if (strcmp (xattr->name, tmp->name) ==0 ) {
tools/arch/x86/include/uapi/asm/unistd.h +1 -1
@@ -3,7 +3,7 @@#define _UAPI_ASM_X86_UNISTD_H/* x32 syscall flag bit */ -#define __X32_SYSCALL_BIT 0x40000000UL +#define __X32_SYSCALL_BIT 0x40000000#ifndef __KERNEL__# ifdef __i386__
tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh +1 -1
@@ -300,7 +300,7 @@ test_uc_aware() local i for ((i = 0; i < attempts; ++i)); do - if $ARPING -c 1 -I $h1 -b 192.0.2.66 -q -w 0.1; then + if $ARPING -c 1 -I $h1 -b 192.0.2.66 -q -w 1; then ((passes++)) fi
tools/testing/selftests/wireguard/qemu/Makefile +1 -1
@@ -44,7 +44,7 @@ endef $(eval $(call tar_download,MUSL,musl,1.2.0,.tar.gz,https://musl.libc.org/releases/,c6de7b191139142d3f9a7b5b702c9cae1b5ee6e7f57e582da9328629408fd4e8)) $(eval $(call tar_download,IPERF,iperf,3.7,.tar.gz,https://downloads.es.net/pub/iperf/,d846040224317caf2f75c843d309a950a7db23f9b44b94688ccbe557d6d1710c)) $(eval $(call tar_download,BASH,bash,5.0,.tar.gz,https://ftp.gnu.org/gnu/bash/,b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d)) -$(eval $(call tar_download,IPROUTE2,iproute2,5.4.0,.tar.xz,https://www.kernel.org/pub/linux/utils/net/iproute2/,fe97aa60a0d4c5ac830be18937e18dc3400ca713a33a89ad896ff1e3d46086ae)) +$(eval $(call tar_download,IPROUTE2,iproute2,5.6.0,.tar.xz,https://www.kernel.org/pub/linux/utils/net/iproute2/,1b5b0e25ce6e23da7526ea1da044e814ad85ba761b10dd29c2b027c056b04692)) $(eval $(call tar_download,IPTABLES,iptables,1.8.4,.tar.bz2,https://www.netfilter.org/projects/iptables/files/,993a3a5490a544c2cbf2ef15cf7e7ed21af1845baf228318d5c36ef8827e157c)) $(eval $(call tar_download,NMAP,nmap,7.80,.tar.bz2,https://nmap.org/dist/,fcfa5a0e42099e12e4bf7a68ebe6fde05553383a682e816a7ec9256ab4773faa)) $(eval $(call tar_download,IPUTILS,iputils,s20190709,.tar.gz,https://github.com/iputils/iputils/archive/s20190709.tar.gz/#,a15720dd741d7538dd2645f9f516d193636ae4300ff7dbc8bfca757bf166490a))