Linux 5.0.1
Greg KH
maintainerI'm announcing the release of the 5.0.1 kernel.
All users of the 5.0.1 kernel series must upgrade.
The updated 5.0.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.0.1.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Greg KH
maintainerQuoted 9 lines · Greg KH
I'm announcing the release of the 5.0.1 kernel.
All users of the 5.0.1 kernel series must upgrade.
The updated 5.0.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.0.1.yand can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
Quoted 8 lines
thanks,
greg k-h
------------
Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Ugh, something went obviously wrong here with my scripts, that's not good...
greg k-h
Greg KH
maintainerQuoted 14 lines · Greg KH
Quoted 13 lines · Greg KH
I'm announcing the release of the 5.0.1 kernel.
All users of the 5.0.1 kernel series must upgrade.
The updated 5.0.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.0.1.yand can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summarythanks,
greg k-h
Quoted 7 lines
Quoted 4 lines
------------
Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Ugh, something went obviously wrong here with my scripts, that's not good...
Ok, the release was made correctly, my local scripts didn't know about "5.x" yet, when making the email messages up.
Here's the "real" diffstat and release announcement:
-------------
I'm announcing the release of the 5.0.1 kernel.
All users of the 5.0 kernel series must upgrade.
The updated 5.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.0.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/alpha/kernel/syscalls/syscall.tbl | 1 arch/mips/kernel/irq.c | 4 arch/x86/boot/compressed/pgtable_64.c | 19 +++ arch/x86/kernel/cpu/amd.c | 8 - arch/xtensa/kernel/process.c | 4 drivers/android/binder.c | 106 +++++++++++++++++----- drivers/base/dd.c | 2 drivers/bluetooth/btrtl.c | 10 +- drivers/char/applicom.c | 35 ++++--- drivers/cpufreq/cpufreq.c | 6 - drivers/cpufreq/intel_pstate.c | 23 ++-- drivers/gnss/sirf.c | 32 +++--- drivers/net/dsa/mv88e6xxx/chip.c | 13 +- drivers/net/dsa/mv88e6xxx/port.c | 2 drivers/net/ethernet/marvell/sky2.c | 24 ++++ drivers/net/ethernet/mscc/ocelot_board.c | 14 ++ drivers/net/team/team_mode_loadbalance.c | 15 +++ drivers/net/usb/qmi_wwan.c | 26 +++-- drivers/staging/android/ashmem.c | 67 +++++++++---- drivers/staging/android/ion/ion_system_heap.c | 2 drivers/staging/comedi/drivers/ni_660x.c | 1 drivers/staging/erofs/inode.c | 8 - drivers/staging/erofs/internal.h | 11 +- drivers/staging/erofs/unzip_vle.c | 77 ++++++++++----- drivers/staging/erofs/xattr.c | 65 ++++++++++--- drivers/staging/wilc1000/linux_wlan.c | 4 drivers/usb/host/xhci-pci.c | 1 drivers/usb/host/xhci-tegra.c | 4 drivers/usb/serial/cp210x.c | 12 ++ drivers/usb/serial/ftdi_sio.c | 2 drivers/usb/serial/ftdi_sio_ids.h | 6 + drivers/usb/serial/option.c | 2 fs/aio.c | 12 +- fs/exec.c | 2 include/linux/cpufreq.h | 12 -- include/net/bluetooth/bluetooth.h | 2 include/net/sch_generic.h | 31 ++---- include/uapi/linux/android/binder.h | 19 +++ kernel/trace/trace_events_filter.c | 5 - net/bluetooth/af_bluetooth.c | 16 ++- net/bluetooth/l2cap_sock.c | 2 net/bluetooth/rfcomm/sock.c | 2 net/bluetooth/sco.c | 2 net/core/gen_stats.c | 2 net/core/net-sysfs.c | 3 net/ipv6/ip6mr.c | 8 - net/sched/sch_generic.c | 13 +- net/sctp/socket.c | 1 net/tipc/socket.c | 2 tools/testing/selftests/firmware/config | 1 tools/testing/selftests/firmware/fw_filesystem.sh | 9 + tools/testing/selftests/firmware/fw_lib.sh | 2 53 files changed, 520 insertions(+), 234 deletions(-)
Ajay Singh (1):
staging: wilc1000: fix to set correct value for 'vif_num'
Arnd Bergmann (1):
alpha: wire up io_pgetevents system call
Balaji Manoharan (1):
usb: xhci: Fix for Enabling USB ROLE SWITCH QUIRK on INTEL_SUNRISEPOINT_LP_XHCI
Bart Van Assche (1):
aio: Fix locking in aio_poll()
Daniele Palmas (1):
USB: serial: option: add Telit ME910 ECM composition
Eric Dumazet (1):
net: sched: put back q.qlen into a single location
Erik Hugne (1):
tipc: fix RDM/DGRAM connect() regression
Gao Xiang (4):
staging: erofs: fix mis-acted TAIL merging behavior
staging: erofs: fix fast symlink w/o xattr when fs xattr is on
staging: erofs: fix race of initializing xattrs of a inode at the same time
staging: erofs: fix illegal address access under memory pressure
Geert Uytterhoeven (1):
driver core: Postpone DMA tear-down until after devres release
Greg Kroah-Hartman (1):
Linux 5.0.1
Gustavo A. R. Silva (2):
staging: comedi: ni_660x: fix missing break in switch statement
applicom: Fix potential Spectre v1 vulnerabilities
Heiner Kallweit (3):
net: dsa: mv88e6xxx: add call to mv88e6xxx_ports_cmode_init to probe for new DSA framework
net: dsa: mv88e6xxx: handle unknown duplex modes gracefully in mv88e6xxx_port_set_duplex
net: dsa: mv8e6xxx: fix number of internal PHYs for 88E6x90 family
Ido Schimmel (2):
ip6mr: Do not call __IP6_INC_STATS() from preemptible context
team: Free BPF filter when unregistering netdev
Ivan Mironov (1):
USB: serial: cp210x: add ID for Ingenico 3070
Jiaxun Yang (1):
x86/CPU/AMD: Set the CPB bit unconditionally on F17h
Johan Hovold (1):
gnss: sirf: fix premature wakeup interrupt enable
Kai-Heng Feng (2):
sky2: Disable MSI on Dell Inspiron 1545 and Gateway P-79
Bluetooth: btrtl: Restore old logic to assume firmware is already loaded
Karoly Pados (1):
USB: serial: cp210x: fix GPIO in autosuspend
Kavya Sree Kotagiri (1):
net: mscc: Enable all ports in QSGMII
Kirill A. Shutemov (1):
x86/boot/compressed/64: Do not read legacy ROM on EFI system
Kristian Evensen (1):
qmi_wwan: Add support for Quectel EG12/EM12
Liu Xiang (1):
MIPS: irq: Allocate accurate order pages for irq stack
Luis Chamberlain (3):
Revert "selftests: firmware: add CONFIG_FW_LOADER_USER_HELPER_FALLBACK to config" Revert "selftests: firmware: remove use of non-standard diff -Z option"
selftests: firmware: fix verify_reqs() return value
Mans Rullgard (1):
USB: serial: ftdi_sio: add ID for Hjelmslund Electronics USB485
Matthias Kaehlcke (1):
Bluetooth: Fix locking in bt_accept_enqueue() for BH context
Max Filippov (1):
xtensa: fix get_wchan
Pavel Tikhomirov (1):
tracing: Fix event filters and triggers to handle negative numbers
Qing Xia (1):
staging: android: ion: fix sys heap pool's gfp_flags
Sheng Yong (1):
staging: erofs: fix memleak of inode's shared xattr array
Tetsuo Handa (2):
staging: android: ashmem: Don't call fallocate() with ashmem_mutex held.
staging: android: ashmem: Avoid range_alloc() allocation with ashmem_mutex held.
Thierry Reding (1):
xhci: tegra: Prevent error pointer dereference
Todd Kjos (1):
binder: create node flag to request sender's security context
Viresh Kumar (1):
cpufreq: Use struct kobj_attribute instead of struct global_attr
Xin Long (1):
sctp: call iov_iter_revert() after sending ABORT
YueHaibing (2):
net-sysfs: Fix mem leak in netdev_register_kobject
exec: Fix mem leak in kernel_read_file
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 0 -SUBLEVEL = 0 +SUBLEVEL = 1 EXTRAVERSION = NAME = Shy Crocodile
arch/alpha/kernel/syscalls/syscall.tbl +1 -0
@@ -451,3 +451,4 @@ 520 common preadv2 sys_preadv2 521 common pwritev2 sys_pwritev2 522 common statx sys_statx +523 common io_pgetevents sys_io_pgetevents
arch/mips/kernel/irq.c +2 -2
@@ -52,6 +52,7 @@ asmlinkage void spurious_interrupt(void)void __init init_IRQ (void ) {int i; +unsigned int order =get_order (IRQ_STACK_SIZE );for (i =0 ; i <NR_IRQS ; i++)irq_set_noprobe (i);
@@ -62,8 +63,7 @@ void __init init_IRQ(void)arch_init_irq ();for_each_possible_cpu (i) { -int irq_pages =IRQ_STACK_SIZE /PAGE_SIZE ; -void *s = (void *)__get_free_pages (GFP_KERNEL , irq_pages); +void *s = (void *)__get_free_pages (GFP_KERNEL , order); irq_stack[i] = s; pr_debug("CPU%d IRQ stack at 0x%p - 0x%p\n", i,
arch/x86/boot/compressed/pgtable_64.c +16 -3
@@ -1,5 +1,7 @@ +#include <linux/efi.h> #include <asm/e820/types.h> #include <asm/processor.h> +#include <asm/efi.h> #include "pgtable.h" #include "../string.h"
@@ -37,9 +39,10 @@ int cmdline_find_option_bool(const char *option);static unsigned long find_trampoline_placement (void ) { -unsigned long bios_start, ebda_start; +unsigned long bios_start =0 , ebda_start =0 ;unsigned long trampoline_start;struct boot_e820_entry *entry; +char *signature;int i;/*
@@ -47,8 +50,18 @@ static unsigned long find_trampoline_placement(void)* This code is based on reserve_bios_regions(). */ - ebda_start = *(unsigned short *)0x40e <<4 ; - bios_start = *(unsigned short *)0x413 <<10 ; +/* +* EFI systems may not provide legacy ROM. The memory may not be mapped +* at all. +* +* Only look for values in the legacy ROM for non-EFI system. +*/ + signature = (char *)&boot_params->efi_info.efi_loader_signature; +if (strncmp (signature,EFI32_LOADER_SIGNATURE ,4 ) && +strncmp (signature,EFI64_LOADER_SIGNATURE ,4 )) { + ebda_start = *(unsigned short *)0x40e <<4 ; + bios_start = *(unsigned short *)0x413 <<10 ; + }if (bios_start <BIOS_START_MIN || bios_start >BIOS_START_MAX ) bios_start =BIOS_START_MAX ;
arch/x86/kernel/cpu/amd.c +3 -5
@@ -819,11 +819,9 @@ static void init_amd_bd(struct cpuinfo_x86 *c)static void init_amd_zn (struct cpuinfo_x86 *c) {set_cpu_cap (c,X86_FEATURE_ZEN ); -/* -* Fix erratum 1076: CPB feature bit not being set in CPUID. It affects -* all up to and including B1. -*/ -if (c->x86_model <=1 && c->x86_stepping <=1 ) + +/* Fix erratum 1076: CPB feature bit not being set in CPUID. */ +if (!cpu_has (c,X86_FEATURE_CPB ))set_cpu_cap (c,X86_FEATURE_CPB ); }
arch/xtensa/kernel/process.c +2 -2
@@ -321,8 +321,8 @@ unsigned long get_wchan(struct task_struct *p)/* Stack layout: sp-4: ra, sp-3: sp' */ - pc =MAKE_PC_FROM_RA (*(unsigned long *)sp -4 , sp); - sp = *(unsigned long *)sp -3 ; + pc =MAKE_PC_FROM_RA (SPILL_SLOT (sp,0 ), sp); + sp =SPILL_SLOT (sp,1 ); }while (count++ <16 );return 0 ; }
drivers/android/binder.c +83 -23
239 lines not on this page · raw message
drivers/base/dd.c +1 -1
@@ -968,9 +968,9 @@ static void __device_release_driver(struct device *dev, struct device *parent) drv->remove (dev);device_links_driver_cleanup (dev); -arch_teardown_dma_ops (dev);devres_release_all (dev); +arch_teardown_dma_ops (dev); dev->driver =NULL ;dev_set_drvdata (dev,NULL );if (dev->pm_domain && dev->pm_domain->dismiss)
drivers/bluetooth/btrtl.c +7 -3
@@ -552,10 +552,9 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev, hdev->bus);if (!btrtl_dev->ic_info) { -rtl_dev_err (hdev,"rtl: unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x" , +rtl_dev_info (hdev,"rtl: unknown IC info, lmp subver %04x, hci rev %04x, hci ver %04x" , lmp_subver, hci_rev, hci_ver); - ret = -EINVAL ; - goto err_free; +return btrtl_dev; }if (btrtl_dev->ic_info->has_rom_version) {
@@ -610,6 +609,11 @@ int btrtl_download_firmware(struct hci_dev *hdev,* standard btusb. Once that firmware is uploaded, the subver changes * to a different value. */ +if (!btrtl_dev->ic_info) { +rtl_dev_info (hdev,"rtl: assuming no firmware upload needed\n" ); +return 0 ; + } +switch (btrtl_dev->ic_info->lmp_subver) {case RTL_ROM_LMP_8723A :case RTL_ROM_LMP_3499 :
drivers/char/applicom.c +24 -11
@@ -32,6 +32,7 @@#include <linux/wait.h> #include <linux/init.h> #include <linux/fs.h> +#include <linux/nospec.h> #include <asm/io.h> #include <linux/uaccess.h>
@@ -386,7 +387,11 @@ static ssize_t ac_write(struct file *file, const char __user *buf, size_t count, TicCard = st_loc.tic_des_from_pc;/* tic number to send */ IndexCard = NumCard -1 ; -if ((NumCard <1 ) || (NumCard >MAX_BOARD ) || !apbs[IndexCard].RamIO) +if (IndexCard >=MAX_BOARD ) +return -EINVAL ; + IndexCard =array_index_nospec (IndexCard,MAX_BOARD ); + +if (!apbs[IndexCard].RamIO)return -EINVAL ;#ifdef DEBUG
@@ -697,6 +702,7 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)unsigned char IndexCard;void __iomem *pmem;int ret =0 ; +static int warncount =10 ;volatile unsigned char byte_reset_it;struct st_ram_io *adgl;void __user *argp = (void __user *)arg;
@@ -711,16 +717,12 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)mutex_lock (&ac_mutex); IndexCard = adgl->num_card-1 ; -if (cmd !=6 && ((IndexCard >=MAX_BOARD ) || !apbs[IndexCard].RamIO)) { -static int warncount =10 ; -if (warncount) { -printk (KERN_WARNING "APPLICOM driver IOCTL, bad board number %d\n" ,(int )IndexCard+1 ); - warncount--; - } -kfree (adgl); -mutex_unlock (&ac_mutex); -return -EINVAL ; - } +if (cmd !=6 && IndexCard >=MAX_BOARD ) + goto err; + IndexCard =array_index_nospec (IndexCard,MAX_BOARD ); + +if (cmd !=6 && !apbs[IndexCard].RamIO) + goto err;switch (cmd) {
@@ -838,5 +840,16 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)kfree (adgl);mutex_unlock (&ac_mutex);return 0 ; + +err: +if (warncount) { +pr_warn ("APPLICOM driver IOCTL, bad board number %d\n" , + (int )IndexCard +1 ); + warncount--; + } +kfree (adgl); +mutex_unlock (&ac_mutex); +return -EINVAL ; + }
drivers/cpufreq/cpufreq.c +3 -3
@@ -545,13 +545,13 @@ EXPORT_SYMBOL_GPL(cpufreq_policy_transition_delay_us);* SYSFS INTERFACE * *********************************************************************/ static ssize_t show_boost (struct kobject *kobj, -struct attribute *attr,char *buf) +struct kobj_attribute *attr,char *buf) {return sprintf (buf,"%d\n" , cpufreq_driver->boost_enabled); } -static ssize_t store_boost (struct kobject *kobj,struct attribute *attr, -const char *buf,size_t count) +static ssize_t store_boost (struct kobject *kobj,struct kobj_attribute *attr, +const char *buf,size_t count) {int ret, enable;
drivers/cpufreq/intel_pstate.c +12 -11
@@ -895,7 +895,7 @@ static void intel_pstate_update_policies(void)/************************** sysfs begin ************************/ #define show_one (file_name, object) \ static ssize_t show_##file_name \ - (struct kobject *kobj, struct attribute *attr, char *buf) \ + (struct kobject *kobj, struct kobj_attribute *attr, char *buf) \ { \ return sprintf(buf, "%u\n", global.object); \ }
@@ -904,7 +904,7 @@ static ssize_t intel_pstate_show_status(char *buf);static int intel_pstate_update_status (const char *buf,size_t size);static ssize_t show_status (struct kobject *kobj, -struct attribute *attr,char *buf) +struct kobj_attribute *attr,char *buf) {ssize_t ret;
@@ -915,7 +915,7 @@ static ssize_t show_status(struct kobject *kobj,return ret; } -static ssize_t store_status (struct kobject *a,struct attribute *b, +static ssize_t store_status (struct kobject *a,struct kobj_attribute *b,const char *buf,size_t count) {char *p =memchr (buf,'\n' , count);
@@ -929,7 +929,7 @@ static ssize_t store_status(struct kobject *a, struct attribute *b, }static ssize_t show_turbo_pct (struct kobject *kobj, -struct attribute *attr,char *buf) +struct kobj_attribute *attr,char *buf) {struct cpudata *cpu;int total, no_turbo, turbo_pct;
@@ -955,7 +955,7 @@ static ssize_t show_turbo_pct(struct kobject *kobj, }static ssize_t show_num_pstates (struct kobject *kobj, -struct attribute *attr,char *buf) +struct kobj_attribute *attr,char *buf) {struct cpudata *cpu;int total;
@@ -976,7 +976,7 @@ static ssize_t show_num_pstates(struct kobject *kobj, }static ssize_t show_no_turbo (struct kobject *kobj, -struct attribute *attr,char *buf) +struct kobj_attribute *attr,char *buf) {ssize_t ret;
@@ -998,7 +998,7 @@ static ssize_t show_no_turbo(struct kobject *kobj,return ret; } -static ssize_t store_no_turbo (struct kobject *a,struct attribute *b, +static ssize_t store_no_turbo (struct kobject *a,struct kobj_attribute *b,const char *buf,size_t count) {unsigned int input;
@@ -1045,7 +1045,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,return count; } -static ssize_t store_max_perf_pct (struct kobject *a,struct attribute *b, +static ssize_t store_max_perf_pct (struct kobject *a,struct kobj_attribute *b,const char *buf,size_t count) {unsigned int input;
@@ -1075,7 +1075,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,return count; } -static ssize_t store_min_perf_pct (struct kobject *a,struct attribute *b, +static ssize_t store_min_perf_pct (struct kobject *a,struct kobj_attribute *b,const char *buf,size_t count) {unsigned int input;
@@ -1107,12 +1107,13 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct attribute *b, }static ssize_t show_hwp_dynamic_boost (struct kobject *kobj, -struct attribute *attr,char *buf) +struct kobj_attribute *attr,char *buf) {return sprintf (buf,"%u\n" , hwp_boost); } -static ssize_t store_hwp_dynamic_boost (struct kobject *a,struct attribute *b, +static ssize_t store_hwp_dynamic_boost (struct kobject *a, +struct kobj_attribute *b,const char *buf,size_t count) {unsigned int input;
drivers/gnss/sirf.c +17 -15
@@ -310,30 +310,26 @@ static int sirf_probe(struct serdev_device *serdev) ret = -ENODEV ; goto err_put_device; } + + ret =regulator_enable (data->vcc); +if (ret) + goto err_put_device; + +/* Wait for chip to boot into hibernate mode. */ +msleep (SIRF_BOOT_DELAY ); }if (data->wakeup) { ret =gpiod_to_irq (data->wakeup);if (ret <0 ) - goto err_put_device; - + goto err_disable_vcc; data->irq = ret; - ret =devm_request_threaded_irq (dev, data->irq,NULL , - sirf_wakeup_handler, + ret =request_threaded_irq (data->irq,NULL , sirf_wakeup_handler,IRQF_TRIGGER_RISING |IRQF_TRIGGER_FALLING |IRQF_ONESHOT ,"wakeup" , data);if (ret) - goto err_put_device; - } - -if (data->on_off) { - ret =regulator_enable (data->vcc); -if (ret) - goto err_put_device; - -/* Wait for chip to boot into hibernate mode */ -msleep (SIRF_BOOT_DELAY ); + goto err_disable_vcc; }if (IS_ENABLED (CONFIG_PM )) {
@@ -342,7 +338,7 @@ static int sirf_probe(struct serdev_device *serdev) }else { ret =sirf_runtime_resume (dev);if (ret <0 ) - goto err_disable_vcc; + goto err_free_irq; } ret =gnss_register_device (gdev);
@@ -356,6 +352,9 @@ static int sirf_probe(struct serdev_device *serdev)pm_runtime_disable (dev); elsesirf_runtime_suspend (dev ); +err_free_irq: +if (data->wakeup) +free_irq (data->irq, data); err_disable_vcc:if (data->on_off)regulator_disable (data->vcc);
@@ -376,6 +375,9 @@ static void sirf_remove(struct serdev_device *serdev)else sirf_runtime_suspend (&serdev->dev); +if (data->wakeup) +free_irq (data->irq, data); +if (data->on_off)regulator_disable (data->vcc);
drivers/net/dsa/mv88e6xxx/chip.c +7 -6
@@ -4222,7 +4222,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = { .name = "Marvell 88E6190", .num_databases = 4096, .num_ports = 11, /* 10 + Z80 */ - .num_internal_phys = 11, + .num_internal_phys = 9, .num_gpio = 16, .max_vid = 8191, .port_base_addr = 0x0,
@@ -4245,7 +4245,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = { .name = "Marvell 88E6190X", .num_databases = 4096, .num_ports = 11, /* 10 + Z80 */ - .num_internal_phys = 11, + .num_internal_phys = 9, .num_gpio = 16, .max_vid = 8191, .port_base_addr = 0x0,
@@ -4268,7 +4268,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = { .name = "Marvell 88E6191", .num_databases = 4096, .num_ports = 11, /* 10 + Z80 */ - .num_internal_phys = 11, + .num_internal_phys = 9, .max_vid = 8191, .port_base_addr = 0x0, .phy_base_addr = 0x0,
@@ -4315,7 +4315,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = { .name = "Marvell 88E6290", .num_databases = 4096, .num_ports = 11, /* 10 + Z80 */ - .num_internal_phys = 11, + .num_internal_phys = 9, .num_gpio = 16, .max_vid = 8191, .port_base_addr = 0x0,
@@ -4477,7 +4477,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = { .name = "Marvell 88E6390", .num_databases = 4096, .num_ports = 11, /* 10 + Z80 */ - .num_internal_phys = 11, + .num_internal_phys = 9, .num_gpio = 16, .max_vid = 8191, .port_base_addr = 0x0,
@@ -4500,7 +4500,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = { .name = "Marvell 88E6390X", .num_databases = 4096, .num_ports = 11, /* 10 + Z80 */ - .num_internal_phys = 11, + .num_internal_phys = 9, .num_gpio = 16, .max_vid = 8191, .port_base_addr = 0x0,
@@ -4847,6 +4847,7 @@ static int mv88e6xxx_probe(struct mdio_device *mdiodev)if (err) goto out; +mv88e6xxx_ports_cmode_init (chip);mv88e6xxx_phy_init (chip);if (chip->info->ops->get_eeprom) {
drivers/net/dsa/mv88e6xxx/port.c +1 -1
@@ -190,7 +190,7 @@ int mv88e6xxx_port_set_duplex(struct mv88e6xxx_chip *chip, int port, int dup)/* normal duplex detection */ break ;default : -return -EINVAL ; +return -EOPNOTSUPP ; } err =mv88e6xxx_port_write (chip, port,MV88E6XXX_PORT_MAC_CTL , reg);
drivers/net/ethernet/marvell/sky2.c +23 -1
@@ -46,6 +46,7 @@#include <linux/mii.h> #include <linux/of_device.h> #include <linux/of_net.h> +#include <linux/dmi.h> #include <asm/irq.h>
@@ -93,7 +94,7 @@ static int copybreak __read_mostly = 128;module_param (copybreak, int,0 );MODULE_PARM_DESC (copybreak,"Receive copy threshold" ); -static int disable_msi =0 ; +static int disable_msi =-1 ;module_param (disable_msi, int,0 );MODULE_PARM_DESC (disable_msi,"Disable Message Signaled Interrupt (MSI)" );
@@ -4917,6 +4918,24 @@ static const char *sky2_name(u8 chipid, char *buf, int sz)return buf; } +static const struct dmi_system_id msi_blacklist[] = { + { + .ident ="Dell Inspiron 1545" , + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Inc." ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Inspiron 1545" ), + }, + }, + { + .ident ="Gateway P-79" , + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Gateway" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"P-79" ), + }, + }, + {} +}; +static int sky2_probe (struct pci_dev *pdev,const struct pci_device_id *ent) {struct net_device *dev, *dev1;
@@ -5028,6 +5047,9 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent) goto err_out_free_pci; } +if (disable_msi ==-1 ) + disable_msi = !!dmi_check_system (msi_blacklist); +if (!disable_msi &&pci_enable_msi (pdev) ==0 ) { err =sky2_test_msi (hw);if (err) {
drivers/net/ethernet/mscc/ocelot_board.c +11 -3
@@ -267,6 +267,7 @@ static int mscc_ocelot_probe(struct platform_device *pdev)struct phy *serdes;void __iomem *regs;char res_name[8 ]; +int phy_mode;u32 port;if (of_property_read_u32 (portnp,"reg" , &port))
@@ -292,11 +293,11 @@ static int mscc_ocelot_probe(struct platform_device *pdev)if (err)return err; - err =of_get_phy_mode (portnp); -if (err <0 ) + phy_mode =of_get_phy_mode (portnp); +if (phy_mode <0 ) ocelot->ports[port]->phy_mode =PHY_INTERFACE_MODE_NA ;else - ocelot->ports[port]->phy_mode = err; + ocelot->ports[port]->phy_mode = phy_mode;switch (ocelot->ports[port]->phy_mode) {case PHY_INTERFACE_MODE_NA :
@@ -304,6 +305,13 @@ static int mscc_ocelot_probe(struct platform_device *pdev)case PHY_INTERFACE_MODE_SGMII :break ;case PHY_INTERFACE_MODE_QSGMII : +/* Ensure clock signals and speed is set on all +* QSGMII links +*/ +ocelot_port_writel (ocelot->ports[port], +DEV_CLOCK_CFG_LINK_SPEED + (OCELOT_SPEED_1000 ), +DEV_CLOCK_CFG );break ;default : dev_err(ocelot->dev,
drivers/net/team/team_mode_loadbalance.c +15 -0
@@ -325,6 +325,20 @@ static int lb_bpf_func_set(struct team *team, struct team_gsetter_ctx *ctx)return 0 ; } +static void lb_bpf_func_free (struct team *team) +{ +struct lb_priv *lb_priv =get_lb_priv (team); +struct bpf_prog *fp; + +if (!lb_priv->ex->orig_fprog) +return ; + +__fprog_destroy (lb_priv->ex->orig_fprog); + fp =rcu_dereference_protected (lb_priv->fp, +lockdep_is_held (&team->lock)); +bpf_prog_destroy (fp); +} +static int lb_tx_method_get (struct team *team,struct team_gsetter_ctx *ctx) {struct lb_priv *lb_priv =get_lb_priv (team);
@@ -639,6 +653,7 @@ static void lb_exit(struct team *team)team_options_unregister (team, lb_options,ARRAY_SIZE (lb_options)); +lb_bpf_func_free (team);cancel_delayed_work_sync (&lb_priv->ex->stats.refresh_dw);free_percpu (lb_priv->pcpu_stats);kfree (lb_priv->ex);
drivers/net/usb/qmi_wwan.c +18 -8
@@ -976,6 +976,13 @@ static const struct usb_device_id products[] = { 0xff), .driver_info = (unsigned long )&qmi_wwan_info_quirk_dtr, }, + { /* Quectel EG12/EM12 */ +USB_DEVICE_AND_INTERFACE_INFO (0x2c7c ,0x0512 , +USB_CLASS_VENDOR_SPEC , +USB_SUBCLASS_VENDOR_SPEC , +0xff ), + .driver_info = (unsigned long)&qmi_wwan_info_quirk_dtr, + }, /* 3. Combined interface devices matching on interface number */ {QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
@@ -1343,17 +1350,20 @@ static bool quectel_ec20_detected(struct usb_interface *intf)return false; } -static bool quectel_ep06_diag_detected (struct usb_interface *intf) +static bool quectel_diag_detected (struct usb_interface *intf) {struct usb_device *dev =interface_to_usbdev (intf);struct usb_interface_descriptor intf_desc = intf->cur_altsetting->desc; +u16 id_vendor =le16_to_cpu (dev->descriptor.idVendor); +u16 id_product =le16_to_cpu (dev->descriptor.idProduct); -if (le16_to_cpu (dev->descriptor.idVendor) ==0x2c7c && -le16_to_cpu (dev->descriptor.idProduct) ==0x0306 && - intf_desc.bNumEndpoints ==2 ) -return true; +if (id_vendor !=0x2c7c || intf_desc.bNumEndpoints !=2 ) +return false; -return false; +if (id_product ==0x0306 || id_product ==0x0512 ) +return true; +else +return false; } static int qmi_wwan_probe(struct usb_interface *intf,
@@ -1390,13 +1400,13 @@ static int qmi_wwan_probe(struct usb_interface *intf,return -ENODEV ; } -/* Quectel EP06/EM06/EG06 supports dynamic interface configuration, so +/* Several Quectel modems supports dynamic interface configuration, so * we need to match on class/subclass/protocol. These values are * identical for the diagnostic- and QMI-interface, but bNumEndpoints is * different. Ignore the current interface if the number of endpoints * the number for the diag interface (two). */ -if (quectel_ep06_diag_detected (intf)) +if (quectel_diag_detected (intf))return -ENODEV ;return usbnet_probe (intf, id);
drivers/staging/android/ashmem.c +44 -23
160 lines not on this page · raw message
drivers/staging/android/ion/ion_system_heap.c +1 -1
@@ -223,10 +223,10 @@ static void ion_system_heap_destroy_pools(struct ion_page_pool **pools)static int ion_system_heap_create_pools (struct ion_page_pool **pools) {int i; -gfp_t gfp_flags = low_order_gfp_flags;for (i =0 ; i <NUM_ORDERS ; i++) {struct ion_page_pool *pool; +gfp_t gfp_flags = low_order_gfp_flags;if (orders[i] >4 ) gfp_flags = high_order_gfp_flags;
drivers/staging/comedi/drivers/ni_660x.c +1 -0
@@ -656,6 +656,7 @@ static int ni_660x_set_pfi_routing(struct comedi_device *dev,case NI_660X_PFI_OUTPUT_DIO :if (chan >31 )return -EINVAL ; +break ;default :return -EINVAL ; }
drivers/staging/erofs/inode.c +4 -4
@@ -185,16 +185,16 @@ static int fill_inode(struct inode *inode, int isdir)/* setup the new inode */ if (S_ISREG (inode->i_mode)) {#ifdef CONFIG_EROFS_FS_XATTR -if (vi->xattr_isize) - inode->i_op = &erofs_generic_xattr_iops; + inode->i_op = &erofs_generic_xattr_iops;#endif inode->i_fop = &generic_ro_fops; }else if (S_ISDIR (inode->i_mode)) { inode->i_op = #ifdef CONFIG_EROFS_FS_XATTR - vi->xattr_isize ? &erofs_dir_xattr_iops : -#endif + &erofs_dir_xattr_iops; +#else &erofs_dir_iops; +#endif inode->i_fop = &erofs_dir_fops; }else if (S_ISLNK (inode->i_mode)) {/* by default, page_get_link is used for symlink */
drivers/staging/erofs/internal.h +8 -3
@@ -354,12 +354,17 @@ static inline erofs_off_t iloc(struct erofs_sb_info *sbi, erofs_nid_t nid)return blknr_to_addr (sbi->meta_blkaddr) + (nid << sbi->islotbits); } -#define inode_set_inited_xattr (inode) (EROFS_V(inode)->flags |= 1) -#define inode_has_inited_xattr (inode) (EROFS_V(inode)->flags & 1) +/* atomic flag definitions */ +#define EROFS_V_EA_INITED_BIT 0 + +/* bitlock definitions (arranged in reverse order) */ +#define EROFS_V_BL_XATTR_BIT (BITS_PER_LONG - 1)struct erofs_vnode {erofs_nid_t nid; -unsigned int flags; + +/* atomic flags (including bitlocks) */ +unsigned long flags;unsigned char data_mapping_mode;/* inline size in bytes */
drivers/staging/erofs/unzip_vle.c +51 -26
146 lines not on this page · raw message
drivers/staging/erofs/xattr.c +50 -15
116 lines not on this page · raw message
drivers/staging/wilc1000/linux_wlan.c +2 -2
@@ -1086,8 +1086,8 @@ int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type, vif->wilc = *wilc; vif->ndev = ndev; wl->vif[i] = vif; - wl->vif_num = i; - vif->idx = wl->vif_num; + wl->vif_num = i +1 ; + vif->idx = i; ndev->netdev_ops = &wilc_netdev_ops;
drivers/usb/host/xhci-pci.c +1 -0
@@ -194,6 +194,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) xhci->quirks |=XHCI_SSIC_PORT_UNUSED ;if (pdev->vendor ==PCI_VENDOR_ID_INTEL && (pdev->device ==PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI || + pdev->device ==PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI || pdev->device ==PCI_DEVICE_ID_INTEL_APL_XHCI )) xhci->quirks |=XHCI_INTEL_USB_ROLE_SW ; if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
drivers/usb/host/xhci-tegra.c +2 -2
@@ -941,9 +941,9 @@ static void tegra_xusb_powerdomain_remove(struct device *dev,device_link_del (tegra->genpd_dl_ss);if (tegra->genpd_dl_host)device_link_del (tegra->genpd_dl_host); -if (tegra->genpd_dev_ss) +if (!IS_ERR_OR_NULL (tegra->genpd_dev_ss))dev_pm_domain_detach (tegra->genpd_dev_ss, true); -if (tegra->genpd_dev_host) +if (!IS_ERR_OR_NULL (tegra->genpd_dev_host))dev_pm_domain_detach (tegra->genpd_dev_host, true); }
drivers/usb/serial/cp210x.c +12 -0
@@ -61,6 +61,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ { USB_DEVICE(0x0908, 0x01FF) }, /* Siemens RUGGEDCOM USB Serial Console */ + { USB_DEVICE(0x0B00, 0x3070) }, /* Ingenico 3070 */ { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */ { USB_DEVICE(0x0BED, 0x1101) }, /* MEI series 2000 Combo Acceptor */ { USB_DEVICE(0x0FCF, 0x1003) }, /* Dynastream ANT development board */
@@ -1353,8 +1354,13 @@ static int cp210x_gpio_get(struct gpio_chip *gc, unsigned int gpio)if (priv->partnum ==CP210X_PARTNUM_CP2105 ) req_type =REQTYPE_INTERFACE_TO_HOST ; + result =usb_autopm_get_interface (serial->interface); +if (result) +return result; + result =cp210x_read_vendor_block (serial, req_type,CP210X_READ_LATCH , &buf,sizeof (buf)); +usb_autopm_put_interface (serial->interface);if (result <0 )return result;
@@ -1375,6 +1381,10 @@ static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value) buf.mask =BIT (gpio); + result =usb_autopm_get_interface (serial->interface); +if (result) + goto out; +if (priv->partnum ==CP210X_PARTNUM_CP2105 ) { result = cp210x_write_vendor_block(serial, REQTYPE_HOST_TO_INTERFACE,
@@ -1392,6 +1402,8 @@ static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value) NULL, 0, USB_CTRL_SET_TIMEOUT); } +usb_autopm_put_interface (serial->interface); +out:if (result <0 ) {dev_err (&serial->interface->dev,"failed to set GPIO value: %d\n" , result);
drivers/usb/serial/ftdi_sio.c +2 -0
@@ -1025,6 +1025,8 @@ static const struct usb_device_id id_table_combined[] = { { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_BT_USB_PID) }, { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_WL_USB_PID) }, { USB_DEVICE(AIRBUS_DS_VID, AIRBUS_DS_P8GR) }, +/* EZPrototypes devices */ + { USB_DEVICE(EZPROTOTYPES_VID, HJELMSLUND_USB485_ISO_PID) }, { } /* Terminating entry */ };
drivers/usb/serial/ftdi_sio_ids.h +6 -0
@@ -1308,6 +1308,12 @@#define IONICS_VID 0x1c0c#define IONICS_PLUGCOMPUTER_PID 0x0102 +/* +* EZPrototypes (PID reseller) +*/ +#define EZPROTOTYPES_VID 0x1c40 +#define HJELMSLUND_USB485_ISO_PID 0x0477 +/* * Dresden Elektronik Sensor Terminal Board */
drivers/usb/serial/option.c +2 -0
@@ -1148,6 +1148,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM), .driver_info = NCTRL(0) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1102, 0xff), /* Telit ME910 (ECM) */ + .driver_info = NCTRL(0) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910), .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
fs/aio.c +9 -3
@@ -1680,6 +1680,7 @@ static int aio_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync, struct poll_iocb *req = container_of(wait, struct poll_iocb, wait); struct aio_kiocb *iocb = container_of(req, struct aio_kiocb, poll);__poll_t mask =key_to_poll (key); +unsigned long flags; req->woken = true;
@@ -1688,10 +1689,15 @@ static int aio_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,if (!(mask & req->events))return 0 ; -/* try to complete the iocb inline if we can: */ -if (spin_trylock (&iocb->ki_ctx->ctx_lock)) { +/* +* Try to complete the iocb inline if we can. Use +* irqsave/irqrestore because not all filesystems (e.g. fuse) +* call this function with IRQs disabled and because IRQs +* have to be disabled before ctx_lock is obtained. +*/ +if (spin_trylock_irqsave (&iocb->ki_ctx->ctx_lock, flags)) {list_del (&iocb->ki_list); -spin_unlock (&iocb->ki_ctx->ctx_lock); +spin_unlock_irqrestore (&iocb->ki_ctx->ctx_lock, flags);list_del_init (&req->wait.entry);aio_poll_complete (iocb, mask);
fs/exec.c +1 -1
@@ -932,7 +932,7 @@ int kernel_read_file(struct file *file, void **buf, loff_t *size, bytes =kernel_read (file, *buf + pos, i_size - pos, &pos);if (bytes <0 ) { ret = bytes; - goto out; + goto out_free; }if (bytes ==0 )
include/linux/cpufreq.h +2 -10
@@ -254,20 +254,12 @@ __ATTR(_name, 0644, show_##_name, store_##_name)static struct freq_attr _name = \ __ATTR(_name, 0200, NULL, store_##_name) -struct global_attr { -struct attribute attr; -ssize_t (*show)(struct kobject *kobj, -struct attribute *attr,char *buf); -ssize_t (*store)(struct kobject *a,struct attribute *b, -const char *c,size_t count); -}; -#define define_one_global_ro (_name) \ -static struct global_attr _name = \ +static struct kobj_attribute _name = \ __ATTR(_name, 0444, show_##_name, NULL)#define define_one_global_rw (_name) \ -static struct global_attr _name = \ +static struct kobj_attribute _name = \ __ATTR(_name, 0644, show_##_name, store_##_name)
include/net/bluetooth/bluetooth.h +1 -1
@@ -276,7 +276,7 @@ int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);int bt_sock_wait_state (struct sock *sk,int state,unsigned long timeo);int bt_sock_wait_ready (struct sock *sk,unsigned long flags); -void bt_accept_enqueue (struct sock *parent,struct sock *sk); +void bt_accept_enqueue (struct sock *parent,struct sock *sk,bool bh);void bt_accept_unlink (struct sock *sk);struct sock *bt_accept_dequeue (struct sock *parent,struct socket *newsock);
include/net/sch_generic.h +13 -18
@@ -51,7 +51,10 @@ struct qdisc_size_table {struct qdisc_skb_head {struct sk_buff *head;struct sk_buff *tail; -__u32 qlen; +union { +u32 qlen; +atomic_t atomic_qlen; + };spinlock_t lock; };
@@ -408,27 +411,19 @@ static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)BUILD_BUG_ON (sizeof (qcb->data) < sz); } -static inline int qdisc_qlen_cpu (const struct Qdisc *q) -{ -return this_cpu_ptr (q->cpu_qstats)->qlen; -} -static inline int qdisc_qlen (const struct Qdisc *q) {return q->q.qlen; } -static inline int qdisc_qlen_sum (const struct Qdisc *q) +static inline u32 qdisc_qlen_sum (const struct Qdisc *q) { -__u32 qlen = q->qstats.qlen; -int i; +u32 qlen = q->qstats.qlen; -if (q->flags &TCQ_F_NOLOCK ) { -for_each_possible_cpu (i) - qlen +=per_cpu_ptr (q->cpu_qstats, i)->qlen; - }else { +if (q->flags &TCQ_F_NOLOCK ) + qlen +=atomic_read (&q->q.atomic_qlen); +else qlen += q->q.qlen; - }return qlen; }
@@ -825,14 +820,14 @@ static inline void qdisc_qstats_cpu_backlog_inc(struct Qdisc *sch,this_cpu_add (sch->cpu_qstats->backlog,qdisc_pkt_len (skb)); } -static inline void qdisc_qstats_cpu_qlen_inc (struct Qdisc *sch) +static inline void qdisc_qstats_atomic_qlen_inc (struct Qdisc *sch) { -this_cpu_inc (sch->cpu_qstats->qlen); +atomic_inc (&sch->q.atomic_qlen); } -static inline void qdisc_qstats_cpu_qlen_dec (struct Qdisc *sch) +static inline void qdisc_qstats_atomic_qlen_dec (struct Qdisc *sch) { -this_cpu_dec (sch->cpu_qstats->qlen); +atomic_dec (&sch->q.atomic_qlen); }static inline void qdisc_qstats_cpu_requeues_inc (struct Qdisc *sch)
include/uapi/linux/android/binder.h +19 -0
@@ -41,6 +41,14 @@ enum {enum {FLAT_BINDER_FLAG_PRIORITY_MASK =0xff ,FLAT_BINDER_FLAG_ACCEPTS_FDS =0x100 , + +/** +* @FLAT_BINDER_FLAG_TXN_SECURITY_CTX: request security contexts +* +* Only when set, causes senders to include their security +* context +*/ +FLAT_BINDER_FLAG_TXN_SECURITY_CTX =0x1000 , };#ifdef BINDER_IPC_32BIT
@@ -218,6 +226,7 @@ struct binder_node_info_for_ref {#define BINDER_VERSION _IOWR('b', 9, struct binder_version)#define BINDER_GET_NODE_DEBUG_INFO _IOWR('b', 11, struct binder_node_debug_info)#define BINDER_GET_NODE_INFO_FOR_REF _IOWR('b', 12, struct binder_node_info_for_ref) +#define BINDER_SET_CONTEXT_MGR_EXT _IOW('b', 13, struct flat_binder_object)/* * NOTE: Two special error codes you should check for when calling
@@ -276,6 +285,11 @@ struct binder_transaction_data { } data; }; +struct binder_transaction_data_secctx { +struct binder_transaction_data transaction_data; +binder_uintptr_t secctx; +}; +struct binder_transaction_data_sg {struct binder_transaction_data transaction_data;binder_size_t buffers_size;
@@ -311,6 +325,11 @@ enum binder_driver_return_protocol {BR_OK =_IO ('r' ,1 ),/* No parameters! */ +BR_TRANSACTION_SEC_CTX =_IOR ('r' ,2 , + struct binder_transaction_data_secctx), +/* +* binder_transaction_data_secctx: the received command. +*/ BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data), BR_REPLY = _IOR('r', 3, struct binder_transaction_data),/*
kernel/trace/trace_events_filter.c +4 -1
@@ -1301,7 +1301,7 @@ static int parse_pred(const char *str, void *data,/* go past the last quote */ i++; - }else if (isdigit (str[i])) { + }else if (isdigit (str[i]) || str[i] =='-' ) {/* Make sure the field is not a string */ if (is_string_field (field)) {
@@ -1314,6 +1314,9 @@ static int parse_pred(const char *str, void *data, goto err_free; } +if (str[i] =='-' ) + i++; +/* We allow 0xDEADBEEF */ while (isalnum (str[i])) i++;
net/bluetooth/af_bluetooth.c +13 -3
@@ -154,15 +154,25 @@ void bt_sock_unlink(struct bt_sock_list *l, struct sock *sk) }EXPORT_SYMBOL (bt_sock_unlink); -void bt_accept_enqueue (struct sock *parent,struct sock *sk) +void bt_accept_enqueue (struct sock *parent,struct sock *sk,bool bh) {BT_DBG ("parent %p, sk %p" , parent, sk);sock_hold (sk); -lock_sock_nested (sk,SINGLE_DEPTH_NESTING ); + +if (bh) +bh_lock_sock_nested (sk); +else +lock_sock_nested (sk,SINGLE_DEPTH_NESTING ); +list_add_tail (&bt_sk (sk)->accept_q, &bt_sk (parent)->accept_q);bt_sk (sk)->parent = parent; -release_sock (sk); + +if (bh) +bh_unlock_sock (sk); +else +release_sock (sk); + parent->sk_ack_backlog++; }EXPORT_SYMBOL (bt_accept_enqueue);
net/bluetooth/l2cap_sock.c +1 -1
@@ -1252,7 +1252,7 @@ static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)l2cap_sock_init (sk, parent); -bt_accept_enqueue (parent, sk); +bt_accept_enqueue (parent, sk, false);release_sock (parent);
net/bluetooth/rfcomm/sock.c +1 -1
@@ -988,7 +988,7 @@ int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc *rfcomm_pi (sk)->channel = channel; sk->sk_state =BT_CONFIG ; -bt_accept_enqueue (parent, sk); +bt_accept_enqueue (parent, sk, true);/* Accept connection and return socket DLC */ *d =rfcomm_pi (sk)->dlc;
net/bluetooth/sco.c +1 -1
@@ -193,7 +193,7 @@ static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, conn->sk = sk;if (parent) -bt_accept_enqueue (parent, sk); +bt_accept_enqueue (parent, sk, true); } static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
net/core/gen_stats.c +0 -2
@@ -291,7 +291,6 @@ __gnet_stats_copy_queue_cpu(struct gnet_stats_queue *qstats,for_each_possible_cpu (i) {const struct gnet_stats_queue *qcpu =per_cpu_ptr (q, i); - qstats->qlen =0 ; qstats->backlog += qcpu->backlog; qstats->drops += qcpu->drops; qstats->requeues += qcpu->requeues;
@@ -307,7 +306,6 @@ void __gnet_stats_copy_queue(struct gnet_stats_queue *qstats,if (cpu) {__gnet_stats_copy_queue_cpu (qstats, cpu); }else { - qstats->qlen = q->qlen; qstats->backlog = q->backlog; qstats->drops = q->drops; qstats->requeues = q->requeues;
net/core/net-sysfs.c +3 -0
@@ -1547,6 +1547,9 @@ static int register_queue_kobjects(struct net_device *dev) error:netdev_queue_update_kobjects (dev, txq,0 );net_rx_queue_update_kobjects (dev, rxq,0 ); +#ifdef CONFIG_SYSFS +kset_unregister (dev->queues_kset); +#endif return error; }
net/ipv6/ip6mr.c +4 -4
@@ -1964,10 +1964,10 @@ int ip6mr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)static inline int ip6mr_forward2_finish (struct net *net,struct sock *sk,struct sk_buff *skb) { -__IP6_INC_STATS (net,ip6_dst_idev (skb_dst (skb)), -IPSTATS_MIB_OUTFORWDATAGRAMS ); -__IP6_ADD_STATS (net,ip6_dst_idev (skb_dst (skb)), -IPSTATS_MIB_OUTOCTETS , skb->len); +IP6_INC_STATS (net,ip6_dst_idev (skb_dst (skb)), +IPSTATS_MIB_OUTFORWDATAGRAMS ); +IP6_ADD_STATS (net,ip6_dst_idev (skb_dst (skb)), +IPSTATS_MIB_OUTOCTETS , skb->len);return dst_output (net, sk, skb); }
net/sched/sch_generic.c +6 -7
@@ -68,7 +68,7 @@ static inline struct sk_buff *__skb_dequeue_bad_txq(struct Qdisc *q) skb =__skb_dequeue (&q->skb_bad_txq);if (qdisc_is_percpu_stats (q)) {qdisc_qstats_cpu_backlog_dec (q, skb); -qdisc_qstats_cpu_qlen_dec (q); +qdisc_qstats_atomic_qlen_dec (q); }else {qdisc_qstats_backlog_dec (q, skb); q->q.qlen--;
@@ -108,7 +108,7 @@ static inline void qdisc_enqueue_skb_bad_txq(struct Qdisc *q,if (qdisc_is_percpu_stats (q)) {qdisc_qstats_cpu_backlog_inc (q, skb); -qdisc_qstats_cpu_qlen_inc (q); +qdisc_qstats_atomic_qlen_inc (q); }else {qdisc_qstats_backlog_inc (q, skb); q->q.qlen++;
@@ -147,7 +147,7 @@ static inline int dev_requeue_skb_locked(struct sk_buff *skb, struct Qdisc *q)qdisc_qstats_cpu_requeues_inc (q);qdisc_qstats_cpu_backlog_inc (q, skb); -qdisc_qstats_cpu_qlen_inc (q); +qdisc_qstats_atomic_qlen_inc (q); skb = next; }
@@ -252,7 +252,7 @@ static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate, skb =__skb_dequeue (&q->gso_skb);if (qdisc_is_percpu_stats (q)) {qdisc_qstats_cpu_backlog_dec (q, skb); -qdisc_qstats_cpu_qlen_dec (q); +qdisc_qstats_atomic_qlen_dec (q); }else {qdisc_qstats_backlog_dec (q, skb); q->q.qlen--;
@@ -645,7 +645,7 @@ static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc *qdisc,if (unlikely (err))return qdisc_drop_cpu (skb, qdisc, to_free); -qdisc_qstats_cpu_qlen_inc (qdisc); +qdisc_qstats_atomic_qlen_inc (qdisc);/* Note: skb can not be used after skb_array_produce(), * so we better not use qdisc_qstats_cpu_backlog_inc() */
@@ -670,7 +670,7 @@ static struct sk_buff *pfifo_fast_dequeue(struct Qdisc *qdisc)if (likely (skb)) {qdisc_qstats_cpu_backlog_dec (qdisc, skb);qdisc_bstats_cpu_update (qdisc, skb); -qdisc_qstats_cpu_qlen_dec (qdisc); +qdisc_qstats_atomic_qlen_dec (qdisc); }return skb;
@@ -714,7 +714,6 @@ static void pfifo_fast_reset(struct Qdisc *qdisc)struct gnet_stats_queue *q =per_cpu_ptr (qdisc->cpu_qstats, i); q->backlog =0 ; - q->qlen =0 ; } }
net/sctp/socket.c +1 -0
@@ -1866,6 +1866,7 @@ static int sctp_sendmsg_check_sflags(struct sctp_association *asoc,pr_debug ("%s: aborting association:%p\n" , __func__, asoc);sctp_primitive_ABORT (net, asoc, chunk); +iov_iter_revert (&msg->msg_iter, msg_len);return 0 ; }
net/tipc/socket.c +1 -1
@@ -1333,7 +1333,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)if (unlikely (!dest)) { dest = &tsk->peer; -if (!syn || dest->family !=AF_TIPC ) +if (!syn && dest->family !=AF_TIPC )return -EDESTADDRREQ ; }
tools/testing/selftests/firmware/config +0 -1
@@ -1,6 +1,5 @@ CONFIG_TEST_FIRMWARE=y CONFIG_FW_LOADER=y CONFIG_FW_LOADER_USER_HELPER=y -CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y
tools/testing/selftests/firmware/fw_filesystem.sh +6 -3
@@ -155,8 +155,11 @@ read_firmwares() { for i in $(seq 0 3); do config_set_read_fw_idx $i - # Verify the contents match - if ! diff -q "$FW" $DIR/read_firmware 2>/dev/null ; then + # Verify the contents are what we expect. + # -Z required for now -- check for yourself, md5sum + # on $FW and DIR/read_firmware will yield the same. Even + # cmp agrees, so something is off. + if ! diff -q -Z "$FW" $DIR/read_firmware 2>/dev/null ; then echo "request #$i: firmware was not loaded" >&2 exit 1 fi
@@ -168,7 +171,7 @@ read_firmwares_expect_nofile() for i in $(seq 0 3); do config_set_read_fw_idx $i # Ensures contents differ - if diff -q "$FW" $DIR/read_firmware 2>/dev/null ; then + if diff -q -Z "$FW" $DIR/read_firmware 2>/dev/null ; then echo "request $i: file was not expected to match" >&2 exit 1 fi
tools/testing/selftests/firmware/fw_lib.sh +1 -1
@@ -91,7 +91,7 @@ verify_reqs() if [ "$TEST_REQS_FW_SYSFS_FALLBACK" = "yes" ]; then if [ ! "$HAS_FW_LOADER_USER_HELPER" = "yes" ]; then echo "usermode helper disabled so ignoring test" - exit $ksft_skip + exit 0 fi fi }