Linux 4.4.227
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.4.227 kernel.
All users of the 4.4 kernel series must upgrade.
The updated 4.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.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
------------
Documentation/ABI/testing/sysfs-devices-system-cpu | 1 Documentation/hw-vuln/special-register-buffer-data-sampling.rst | 149 ++++++++++ Documentation/kernel-parameters.txt | 20 + Makefile | 2 arch/arc/kernel/setup.c | 5 arch/s390/kernel/mcount.S | 1 arch/x86/include/asm/acpi.h | 2 arch/x86/include/asm/cpu_device_id.h | 27 + arch/x86/include/asm/cpufeatures.h | 2 arch/x86/include/asm/msr-index.h | 4 arch/x86/include/asm/processor.h | 2 arch/x86/kernel/amd_nb.c | 2 arch/x86/kernel/asm-offsets_32.c | 2 arch/x86/kernel/cpu/amd.c | 26 - arch/x86/kernel/cpu/bugs.c | 106 +++++++ arch/x86/kernel/cpu/centaur.c | 4 arch/x86/kernel/cpu/common.c | 62 +++- arch/x86/kernel/cpu/cpu.h | 1 arch/x86/kernel/cpu/cyrix.c | 2 arch/x86/kernel/cpu/intel.c | 20 - arch/x86/kernel/cpu/match.c | 7 arch/x86/kernel/cpu/microcode/intel.c | 4 arch/x86/kernel/cpu/mtrr/generic.c | 2 arch/x86/kernel/cpu/mtrr/main.c | 4 arch/x86/kernel/cpu/perf_event_intel.c | 2 arch/x86/kernel/cpu/perf_event_intel_lbr.c | 2 arch/x86/kernel/cpu/perf_event_p6.c | 2 arch/x86/kernel/cpu/proc.c | 4 arch/x86/kernel/head_32.S | 4 arch/x86/kernel/mpparse.c | 2 arch/x86/mm/mmio-mod.c | 4 drivers/base/cpu.c | 8 drivers/char/hw_random/via-rng.c | 2 drivers/cpufreq/acpi-cpufreq.c | 2 drivers/cpufreq/longhaul.c | 6 drivers/cpufreq/p4-clockmod.c | 2 drivers/cpufreq/powernow-k7.c | 2 drivers/cpufreq/speedstep-centrino.c | 4 drivers/cpufreq/speedstep-lib.c | 6 drivers/crypto/padlock-aes.c | 2 drivers/edac/amd64_edac.c | 2 drivers/edac/mce_amd.c | 2 drivers/hwmon/coretemp.c | 6 drivers/hwmon/hwmon-vid.c | 2 drivers/hwmon/k10temp.c | 2 drivers/hwmon/k8temp.c | 2 drivers/iio/light/vcnl4000.c | 6 drivers/infiniband/hw/mlx4/mr.c | 7 drivers/net/can/slcan.c | 3 drivers/net/ethernet/apple/bmac.c | 2 drivers/net/ethernet/freescale/ucc_geth.c | 13 drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 13 drivers/net/ppp/pppoe.c | 3 drivers/net/slip/slip.c | 3 drivers/nfc/st21nfca/dep.c | 4 drivers/platform/x86/acer-wmi.c | 9 drivers/scsi/scsi_devinfo.c | 23 - drivers/scsi/ufs/ufshcd.c | 1 drivers/spi/spi-dw.c | 3 drivers/staging/rtl8712/wifi.h | 9 drivers/tty/vt/keyboard.c | 26 + drivers/usb/gadget/function/f_uac2.c | 4 drivers/usb/serial/option.c | 4 drivers/usb/serial/qcserial.c | 1 drivers/usb/serial/usb_wwan.c | 4 drivers/video/fbdev/geode/video_gx.c | 2 include/linux/mod_devicetable.h | 6 include/uapi/linux/mmc/ioctl.h | 1 kernel/events/uprobes.c | 14 net/ipv4/devinet.c | 1 net/ipv6/esp6.c | 4 net/l2tp/l2tp_core.c | 2 net/l2tp/l2tp_ip.c | 28 + net/l2tp/l2tp_ip6.c | 28 + net/vmw_vsock/af_vsock.c | 2 sound/pci/hda/patch_realtek.c | 3 76 files changed, 600 insertions(+), 156 deletions(-)
Ben Hutchings (1):
slcan: Fix double-free on slcan_open() error path
Bin Liu (1):
USB: serial: usb_wwan: do not resubmit rx urb on fatal errors
Can Guo (1):
scsi: ufs: Release clock if DMA map fails
Christophe Jaillet (1):
IB/mlx4: Fix an error handling path in 'mlx4_ib_rereg_user_mr()'
Chuhong Yuan (1):
NFC: st21nfca: add missed kfree_skb() in an error path
Daniele Palmas (1):
USB: serial: option: add Telit LE910C1-EUX compositions
Dmitry Torokhov (1):
vt: keyboard: avoid signed integer overflow in k_ascii
Eric Dumazet (2):
l2tp: add sk_family checks to l2tp_validate_socket
l2tp: do not use inet_hash()/inet_unhash()
Eugeniu Rosca (1):
usb: gadget: f_uac2: fix error handling in afunc_bind (again)
Eugeniy Paltsev (1):
ARC: Fix ICCM & DCCM runtime size checks
Greg Kroah-Hartman (1):
Linux 4.4.227
Guillaume Nault (1):
pppoe: only process PADT targeted at local interfaces
Hannes Reinecke (1):
scsi: scsi_devinfo: fixup string compare
Jeremy Kerr (1):
net: bmac: Fix read of MAC address from ROM
Jia Zhang (1):
x86/cpu: Rename cpu_data.x86_mask to cpu_data.x86_stepping
Jonathan McDowell (1):
net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x
Josh Poimboeuf (1):
x86/speculation: Add Ivy Bridge to affected list
Jérôme Pouiller (1):
mmc: fix compilation of user API
Lee, Chun-Yi (1):
platform/x86: acer-wmi: setup accelerometer when ACPI device was found
Mark Gross (4):
x86/cpu: Add a steppings field to struct x86_cpu_id
x86/cpu: Add 'table' argument to cpu_matches()
x86/speculation: Add Special Register Buffer Data Sampling (SRBDS) mitigation x86/speculation: Add SRBDS vulnerability and mitigation documentation
Mathieu Othacehe (1):
iio: vcnl4000: Fix i2c swapped word reading.
Matt Jolly (1):
USB: serial: qcserial: add DW5816e QDL support
Nathan Chancellor (1):
x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables
Oleg Nesterov (1):
uprobes: ensure that uprobe->offset and ->ref_ctr_offset are properly aligned
Pascal Terjan (1):
staging: rtl8712: Fix IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK
Stefano Garzarella (1):
vsock: fix timeout in vsock_accept()
Takashi Iwai (1):
ALSA: hda - No loopback on ALC299 codec
Valentin Longchamp (1):
net/ethernet/freescale: rework quiesce/activate for ucc_geth
Vasily Gorbik (1):
s390/ftrace: save traced function caller
Xinwei Kong (1):
spi: dw: use "smp_mb()" to avoid sending spi data error
Yang Yingliang (1):
devinet: fix memleak in inetdev_init()
Zhen Lei (1):
esp6: fix memleak on error path in esp6_input
yangerkun (1):
slip: not call free_netdev before rtnl_unlock in slip_open
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-devices-system-cpu +1 -0
@@ -279,6 +279,7 @@ What: /sys/devices/system/cpu/vulnerabilities /sys/devices/system/cpu/vulnerabilities/spec_store_bypass /sys/devices/system/cpu/vulnerabilities/l1tf /sys/devices/system/cpu/vulnerabilities/mds + /sys/devices/system/cpu/vulnerabilities/srbds /sys/devices/system/cpu/vulnerabilities/tsx_async_abort /sys/devices/system/cpu/vulnerabilities/itlb_multihit Date: January 2018
Documentation/hw-vuln/special-register-buffer-data-sampling.rst new file +149 -0
149 lines not on this page · raw message
Documentation/kernel-parameters.txt +20 -0
@@ -3787,6 +3787,26 @@ bytes respectively. Such letter suffixes can also be entirely omitted. spia_pedr= spia_peddr= + srbds= [X86,INTEL] + Control the Special Register Buffer Data Sampling + (SRBDS) mitigation. + + Certain CPUs are vulnerable to an MDS-like + exploit which can leak bits from the random + number generator. + + By default, this issue is mitigated by + microcode. However, the microcode fix can cause + the RDRAND and RDSEED instructions to become + much slower. Among other effects, this will + result in reduced throughput from /dev/urandom. + + The microcode mitigation can be disabled with + the following option: + + off: Disable mitigation and remove + performance impact to RDRAND and RDSEED + stack_guard_gap= [MM] override the default stack gap protection. The value is in page units and it defines how many pages prior
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 226 +SUBLEVEL = 227 EXTRAVERSION = NAME = Blurry Fish Butt
arch/arc/kernel/setup.c +3 -2
@@ -12,6 +12,7 @@#include <linux/root_dev.h> #include <linux/console.h> #include <linux/module.h> +#include <linux/sizes.h> #include <linux/cpu.h> #include <linux/clk-provider.h> #include <linux/of_fdt.h>
@@ -308,12 +309,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/s390/kernel/mcount.S +1 -0
@@ -36,6 +36,7 @@ ENTRY(_mcount) ENTRY(ftrace_caller) .globl ftrace_regs_caller .set ftrace_regs_caller,ftrace_caller + stg %r14,(__SF_GPRS+8*8)(%r15) # save traced function caller lgr %r1,%r15 #ifndef CC_USING_HOTPATCH aghi %r0,MCOUNT_RETURN_FIXUP
arch/x86/include/asm/acpi.h +1 -1
@@ -92,7 +92,7 @@ static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate)if (boot_cpu_data.x86 ==0x0F && boot_cpu_data.x86_vendor ==X86_VENDOR_AMD && boot_cpu_data.x86_model <=0x05 && - boot_cpu_data.x86_mask <0x0A ) + boot_cpu_data.x86_stepping <0x0A )return 1 ;else if (amd_e400_c1e_detected)return 1 ;
arch/x86/include/asm/cpu_device_id.h +27 -0
@@ -8,6 +8,33 @@#include <linux/mod_devicetable.h> +#define X86_STEPPINGS (mins, maxs) GENMASK(maxs, mins) + +/** +* X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE - Base macro for CPU matching +* @_vendor: The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY +* The name is expanded to X86_VENDOR_@_vendor +* @_family: The family number or X86_FAMILY_ANY +* @_model: The model number, model constant or X86_MODEL_ANY +* @_steppings: Bitmask for steppings, stepping constant or X86_STEPPING_ANY +* @_feature: A X86_FEATURE bit or X86_FEATURE_ANY +* @_data: Driver specific data or NULL. The internal storage +* format is unsigned long. The supplied value, pointer +* etc. is casted to unsigned long internally. +* +* Backport version to keep the SRBDS pile consistant. No shorter variants +* required for this. +*/ +#define X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE (_vendor, _family, _model, \ + _steppings, _feature, _data) { \ + .vendor = X86_VENDOR_##_vendor, \ + .family = _family, \ + .model = _model, \ + .steppings = _steppings, \ + .feature = _feature, \ + .driver_data = (unsigned long) _data \ +} +extern const struct x86_cpu_id *x86_match_cpu (const struct x86_cpu_id *match);#endif
arch/x86/include/asm/cpufeatures.h +2 -0
@@ -312,6 +312,7 @@/* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */ #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2)/* AVX-512 Neural Network Instructions */ #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3)/* AVX-512 Multiply Accumulation Single precision */ +#define X86_FEATURE_SRBDS_CTRL (18*32+ 9)/* "" SRBDS mitigation MSR available */ #define X86_FEATURE_MD_CLEAR (18*32+10)/* VERW clears CPU buffers */ #define X86_FEATURE_SPEC_CTRL (18*32+26)/* "" Speculation Control (IBRS + IBPB) */ #define X86_FEATURE_INTEL_STIBP (18*32+27)/* "" Single Thread Indirect Branch Predictors */
@@ -343,5 +344,6 @@#define X86_BUG_SWAPGS X86_BUG(21)/* CPU is affected by speculation through SWAPGS */ #define X86_BUG_TAA X86_BUG(22)/* CPU is affected by TSX Async Abort(TAA) */ #define X86_BUG_ITLB_MULTIHIT X86_BUG(23)/* CPU may incur MCE during certain page attribute changes */ +#define X86_BUG_SRBDS X86_BUG(24)/* CPU may leak RNG bits if not mitigated */ #endif /* _ASM_X86_CPUFEATURES_H */
arch/x86/include/asm/msr-index.h +4 -0
@@ -91,6 +91,10 @@#define TSX_CTRL_RTM_DISABLE BIT(0)/* Disable RTM feature */ #define TSX_CTRL_CPUID_CLEAR BIT(1)/* Disable TSX enumeration */ +/* SRBDS support */ +#define MSR_IA32_MCU_OPT_CTRL 0x00000123 +#define RNGDS_MITG_DIS BIT(0) +#define MSR_IA32_SYSENTER_CS 0x00000174#define MSR_IA32_SYSENTER_ESP 0x00000175#define MSR_IA32_SYSENTER_EIP 0x00000176
arch/x86/include/asm/processor.h +1 -1
@@ -88,7 +88,7 @@ struct cpuinfo_x86 {__u8 x86;/* CPU family */ __u8 x86_vendor;/* CPU vendor */ __u8 x86_model; -__u8 x86_mask; +__u8 x86_stepping;#ifdef CONFIG_X86_32 char wp_works_ok;/* It doesn't on 386's */
arch/x86/kernel/amd_nb.c +1 -1
@@ -105,7 +105,7 @@ int amd_cache_northbridges(void)if (boot_cpu_data.x86 ==0x10 && boot_cpu_data.x86_model >=0x8 && (boot_cpu_data.x86_model >0x9 || - boot_cpu_data.x86_mask >=0x1 )) + boot_cpu_data.x86_stepping >=0x1 )) amd_northbridges.flags |=AMD_NB_L3_INDEX_DISABLE ;if (boot_cpu_data.x86 ==0x15 )
arch/x86/kernel/asm-offsets_32.c +1 -1
@@ -20,7 +20,7 @@ void foo(void)OFFSET (CPUINFO_x86, cpuinfo_x86, x86);OFFSET (CPUINFO_x86_vendor, cpuinfo_x86, x86_vendor);OFFSET (CPUINFO_x86_model, cpuinfo_x86, x86_model); -OFFSET (CPUINFO_x86_mask, cpuinfo_x86, x86_mask); +OFFSET (CPUINFO_x86_stepping, cpuinfo_x86, x86_stepping);OFFSET (CPUINFO_cpuid_level, cpuinfo_x86, cpuid_level);OFFSET (CPUINFO_x86_capability, cpuinfo_x86, x86_capability);OFFSET (CPUINFO_x86_vendor_id, cpuinfo_x86, x86_vendor_id);
arch/x86/kernel/cpu/amd.c +13 -13
@@ -112,7 +112,7 @@ static void init_amd_k6(struct cpuinfo_x86 *c)return ; } -if (c->x86_model ==6 && c->x86_mask ==1 ) { +if (c->x86_model ==6 && c->x86_stepping ==1 ) {const int K6_BUG_LOOP =1000000 ;int n;void (*f_vide)(void );
@@ -142,7 +142,7 @@ static void init_amd_k6(struct cpuinfo_x86 *c)/* K6 with old style WHCR */ if (c->x86_model <8 || - (c->x86_model ==8 && c->x86_mask <8 )) { + (c->x86_model ==8 && c->x86_stepping <8 )) {/* We can only write allocate on the low 508Mb */ if (mbytes >508 ) mbytes =508 ;
@@ -161,7 +161,7 @@ static void init_amd_k6(struct cpuinfo_x86 *c)return ; } -if ((c->x86_model ==8 && c->x86_mask >7 ) || +if ((c->x86_model ==8 && c->x86_stepping >7 ) || c->x86_model ==9 || c->x86_model ==13 ) {/* The more serious chips .. */
@@ -214,7 +214,7 @@ static void init_amd_k7(struct cpuinfo_x86 *c)* are more robust with CLK_CTL set to 200xxxxx instead of 600xxxxx * As per AMD technical note 27212 0.2 */ -if ((c->x86_model ==8 && c->x86_mask >=1 ) || (c->x86_model >8 )) { +if ((c->x86_model ==8 && c->x86_stepping >=1 ) || (c->x86_model >8 )) {rdmsr (MSR_K7_CLK_CTL , l, h);if ((l &0xfff00000 ) !=0x20000000 ) { printk(KERN_INFO
@@ -235,12 +235,12 @@ static void init_amd_k7(struct cpuinfo_x86 *c)* but they are not certified as MP capable. */ /* Athlon 660/661 is valid. */ -if ((c->x86_model ==6 ) && ((c->x86_mask ==0 ) || - (c->x86_mask ==1 ))) +if ((c->x86_model ==6 ) && ((c->x86_stepping ==0 ) || + (c->x86_stepping ==1 )))return ;/* Duron 670 is valid */ -if ((c->x86_model ==7 ) && (c->x86_mask ==0 )) +if ((c->x86_model ==7 ) && (c->x86_stepping ==0 ))return ;/*
@@ -250,8 +250,8 @@ static void init_amd_k7(struct cpuinfo_x86 *c)* See http://www.heise.de/newsticker/data/jow-18.10.01-000 for * more. */ -if (((c->x86_model ==6 ) && (c->x86_mask >=2 )) || - ((c->x86_model ==7 ) && (c->x86_mask >=1 )) || +if (((c->x86_model ==6 ) && (c->x86_stepping >=2 )) || + ((c->x86_model ==7 ) && (c->x86_stepping >=1 )) || (c->x86_model >7 ))if (cpu_has (c,X86_FEATURE_MP ))return ;
@@ -563,7 +563,7 @@ static void early_init_amd(struct cpuinfo_x86 *c)/* Set MTRR capability flag if appropriate */ if (c->x86 ==5 )if (c->x86_model ==13 || c->x86_model ==9 || - (c->x86_model ==8 && c->x86_mask >=8 )) + (c->x86_model ==8 && c->x86_stepping >=8 ))set_cpu_cap (c,X86_FEATURE_K6_MTRR );#endif #if defined(CONFIG_X86_LOCAL_APIC ) && defined(CONFIG_PCI )
@@ -902,11 +902,11 @@ static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)/* AMD errata T13 (order #21922) */ if ((c->x86 ==6 )) {/* Duron Rev A0 */ -if (c->x86_model ==3 && c->x86_mask ==0 ) +if (c->x86_model ==3 && c->x86_stepping ==0 ) size =64 ;/* Tbird rev A1/A2 */ if (c->x86_model ==4 && - (c->x86_mask ==0 || c->x86_mask ==1 )) + (c->x86_stepping ==0 || c->x86_stepping ==1 )) size =256 ; }return size;
@@ -1043,7 +1043,7 @@ static bool cpu_has_amd_erratum(struct cpuinfo_x86 *cpu, const int *erratum) }/* OSVW unavailable or ID unknown, match family-model-stepping range */ - ms = (cpu->x86_model <<4 ) | cpu->x86_mask; + ms = (cpu->x86_model <<4 ) | cpu->x86_stepping;while ((range = *erratum++)) if ((cpu->x86 == AMD_MODEL_RANGE_FAMILY(range)) && (ms >= AMD_MODEL_RANGE_START(range)) &&
arch/x86/kernel/cpu/bugs.c +106 -0
140 lines not on this page · raw message
arch/x86/kernel/cpu/centaur.c +2 -2
@@ -134,7 +134,7 @@ static void init_centaur(struct cpuinfo_x86 *c)clear_cpu_cap (c,X86_FEATURE_TSC );break ;case 8 : -switch (c->x86_mask) { +switch (c->x86_stepping) {default : name ="2" ;break ;
@@ -209,7 +209,7 @@ centaur_size_cache(struct cpuinfo_x86 *c, unsigned int size)* - Note, it seems this may only be in engineering samples. */ if ((c->x86 ==6 ) && (c->x86_model ==9 ) && - (c->x86_mask ==1 ) && (size ==65 )) + (c->x86_stepping ==1 ) && (size ==65 )) size -=1 ;return size; }
arch/x86/kernel/cpu/common.c +48 -14
128 lines not on this page · raw message
arch/x86/kernel/cpu/cpu.h +1 -0
@@ -64,6 +64,7 @@ extern void get_cpu_cap(struct cpuinfo_x86 *c);extern void cpu_detect_cache_sizes (struct cpuinfo_x86 *c);extern void x86_spec_ctrl_setup_ap (void ); +extern void update_srbds_msr (void );extern u64 x86_read_arch_cap_msr (void );
arch/x86/kernel/cpu/cyrix.c +1 -1
@@ -212,7 +212,7 @@ static void init_cyrix(struct cpuinfo_x86 *c)/* common case step number/rev -- exceptions handled below */ c->x86_model = (dir1 >>4 ) +1 ; - c->x86_mask = dir1 &0xf ; + c->x86_stepping = dir1 &0xf ;/* Now cook; the original recipe is by Channing Corn, from Cyrix. * We do the same thing for each generation: we work out
arch/x86/kernel/cpu/intel.c +10 -10
@@ -80,7 +80,7 @@ static bool bad_spectre_microcode(struct cpuinfo_x86 *c)for (i =0 ; i <ARRAY_SIZE (spectre_bad_microcodes); i++) {if (c->x86_model == spectre_bad_microcodes[i].model && - c->x86_mask == spectre_bad_microcodes[i].stepping) + c->x86_stepping == spectre_bad_microcodes[i].stepping)return (c->microcode <= spectre_bad_microcodes[i].microcode); }return false;
@@ -130,7 +130,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)* need the microcode to have already been loaded... so if it is * not, recommend a BIOS update and disable large pages. */ -if (c->x86 ==6 && c->x86_model ==0x1c && c->x86_mask <=2 && +if (c->x86 ==6 && c->x86_model ==0x1c && c->x86_stepping <=2 && c->microcode <0x20e ) {printk (KERN_WARNING "Atom PSE erratum detected, BIOS microcode update recommended\n" );clear_cpu_cap (c,X86_FEATURE_PSE );
@@ -146,7 +146,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)/* CPUID workaround for 0F33/0F34 CPU */ if (c->x86 ==0xF && c->x86_model ==0x3 - && (c->x86_mask ==0x3 || c->x86_mask ==0x4 )) + && (c->x86_stepping ==0x3 || c->x86_stepping ==0x4 )) c->x86_phys_bits =36 ;/*
@@ -246,8 +246,8 @@ int ppro_with_ram_bug(void)if (boot_cpu_data.x86_vendor ==X86_VENDOR_INTEL && boot_cpu_data.x86 ==6 && boot_cpu_data.x86_model ==1 && - boot_cpu_data.x86_mask <8 ) { -printk (KERN_INFO "Pentium Pro with Errata#50 detected. Taking evasive action.\n" ); + boot_cpu_data.x86_stepping <8 ) { +pr_info ("Pentium Pro with Errata#50 detected. Taking evasive action.\n" );return 1 ; }return 0 ;
@@ -263,7 +263,7 @@ static void intel_smp_check(struct cpuinfo_x86 *c)* Mask B, Pentium, but not Pentium MMX */ if (c->x86 ==5 && - c->x86_mask >=1 && c->x86_mask <=4 && + c->x86_stepping >=1 && c->x86_stepping <=4 && c->x86_model <=3 ) {/* * Remember we have B step Pentia with bugs
@@ -306,7 +306,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it until * model 3 mask 3 */ -if ((c->x86<<8 | c->x86_model<<4 | c->x86_mask) <0x633 ) +if ((c->x86<<8 | c->x86_model<<4 | c->x86_stepping) <0x633 )clear_cpu_cap (c,X86_FEATURE_SEP );/*
@@ -324,7 +324,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)* P4 Xeon errata 037 workaround. * Hardware prefetcher may cause stale data to be loaded into the cache. */ -if ((c->x86 ==15 ) && (c->x86_model ==1 ) && (c->x86_mask ==1 )) { +if ((c->x86 ==15 ) && (c->x86_model ==1 ) && (c->x86_stepping ==1 )) {if (msr_set_bit (MSR_IA32_MISC_ENABLE ,MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE_BIT ) >0 ) {
@@ -340,7 +340,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)* Specification Update"). */ if (cpu_has_apic && (c->x86<<8 | c->x86_model<<4 ) ==0x520 && - (c->x86_mask <0x6 || c->x86_mask ==0xb )) + (c->x86_stepping <0x6 || c->x86_stepping ==0xb ))set_cpu_bug (c,X86_BUG_11AP );
@@ -555,7 +555,7 @@ static void init_intel(struct cpuinfo_x86 *c)case 6 :if (l2 ==128 ) p ="Celeron (Mendocino)" ; -else if (c->x86_mask ==0 || c->x86_mask ==5 ) +else if (c->x86_stepping ==0 || c->x86_stepping ==5 ) p ="Celeron-A" ;break ;
arch/x86/kernel/cpu/match.c +6 -1
@@ -33,13 +33,18 @@ const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match)const struct x86_cpu_id *m;struct cpuinfo_x86 *c = &boot_cpu_data; -for (m = match; m->vendor | m->family | m->model | m->feature; m++) { +for (m = match; + m->vendor | m->family | m->model | m->steppings | m->feature; + m++) {if (m->vendor !=X86_VENDOR_ANY && c->x86_vendor != m->vendor)continue ;if (m->family !=X86_FAMILY_ANY && c->x86 != m->family)continue ;if (m->model !=X86_MODEL_ANY && c->x86_model != m->model)continue ; +if (m->steppings !=X86_STEPPING_ANY && + !(BIT (c->x86_stepping) & m->steppings)) +continue ;if (m->feature !=X86_FEATURE_ANY && !cpu_has (c, m->feature))continue ;return m;
arch/x86/kernel/cpu/microcode/intel.c +2 -2
@@ -1013,7 +1013,7 @@ static bool is_blacklisted(unsigned int cpu)*/ if (c->x86 ==6 && c->x86_model ==79 && - c->x86_mask ==0x01 && + c->x86_stepping ==0x01 && llc_size_per_core >2621440 && c->microcode <0x0b000021 ) {pr_err_once ("Erratum BDF90: late loading with revision < 0x0b000021 (0x%x) disabled.\n" , c->microcode);
@@ -1036,7 +1036,7 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,return UCODE_NFOUND ;sprintf (name,"intel-ucode/%02x-%02x-%02x" , - c->x86, c->x86_model, c->x86_mask); + c->x86, c->x86_model, c->x86_stepping);if (request_firmware_direct (&firmware, name, device)) {pr_debug ("data file %s load failed\n" , name);
arch/x86/kernel/cpu/mtrr/generic.c +1 -1
@@ -860,7 +860,7 @@ int generic_validate_add_page(unsigned long base, unsigned long size,*/ if (is_cpu (INTEL ) && boot_cpu_data.x86 ==6 && boot_cpu_data.x86_model ==1 && - boot_cpu_data.x86_mask <=7 ) { + boot_cpu_data.x86_stepping <=7 ) {if (base & ((1 << (22 -PAGE_SHIFT )) -1 )) {pr_warning ("mtrr: base(0x%lx000) is not 4 MiB aligned\n" , base);return -EINVAL ;
arch/x86/kernel/cpu/mtrr/main.c +2 -2
@@ -699,8 +699,8 @@ void __init mtrr_bp_init(void)if (boot_cpu_data.x86_vendor ==X86_VENDOR_INTEL && boot_cpu_data.x86 ==0xF && boot_cpu_data.x86_model ==0x3 && - (boot_cpu_data.x86_mask ==0x3 || - boot_cpu_data.x86_mask ==0x4 )) + (boot_cpu_data.x86_stepping ==0x3 || + boot_cpu_data.x86_stepping ==0x4 )) phys_addr =36 ; size_or_mask =SIZE_OR_MASK_BITS (phys_addr);
arch/x86/kernel/cpu/perf_event_intel.c +1 -1
@@ -3052,7 +3052,7 @@ static int intel_snb_pebs_broken(int cpu)break ;case 45 :/* SNB-EP */ -switch (cpu_data (cpu).x86_mask) { +switch (cpu_data (cpu).x86_stepping) {case 6 : rev =0x618 ;break ;case 7 : rev =0x70c ;break ; }
arch/x86/kernel/cpu/perf_event_intel_lbr.c +1 -1
@@ -1017,7 +1017,7 @@ void __init intel_pmu_lbr_init_atom(void)* on PMU interrupt */ if (boot_cpu_data.x86_model ==28 - && boot_cpu_data.x86_mask <10 ) { + && boot_cpu_data.x86_stepping <10 ) {pr_cont ("LBR disabled due to erratum" );return ; }
arch/x86/kernel/cpu/perf_event_p6.c +1 -1
@@ -233,7 +233,7 @@ static __initconst const struct x86_pmu p6_pmu = {static __init void p6_pmu_rdpmc_quirk (void ) { -if (boot_cpu_data.x86_mask <9 ) { +if (boot_cpu_data.x86_stepping <9 ) {/* * PPro erratum 26; fixed in stepping 9 and above. */
arch/x86/kernel/cpu/proc.c +2 -2
@@ -70,8 +70,8 @@ static int show_cpuinfo(struct seq_file *m, void *v) c->x86_model, c->x86_model_id[0] ? c->x86_model_id : "unknown"); -if (c->x86_mask || c->cpuid_level >=0 ) -seq_printf (m,"stepping\t: %d\n" , c->x86_mask); +if (c->x86_stepping || c->cpuid_level >=0 ) +seq_printf (m,"stepping\t: %d\n" , c->x86_stepping);else seq_puts (m,"stepping\t: unknown\n" );if (c->microcode)
arch/x86/kernel/head_32.S +2 -2
@@ -34,7 +34,7 @@ #define X86 new_cpu_data+CPUINFO_x86 #define X86_VENDOR new_cpu_data+CPUINFO_x86_vendor #define X86_MODEL new_cpu_data+CPUINFO_x86_model -#define X86_MASK new_cpu_data+CPUINFO_x86_mask +#define X86_STEPPING new_cpu_data+CPUINFO_x86_stepping #define X86_HARD_MATH new_cpu_data+CPUINFO_hard_math #define X86_CPUID new_cpu_data+CPUINFO_cpuid_level #define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability
@@ -440,7 +440,7 @@ enable_paging: shrb $4,%al movb %al,X86_MODEL andb $0x0f,%cl # mask mask revision - movb %cl,X86_MASK + movb %cl,X86_STEPPING movl %edx,X86_CAPABILITY is486:
arch/x86/kernel/mpparse.c +1 -1
@@ -407,7 +407,7 @@ static inline void __init construct_default_ISA_mptable(int mpc_default_type) processor.apicver = mpc_default_type >4 ?0x10 :0x01 ; processor.cpuflag =CPU_ENABLED ; processor.cpufeature = (boot_cpu_data.x86 <<8 ) | - (boot_cpu_data.x86_model <<4 ) | boot_cpu_data.x86_mask; + (boot_cpu_data.x86_model <<4 ) | boot_cpu_data.x86_stepping; processor.featureflag = boot_cpu_data.x86_capability[0 ]; processor.reserved[0 ] =0 ; processor.reserved[1 ] =0 ;
arch/x86/mm/mmio-mod.c +2 -2
@@ -385,7 +385,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;
@@ -415,7 +415,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) {
drivers/base/cpu.c +8 -0
@@ -549,6 +549,12 @@ ssize_t __weak cpu_show_itlb_multihit(struct device *dev,return sprintf (buf,"Not affected\n" ); } +ssize_t __weak cpu_show_srbds (struct device *dev, +struct device_attribute *attr,char *buf) +{ +return sprintf (buf,"Not affected\n" ); +} + static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL); static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL); static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL);
@@ -557,6 +563,7 @@ static DEVICE_ATTR(l1tf, 0444, cpu_show_l1tf, NULL); static DEVICE_ATTR(mds, 0444, cpu_show_mds, NULL); static DEVICE_ATTR(tsx_async_abort, 0444, cpu_show_tsx_async_abort, NULL); static DEVICE_ATTR(itlb_multihit, 0444, cpu_show_itlb_multihit, NULL); +static DEVICE_ATTR(srbds, 0444, cpu_show_srbds, NULL);static struct attribute *cpu_root_vulnerabilities_attrs[] = { &dev_attr_meltdown.attr,
@@ -567,6 +574,7 @@ static struct attribute *cpu_root_vulnerabilities_attrs[] = { &dev_attr_mds.attr, &dev_attr_tsx_async_abort.attr, &dev_attr_itlb_multihit.attr, + &dev_attr_srbds.attr, NULL };
drivers/char/hw_random/via-rng.c +1 -1
@@ -166,7 +166,7 @@ static int via_rng_init(struct hwrng *rng)/* Enable secondary noise source on CPUs where it is present. */ /* Nehemiah stepping 8 and higher */ -if ((c->x86_model ==9 ) && (c->x86_mask >7 )) +if ((c->x86_model ==9 ) && (c->x86_stepping >7 )) lo |=VIA_NOISESRC2 ;/* Esther */
drivers/cpufreq/acpi-cpufreq.c +1 -1
@@ -639,7 +639,7 @@ static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c)if (c->x86_vendor ==X86_VENDOR_INTEL ) {if ((c->x86 ==15 ) && (c->x86_model ==6 ) && - (c->x86_mask ==8 )) { + (c->x86_stepping ==8 )) {printk (KERN_INFO "acpi-cpufreq: Intel(R) " "Xeon(R) 7100 Errata AL30, processors may " "lock up on frequency changes: disabling "
drivers/cpufreq/longhaul.c +3 -3
@@ -786,7 +786,7 @@ static int longhaul_cpu_init(struct cpufreq_policy *policy)break ;case 7 : -switch (c->x86_mask) { +switch (c->x86_stepping) {case 0 : longhaul_version =TYPE_LONGHAUL_V1 ; cpu_model =CPU_SAMUEL2 ;
@@ -798,7 +798,7 @@ static int longhaul_cpu_init(struct cpufreq_policy *policy)break ; case 1 ... 15: longhaul_version =TYPE_LONGHAUL_V2 ; -if (c->x86_mask <8 ) { +if (c->x86_stepping <8 ) { cpu_model =CPU_SAMUEL2 ; cpuname ="C3 'Samuel 2' [C5B]" ; }else {
@@ -825,7 +825,7 @@ static int longhaul_cpu_init(struct cpufreq_policy *policy) numscales =32 ;memcpy (mults, nehemiah_mults,sizeof (nehemiah_mults));memcpy (eblcr, nehemiah_eblcr,sizeof (nehemiah_eblcr)); -switch (c->x86_mask) { +switch (c->x86_stepping) { case 0 ... 1: cpu_model =CPU_NEHEMIAH ; cpuname ="C3 'Nehemiah A' [C5XLOE]" ;
drivers/cpufreq/p4-clockmod.c +1 -1
@@ -176,7 +176,7 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)#endif /* Errata workaround */ - cpuid = (c->x86 <<8 ) | (c->x86_model <<4 ) | c->x86_mask; + cpuid = (c->x86 <<8 ) | (c->x86_model <<4 ) | c->x86_stepping;switch (cpuid) {case 0x0f07 :case 0x0f0a :
drivers/cpufreq/powernow-k7.c +1 -1
@@ -132,7 +132,7 @@ static int check_powernow(void)return 0 ; } -if ((c->x86_model ==6 ) && (c->x86_mask ==0 )) { +if ((c->x86_model ==6 ) && (c->x86_stepping ==0 )) { printk(KERN_INFO PFX "K7 660[A0] core detected, " "enabling errata workarounds\n"); have_a0 =1 ;
drivers/cpufreq/speedstep-centrino.c +2 -2
@@ -36,7 +36,7 @@ struct cpu_id {__u8 x86;/* CPU family */ __u8 x86_model;/* model */ -__u8 x86_mask;/* stepping */ +__u8 x86_stepping;/* stepping */ };enum {
@@ -276,7 +276,7 @@ static int centrino_verify_cpu_id(const struct cpuinfo_x86 *c, {if ((c->x86 == x->x86) && (c->x86_model == x->x86_model) && - (c->x86_mask == x->x86_mask)) + (c->x86_stepping == x->x86_stepping))return 1 ;return 0 ; }
drivers/cpufreq/speedstep-lib.c +3 -3
@@ -270,9 +270,9 @@ unsigned int speedstep_detect_processor(void) ebx =cpuid_ebx (0x00000001 ); ebx &=0x000000FF ; -pr_debug ("ebx value is %x, x86_mask is %x\n" , ebx, c->x86_mask); +pr_debug ("ebx value is %x, x86_stepping is %x\n" , ebx, c->x86_stepping); -switch (c->x86_mask) { +switch (c->x86_stepping) {case 4 :/* * B-stepping [M-P4-M]
@@ -359,7 +359,7 @@ unsigned int speedstep_detect_processor(void) msr_lo, msr_hi);if ((msr_hi & (1 <<18 )) && (relaxed_check ?1 : (msr_hi & (3 <<24 )))) { -if (c->x86_mask ==0x01 ) { +if (c->x86_stepping ==0x01 ) {pr_debug ("early PIII version\n" );return SPEEDSTEP_CPU_PIII_C_EARLY ; }else
drivers/crypto/padlock-aes.c +1 -1
@@ -535,7 +535,7 @@ static int __init padlock_init(void) printk(KERN_NOTICE PFX "Using VIA PadLock ACE for AES algorithm.\n"); -if (c->x86 ==6 && c->x86_model ==15 && c->x86_mask ==2 ) { +if (c->x86 ==6 && c->x86_model ==15 && c->x86_stepping ==2 ) { ecb_fetch_blocks =MAX_ECB_FETCH_BLOCKS ; cbc_fetch_blocks =MAX_CBC_FETCH_BLOCKS ; printk(KERN_NOTICE PFX "VIA Nano stepping 2 detected: enabling workaround.\n");
drivers/edac/amd64_edac.c +1 -1
@@ -2715,7 +2715,7 @@ static struct amd64_family_type *per_family_init(struct amd64_pvt *pvt)struct amd64_family_type *fam_type =NULL ; pvt->ext_model = boot_cpu_data.x86_model >>4 ; - pvt->stepping = boot_cpu_data.x86_mask; + pvt->stepping = boot_cpu_data.x86_stepping; pvt->model = boot_cpu_data.x86_model; pvt->fam = boot_cpu_data.x86;
drivers/edac/mce_amd.c +1 -1
@@ -760,7 +760,7 @@ int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data) pr_emerg(HW_ERR "CPU:%d (%x:%x:%x) MC%d_STATUS[%s|%s|%s|%s|%s", m->extcpu, - c->x86, c->x86_model, c->x86_mask, + c->x86, c->x86_model, c->x86_stepping, m->bank, ((m->status & MCI_STATUS_OVER) ? "Over" : "-"), ((m->status & MCI_STATUS_UC) ? "UE" :
drivers/hwmon/coretemp.c +3 -3
@@ -269,13 +269,13 @@ static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)for (i =0 ; i <ARRAY_SIZE (tjmax_model_table); i++) {const struct tjmax_model *tm = &tjmax_model_table[i];if (c->x86_model == tm->model && - (tm->mask ==ANY || c->x86_mask == tm->mask)) + (tm->mask ==ANY || c->x86_stepping == tm->mask))return tm->tjmax; }/* Early chips have no MSR for TjMax */ -if (c->x86_model ==0xf && c->x86_mask <4 ) +if (c->x86_model ==0xf && c->x86_stepping <4 ) usemsr_ee =0 ;if (c->x86_model >0xe && usemsr_ee) {
@@ -426,7 +426,7 @@ static int chk_ucode_version(unsigned int cpu)* Readings might stop update when processor visited too deep sleep, * fixed for stepping D0 (6EC). */ -if (c->x86_model ==0xe && c->x86_mask <0xc && c->microcode <0x39 ) { +if (c->x86_model ==0xe && c->x86_stepping <0xc && c->microcode <0x39 ) {pr_err ("Errata AE18 not fixed, update BIOS or microcode of the CPU!\n" );return -ENODEV ; }
drivers/hwmon/hwmon-vid.c +1 -1
@@ -293,7 +293,7 @@ u8 vid_which_vrm(void)if (c->x86 <6 )/* Any CPU with family lower than 6 */ return 0 ;/* doesn't have VID */ - vrm_ret =find_vrm (c->x86, c->x86_model, c->x86_mask, c->x86_vendor); + vrm_ret =find_vrm (c->x86, c->x86_model, c->x86_stepping, c->x86_vendor);if (vrm_ret ==134 ) vrm_ret =get_via_model_d_vrm ();if (vrm_ret ==0 )
drivers/hwmon/k10temp.c +1 -1
@@ -179,7 +179,7 @@ static bool has_erratum_319(struct pci_dev *pdev)* and AM3 formats, but that's the best we can do. */ return boot_cpu_data.x86_model <4 || - (boot_cpu_data.x86_model ==4 && boot_cpu_data.x86_mask <=2 ); + (boot_cpu_data.x86_model ==4 && boot_cpu_data.x86_stepping <=2 ); } static int k10temp_probe(struct pci_dev *pdev,
drivers/hwmon/k8temp.c +1 -1
@@ -187,7 +187,7 @@ static int k8temp_probe(struct pci_dev *pdev,return -ENOMEM ; model = boot_cpu_data.x86_model; - stepping = boot_cpu_data.x86_mask; + stepping = boot_cpu_data.x86_stepping;/* feature available since SH-C0, exclude older revisions */ if ((model == 4 && stepping == 0) ||
drivers/iio/light/vcnl4000.c +2 -4
@@ -56,7 +56,6 @@ static int vcnl4000_measure(struct vcnl4000_data *data, u8 req_mask, u8 rdy_mask, u8 data_reg, int *val) { int tries = 20; -__be16 buf;int ret; ret = i2c_smbus_write_byte_data(data->client, VCNL4000_COMMAND,
@@ -80,12 +79,11 @@ static int vcnl4000_measure(struct vcnl4000_data *data, u8 req_mask,return -EIO ; } - ret =i2c_smbus_read_i2c_block_data (data->client, - data_reg,sizeof (buf), (u8 *) &buf); + ret =i2c_smbus_read_word_swapped (data->client, data_reg);if (ret <0 )return ret; - *val =be16_to_cpu (buf); + *val = ret;return 0 ; }
drivers/infiniband/hw/mlx4/mr.c +5 -2
@@ -246,8 +246,11 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags, }if (flags &IB_MR_REREG_ACCESS ) { -if (ib_access_writable (mr_access_flags) && !mmr->umem->writable) -return -EPERM ; +if (ib_access_writable (mr_access_flags) && + !mmr->umem->writable) { + err = -EPERM ; + goto release_mpt_entry; + } err =mlx4_mr_hw_change_access (dev->dev, *pmpt_entry,convert_access (mr_access_flags));
drivers/net/can/slcan.c +1 -2
@@ -618,10 +618,9 @@ err_free_chan: sl->tty =NULL ; tty->disc_data =NULL ;clear_bit (SLF_INUSE , &sl->flags); -slc_free_netdev (sl->dev);/* do not call free_netdev before rtnl_unlock */ rtnl_unlock (); -free_netdev (sl->dev); +slc_free_netdev (sl->dev);return err; err_exit:
drivers/net/ethernet/apple/bmac.c +1 -1
@@ -1187,7 +1187,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
@@ -45,6 +45,7 @@#include <asm/ucc.h> #include <asm/ucc_fast.h> #include <asm/machdep.h> +#include <net/sch_generic.h> #include "ucc_geth.h"
@@ -1551,11 +1552,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);
@@ -1568,7 +1566,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/stmicro/stmmac/dwmac-ipq806x.c +13 -0
@@ -328,6 +328,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/ppp/pppoe.c +3 -0
@@ -494,6 +494,9 @@ static int pppoe_disc_rcv(struct sk_buff *skb, struct net_device *dev,if (!skb) goto out; +if (skb->pkt_type !=PACKET_HOST ) + goto abort; +if (!pskb_may_pull (skb,sizeof (struct pppoe_hdr ))) goto abort;
drivers/net/slip/slip.c +3 -0
@@ -867,7 +867,10 @@ err_free_chan: sl->tty =NULL ; tty->disc_data =NULL ;clear_bit (SLF_INUSE , &sl->flags); +/* do not call free_netdev before rtnl_unlock */ +rtnl_unlock ();sl_free_netdev (sl->dev); +return err; err_exit:rtnl_unlock ();
drivers/nfc/st21nfca/dep.c +3 -1
@@ -184,8 +184,10 @@ static int st21nfca_tm_send_atr_res(struct nfc_hci_dev *hdev,memcpy (atr_res->gbi, atr_req->gbi, gb_len); r =nfc_set_remote_general_bytes (hdev->ndev, atr_res->gbi, gb_len); -if (r <0 ) +if (r <0 ) { +kfree_skb (skb);return r; + } } info->dep_info.curr_nfc_dep_pni =0 ;
drivers/platform/x86/acer-wmi.c +4 -5
@@ -1826,7 +1826,7 @@ static acpi_status __init acer_wmi_get_handle_cb(acpi_handle ah, u32 level,if (!strcmp (ctx,"SENR" )) {if (acpi_bus_get_device (ah, &dev))return AE_OK ; -if (!strcmp (ACER_WMID_ACCEL_HID ,acpi_device_hid (dev))) +if (strcmp (ACER_WMID_ACCEL_HID ,acpi_device_hid (dev)))return AE_OK ; }else return AE_OK ;
@@ -1847,8 +1847,7 @@ static int __init acer_wmi_get_handle(const char *name, const char *prop, handle =NULL ; status =acpi_get_devices (prop, acer_wmi_get_handle_cb, (void *)name, &handle); - -if (ACPI_SUCCESS (status)) { +if (ACPI_SUCCESS (status) && handle) { *ah = handle;return 0 ; }else {
@@ -2199,8 +2198,8 @@ static int __init acer_wmi_init(void)if (err)return err; err =acer_wmi_accel_setup (); -if (err) -return err; +if (err && err != -ENODEV ) +pr_warn ("Cannot enable accelerometer\n" ); } err =platform_driver_register (&acer_platform_driver);
drivers/scsi/scsi_devinfo.c +13 -10
@@ -386,8 +386,8 @@ EXPORT_SYMBOL(scsi_dev_info_list_add_keyed);/** * scsi_dev_info_list_find - find a matching dev_info list entry. -* @vendor: vendor string -* @model: model (product) string +* @vendor: full vendor string +* @model: full model (product) string * @key: specify list to use * * Description:
@@ -402,7 +402,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,struct scsi_dev_info_list *devinfo;struct scsi_dev_info_list_table *devinfo_table =scsi_devinfo_lookup_by_key (key); -size_t vmax, mmax; +size_t vmax, mmax, mlen;const char *vskip, *mskip;if (IS_ERR (devinfo_table))
@@ -441,15 +441,18 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor, dev_info_list) {if (devinfo->compatible) {/* -* Behave like the older version of get_device_flags. +* vendor strings must be an exact match */ -if (memcmp (devinfo->vendor, vskip, vmax) || - (vmax <sizeof (devinfo->vendor) && - devinfo->vendor[vmax])) +if (vmax !=strlen (devinfo->vendor) || +memcmp (devinfo->vendor, vskip, vmax))continue ; -if (memcmp (devinfo->model, mskip, mmax) || - (mmax <sizeof (devinfo->model) && - devinfo->model[mmax])) + +/* +* @model specifies the full string, and +* must be larger or equal to devinfo->model +*/ + mlen =strlen (devinfo->model); +if (mmax < mlen ||memcmp (devinfo->model, mskip, mlen))continue ;return devinfo; }else {
drivers/scsi/ufs/ufshcd.c +1 -0
@@ -1374,6 +1374,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)ufshcd_compose_upiu (hba, lrbp); err =ufshcd_map_sg (lrbp);if (err) { +ufshcd_release (hba); lrbp->cmd =NULL ;clear_bit_unlock (tag, &hba->lrb_in_use); goto out;
drivers/spi/spi-dw.c +3 -0
@@ -306,6 +306,9 @@ static int dw_spi_transfer_one(struct spi_master *master, dws->len = transfer->len;spin_unlock_irqrestore (&dws->buf_lock, flags); +/* Ensure dw->rx and dw->rx_end are visible */ +smp_mb (); +spi_enable_chip (dws,0 );/* Handle per transfer options for bpw and speed */
drivers/staging/rtl8712/wifi.h +1 -8
@@ -466,7 +466,7 @@ static inline unsigned char *get_hdr_bssid(unsigned char *pframe)/* block-ack parameters */ #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002#define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C -#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0 +#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0#define IEEE80211_DELBA_PARAM_TID_MASK 0xF000#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
@@ -560,13 +560,6 @@ struct ieee80211_ht_addt_info {#define IEEE80211_HT_IE_NON_GF_STA_PRSNT 0x0004#define IEEE80211_HT_IE_NON_HT_STA_PRSNT 0x0010 -/* block-ack parameters */ -#define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002 -#define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C -#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0 -#define IEEE80211_DELBA_PARAM_TID_MASK 0xF000 -#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800 -/* * A-PMDU buffer sizes * According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2)
drivers/tty/vt/keyboard.c +16 -10
@@ -125,7 +125,11 @@ static DEFINE_SPINLOCK(func_buf_lock); /* guard 'func_buf' and friends */static unsigned long key_down[BITS_TO_LONGS (KEY_CNT )];/* keyboard key bitmap */ static unsigned char shift_down[NR_SHIFT ];/* shift state counters.. */ static bool dead_key_next; -static int npadch =-1 ;/* -1 or number assembled on pad */ + +/* Handles a number being assembled on the number pad */ +static bool npadch_active; +static unsigned int npadch_value; +static unsigned int diacr;static char rep;/* flag telling character repeat */
@@ -815,12 +819,12 @@ static void k_shift(struct vc_data *vc, unsigned char value, char up_flag) shift_state &= ~(1 << value);/* kludge */ -if (up_flag && shift_state != old_state && npadch !=-1 ) { +if (up_flag && shift_state != old_state && npadch_active) {if (kbd->kbdmode ==VC_UNICODE ) -to_utf8 (vc, npadch); +to_utf8 (vc, npadch_value);else -put_queue (vc, npadch &0xff ); - npadch =-1 ; +put_queue (vc, npadch_value &0xff ); + npadch_active = false; } }
@@ -838,7 +842,7 @@ static void k_meta(struct vc_data *vc, unsigned char value, char up_flag)static void k_ascii (struct vc_data *vc,unsigned char value,char up_flag) { -int base; +unsigned int base;if (up_flag)return ;
@@ -852,10 +856,12 @@ static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag) base =16 ; } -if (npadch ==-1 ) - npadch = value; -else - npadch = npadch * base + value; +if (!npadch_active) { + npadch_value =0 ; + npadch_active = true; + } + + npadch_value = npadch_value * base + value; }static void k_lock (struct vc_data *vc,unsigned char value,char up_flag)
drivers/usb/gadget/function/f_uac2.c +2 -2
@@ -1069,13 +1069,13 @@ afunc_bind(struct usb_configuration *cfg, struct usb_function *fn) agdev->out_ep =usb_ep_autoconfig (gadget, &fs_epout_desc);if (!agdev->out_ep) {dev_err (dev,"%s:%d Error!\n" , __func__, __LINE__); -return ret; +return -ENODEV ; } agdev->in_ep =usb_ep_autoconfig (gadget, &fs_epin_desc);if (!agdev->in_ep) {dev_err (dev,"%s:%d Error!\n" , __func__, __LINE__); -return ret; +return -ENODEV ; } uac2->p_prm.uac2 = uac2;
drivers/usb/serial/option.c +4 -0
@@ -1146,6 +1146,10 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1031, 0xff), /* Telit LE910C1-EUX */ + .driver_info = NCTRL(0) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1033, 0xff), /* Telit LE910C1-EUX (ECM) */ + .driver_info = NCTRL(0) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG0), .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG1),
drivers/usb/serial/qcserial.c +1 -0
@@ -177,6 +177,7 @@ static const struct usb_device_id id_table[] = { {DEVICE_SWI(0x413c, 0x81b3)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ {DEVICE_SWI(0x413c, 0x81b5)}, /* Dell Wireless 5811e QDL */ {DEVICE_SWI(0x413c, 0x81b6)}, /* Dell Wireless 5811e QDL */ + {DEVICE_SWI(0x413c, 0x81cb)}, /* Dell Wireless 5816e QDL */ {DEVICE_SWI(0x413c, 0x81cc)}, /* Dell Wireless 5816e */ {DEVICE_SWI(0x413c, 0x81cf)}, /* Dell Wireless 5819 */ {DEVICE_SWI(0x413c, 0x81d0)}, /* Dell Wireless 5819 */
drivers/usb/serial/usb_wwan.c +4 -0
@@ -305,6 +305,10 @@ static void usb_wwan_indat_callback(struct urb *urb)if (status) {dev_dbg (dev,"%s: nonzero status: %d on endpoint %02x.\n" , __func__, status, endpoint); + +/* don't resubmit on fatal errors */ +if (status == -ESHUTDOWN || status == -ENOENT ) +return ; }else {if (urb->actual_length) { tty_insert_flip_string(&port->port, data,
drivers/video/fbdev/geode/video_gx.c +1 -1
@@ -127,7 +127,7 @@ void gx_set_dclk_frequency(struct fb_info *info)int timeout =1000 ;/* Rev. 1 Geode GXs use a 14 MHz reference clock instead of 48 MHz. */ -if (cpu_data (0 ).x86_mask ==1 ) { +if (cpu_data (0 ).x86_stepping ==1 ) { pll_table = gx_pll_table_14MHz; pll_table_len =ARRAY_SIZE (gx_pll_table_14MHz); }else {
include/linux/mod_devicetable.h +6 -0
@@ -572,6 +572,10 @@ struct mips_cdmm_device_id {/* * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id. * Although gcc seems to ignore this error, clang fails without this define. +* +* Note: The ordering of the struct is different from upstream because the +* static initializers in kernels < 5.7 still use C89 style while upstream +* has been converted to proper C99 initializers. */ #define x86cpu_device_id x86_cpu_idstruct x86_cpu_id {
@@ -580,6 +584,7 @@ struct x86_cpu_id {__u16 model;__u16 feature;/* bit index */ kernel_ulong_t driver_data; +__u16 steppings; };#define X86_FEATURE_MATCH (x) \
@@ -588,6 +593,7 @@ struct x86_cpu_id {#define X86_VENDOR_ANY 0xffff#define X86_FAMILY_ANY 0#define X86_MODEL_ANY 0 +#define X86_STEPPING_ANY 0#define X86_FEATURE_ANY 0/* Same as FPU, you can't test for that */ /*
include/uapi/linux/mmc/ioctl.h +1 -0
@@ -2,6 +2,7 @@#define LINUX_MMC_IOCTL_H #include <linux/types.h> +#include <linux/major.h> struct mmc_ioc_cmd {/* Implies direction of data. true = write, false = read */
kernel/events/uprobes.c +10 -4
@@ -602,10 +602,6 @@ static int prepare_uprobe(struct uprobe *uprobe, struct file *file,if (ret) goto out; -/* uprobe_write_opcode() assumes we don't cross page boundary */ -BUG_ON ((uprobe->offset & ~PAGE_MASK ) + -UPROBE_SWBP_INSN_SIZE >PAGE_SIZE ); -smp_wmb ();/* pairs with the smp_rmb() in handle_swbp() */ set_bit (UPROBE_COPY_INSN , &uprobe->flags);
@@ -884,6 +880,13 @@ int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *if (offset >i_size_read (inode))return -EINVAL ; +/* +* This ensures that copy_from_page() and copy_to_page() +* can't cross page boundary. +*/ +if (!IS_ALIGNED (offset,UPROBE_SWBP_INSN_SIZE )) +return -EINVAL ; + retry: uprobe =alloc_uprobe (inode, offset);if (!uprobe)
@@ -1692,6 +1695,9 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)uprobe_opcode_t opcode;int result; +if (WARN_ON_ONCE (!IS_ALIGNED (vaddr,UPROBE_SWBP_INSN_SIZE ))) +return -EINVAL ; +pagefault_disable (); result =__copy_from_user_inatomic (&opcode, (void __user *)vaddr,sizeof (opcode));
net/ipv4/devinet.c +1 -0
@@ -262,6 +262,7 @@ static struct in_device *inetdev_init(struct net_device *dev) err =devinet_sysctl_register (in_dev);if (err) { in_dev->dead =1 ; +neigh_parms_release (&arp_tbl, in_dev->arp_parms);in_dev_put (in_dev); in_dev =NULL ; goto out;
net/ipv6/esp6.c +3 -1
@@ -426,8 +426,10 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb)sg_init_table (sg, nfrags); ret =skb_to_sgvec (skb, sg,0 , skb->len); -if (unlikely (ret <0 )) +if (unlikely (ret <0 )) { +kfree (tmp); goto out; + }aead_request_set_crypt (req, sg, sg, elen + ivlen, iv);aead_request_set_ad (req, assoclen);
net/l2tp/l2tp_core.c +2 -0
@@ -1573,6 +1573,8 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32 tunnel_id, fd); goto err; } +if (sk->sk_family !=PF_INET && sk->sk_family !=PF_INET6 ) + goto err;switch (encap) {case L2TP_ENCAPTYPE_UDP :if (sk->sk_protocol !=IPPROTO_UDP ) {
net/l2tp/l2tp_ip.c +21 -7
@@ -24,7 +24,6 @@#include <net/icmp.h> #include <net/udp.h> #include <net/inet_common.h> -#include <net/inet_hashtables.h> #include <net/tcp_states.h> #include <net/protocol.h> #include <net/xfrm.h>
@@ -213,15 +212,30 @@ discard:return 0 ; } -static int l2tp_ip_open (struct sock *sk) +static void l2tp_ip_hash (struct sock *sk) { -/* Prevent autobind. We don't have ports. */ -inet_sk (sk)->inet_num =IPPROTO_L2TP ; +if (sk_unhashed (sk)) { +write_lock_bh (&l2tp_ip_lock); +sk_add_node (sk, &l2tp_ip_table); +write_unlock_bh (&l2tp_ip_lock); + } +} +static void l2tp_ip_unhash (struct sock *sk) +{ +if (sk_unhashed (sk)) +return ;write_lock_bh (&l2tp_ip_lock); -sk_add_node (sk, &l2tp_ip_table); +sk_del_node_init (sk);write_unlock_bh (&l2tp_ip_lock); +} + +static int l2tp_ip_open (struct sock *sk) +{ +/* Prevent autobind. We don't have ports. */ +inet_sk (sk)->inet_num =IPPROTO_L2TP ; +l2tp_ip_hash (sk);return 0 ; }
@@ -603,8 +617,8 @@ static struct proto l2tp_ip_prot = { .sendmsg = l2tp_ip_sendmsg, .recvmsg = l2tp_ip_recvmsg, .backlog_rcv = l2tp_ip_backlog_recv, - .hash = inet_hash, - .unhash = inet_unhash, + .hash = l2tp_ip_hash, + .unhash = l2tp_ip_unhash, .obj_size =sizeof (struct l2tp_ip_sock ), #ifdef CONFIG_COMPAT .compat_setsockopt = compat_ip_setsockopt,
net/l2tp/l2tp_ip6.c +21 -7
@@ -24,7 +24,6 @@#include <net/icmp.h> #include <net/udp.h> #include <net/inet_common.h> -#include <net/inet_hashtables.h> #include <net/tcp_states.h> #include <net/protocol.h> #include <net/xfrm.h>
@@ -226,15 +225,30 @@ discard:return 0 ; } -static int l2tp_ip6_open (struct sock *sk) +static void l2tp_ip6_hash (struct sock *sk) { -/* Prevent autobind. We don't have ports. */ -inet_sk (sk)->inet_num =IPPROTO_L2TP ; +if (sk_unhashed (sk)) { +write_lock_bh (&l2tp_ip6_lock); +sk_add_node (sk, &l2tp_ip6_table); +write_unlock_bh (&l2tp_ip6_lock); + } +} +static void l2tp_ip6_unhash (struct sock *sk) +{ +if (sk_unhashed (sk)) +return ;write_lock_bh (&l2tp_ip6_lock); -sk_add_node (sk, &l2tp_ip6_table); +sk_del_node_init (sk);write_unlock_bh (&l2tp_ip6_lock); +} + +static int l2tp_ip6_open (struct sock *sk) +{ +/* Prevent autobind. We don't have ports. */ +inet_sk (sk)->inet_num =IPPROTO_L2TP ; +l2tp_ip6_hash (sk);return 0 ; }
@@ -730,8 +744,8 @@ static struct proto l2tp_ip6_prot = { .sendmsg = l2tp_ip6_sendmsg, .recvmsg = l2tp_ip6_recvmsg, .backlog_rcv = l2tp_ip6_backlog_recv, - .hash = inet_hash, - .unhash = inet_unhash, + .hash = l2tp_ip6_hash, + .unhash = l2tp_ip6_unhash, .obj_size =sizeof (struct l2tp_ip6_sock ), #ifdef CONFIG_COMPAT .compat_setsockopt = compat_ipv6_setsockopt,
net/vmw_vsock/af_vsock.c +1 -1
@@ -1270,7 +1270,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags)/* Wait for children sockets to appear; these are the new sockets * created upon connection establishment. */ - timeout =sock_sndtimeo (listener, flags &O_NONBLOCK ); + timeout =sock_rcvtimeo (listener, flags &O_NONBLOCK );prepare_to_wait (sk_sleep (listener), &wait,TASK_INTERRUPTIBLE ); while ((connected = vsock_dequeue_accept(listener)) == NULL &&
sound/pci/hda/patch_realtek.c +3 -0
@@ -6342,8 +6342,11 @@ static int patch_alc269(struct hda_codec *codec)break ;case 0x10ec0225 :case 0x10ec0295 : + spec->codec_variant =ALC269_TYPE_ALC225 ; +break ;case 0x10ec0299 : spec->codec_variant =ALC269_TYPE_ALC225 ; + spec->gen.mixer_nid =0 ;/* no loopback on ALC299 */ break ;case 0x10ec0234 :case 0x10ec0274 :