Linux 4.9.262
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
I'm announcing the release of the 4.9.262 kernel.
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/alpha/include/asm/uaccess.h | 67 +---------- arch/alpha/lib/Makefile | 33 +++-- arch/alpha/lib/clear_user.S | 66 ++++------- arch/alpha/lib/copy_user.S | 82 +++++-------- arch/alpha/lib/ev6-clear_user.S | 84 +++++--------- arch/alpha/lib/ev6-copy_user.S | 104 +++++++---------- arch/arm/kvm/mmu.c | 2 arch/powerpc/include/asm/code-patching.h | 2 arch/powerpc/perf/core-book3s.c | 19 ++- arch/s390/kernel/smp.c | 2 drivers/block/rsxx/core.c | 1 drivers/hwmon/lm90.c | 42 ++++++- drivers/iio/imu/adis16400_buffer.c | 5 drivers/iio/imu/adis_buffer.c | 5 drivers/media/usb/usbtv/usbtv-audio.c | 2 drivers/mmc/core/mmc.c | 15 +- drivers/mmc/host/mtk-sd.c | 18 +-- drivers/mmc/host/mxs-mmc.c | 2 drivers/net/can/flexcan.c | 12 +- drivers/net/ethernet/atheros/alx/main.c | 8 + drivers/net/ethernet/davicom/dm9000.c | 21 ++- drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 2 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 2 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 drivers/net/ethernet/renesas/sh_eth.c | 2 drivers/net/wan/lapbether.c | 3 drivers/net/wireless/ath/ath9k/ath9k.h | 3 drivers/net/wireless/ath/ath9k/xmit.c | 6 + drivers/pci/host/pci-xgene-msi.c | 10 - drivers/s390/block/dasd.c | 3 drivers/scsi/libiscsi.c | 11 - drivers/staging/comedi/drivers/addi_apci_1032.c | 4 drivers/staging/comedi/drivers/addi_apci_1500.c | 18 +-- drivers/staging/comedi/drivers/adv_pci1710.c | 10 - drivers/staging/comedi/drivers/das6402.c | 2 drivers/staging/comedi/drivers/das800.c | 2 drivers/staging/comedi/drivers/dmm32at.c | 2 drivers/staging/comedi/drivers/me4000.c | 2 drivers/staging/comedi/drivers/pcl711.c | 2 drivers/staging/comedi/drivers/pcl818.c | 2 drivers/staging/ks7010/ks_wlan_net.c | 6 - drivers/staging/rtl8188eu/core/rtw_ap.c | 5 drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 6 - drivers/staging/rtl8192e/rtl8192e/rtl_wx.c | 7 - drivers/staging/rtl8192u/r8192U_wx.c | 6 - drivers/staging/rtl8712/rtl871x_cmd.c | 6 - drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 2 drivers/usb/class/cdc-acm.c | 5 drivers/usb/gadget/function/f_uac2.c | 2 drivers/usb/host/xhci.c | 16 ++ drivers/usb/renesas_usbhs/pipe.c | 2 drivers/usb/serial/ch341.c | 1 drivers/usb/serial/cp210x.c | 3 drivers/usb/serial/io_edgeport.c | 26 ++-- drivers/usb/usbip/stub_dev.c | 42 +++++-- drivers/usb/usbip/vhci_sysfs.c | 39 +++++- drivers/usb/usbip/vudc_sysfs.c | 10 + drivers/xen/events/events_2l.c | 22 ++- drivers/xen/events/events_base.c | 130 ++++++++++++++++------ drivers/xen/events/events_fifo.c | 7 - drivers/xen/events/events_internal.h | 22 ++- fs/binfmt_misc.c | 29 ++-- fs/cifs/cifsfs.c | 2 fs/configfs/file.c | 6 - fs/nfs/nfs4proc.c | 2 fs/udf/inode.c | 9 + include/linux/can/skb.h | 8 + include/uapi/linux/netfilter/nfnetlink_cthelper.h | 2 mm/slub.c | 2 net/ipv4/udp_offload.c | 2 net/mpls/mpls_gso.c | 3 net/netfilter/x_tables.c | 6 - net/sched/sch_api.c | 8 - scripts/recordmcount.c | 2 scripts/recordmcount.pl | 13 ++ sound/pci/hda/hda_bind.c | 4 sound/pci/hda/patch_hdmi.c | 13 ++ sound/usb/quirks.c | 1 79 files changed, 684 insertions(+), 474 deletions(-)
Adrian Hunter (1):
mmc: core: Fix partition switch time for eMMC
Al Viro (1):
alpha: switch __copy_user() and __do_clean_user() to normal calling conventions
Athira Rajeev (1):
powerpc/perf: Record counter overflow always if SAMPLE_IP is unset
Balazs Nemeth (1):
net: avoid infinite loop in mpls_gso_segment when mpls_hlen == 0
Boyang Yu (1):
hwmon: (lm90) Fix max6658 sporadic wrong temperature reading
Chaotian Jing (1):
mmc: mediatek: fix race condition between msdc_request_timeout and irq
Christophe JAILLET (1):
mmc: mxs-mmc: Fix a resource leak in an error handling path in 'mxs_mmc_probe()'
Daiyue Zhang (1):
configfs: fix a use-after-free in __configfs_open_file
Dan Carpenter (5):
staging: rtl8192u: fix ->ssid overflow in r8192_wx_set_scan()
staging: rtl8188eu: prevent ->ssid overflow in rtw_wx_set_scan()
staging: rtl8712: unterminated string leads to read overflow
staging: rtl8188eu: fix potential memory corruption in rtw_check_beacon_data()
staging: ks7010: prevent buffer overflow in ks_wlan_set_scan()
Daniel Borkmann (1):
net: Fix gro aggregation for udp encaps with zero csum
Dmitry V. Levin (1):
uapi: nfnetlink_cthelper.h: fix userspace compilation error
Felix Fietkau (1):
ath9k: fix transmitting to stations in dynamic SMPS mode
Greg Kroah-Hartman (1):
Linux 4.9.262
Heiko Carstens (1):
s390/smp: __smp_rescan_cpus() - move cpumask away from stack
Ian Abbott (9):
staging: comedi: addi_apci_1032: Fix endian problem for COS sample
staging: comedi: addi_apci_1500: Fix endian problem for command sample
staging: comedi: adv_pci1710: Fix endian problem for AI command data
staging: comedi: das6402: Fix endian problem for AI command data
staging: comedi: das800: Fix endian problem for AI command data
staging: comedi: dmm32at: Fix endian problem for AI command data
staging: comedi: me4000: Fix endian problem for AI command data
staging: comedi: pcl711: Fix endian problem for AI command data
staging: comedi: pcl818: Fix endian problem for AI command data
Jakub Kicinski (1):
ethernet: alx: fix order of calls on resume
Jia-Ju Bai (1):
block: rsxx: fix error return code of rsxx_pci_probe()
Joakim Zhang (2):
can: flexcan: assert FRZ bit in flexcan_chip_freeze()
can: flexcan: enable RX FIFO after FRZ/HALT valid
Joe Lawrence (1):
scripts/recordmcount.{c,pl}: support -ffunction-sections .text.* section names
Juergen Gross (3):
xen/events: reset affinity of 2-level event when tearing it down xen/events: don't unmask an event channel when an eoi is pending xen/events: avoid handling the same event on two cpus at the same time
Karan Singhal (1):
USB: serial: cp210x: add ID for Acuity Brands nLight Air Adapter
Kevin(Yudong) Yang (1):
net/mlx4_en: update moderation when config reset
Krzysztof Kozlowski (1):
iio: imu: adis16400: release allocated memory on failure
Lee Gibson (2):
staging: rtl8712: Fix possible buffer overflow in r8712_sitesurvey_cmd
staging: rtl8192e: Fix possible buffer overflow in _rtl92e_wx_set_scan
Linus Torvalds (1):
Revert "mm, slub: consider rest of partial list if acquire_slab() fails"
Lior Ribak (1):
binfmt_misc: fix possible deadlock in bm_register_write
Marc Zyngier (1):
KVM: arm64: Fix exclusive limit for IPA size
Martin Kaiser (1):
PCI: xgene-msi: Fix race in installing chained irq handler
Masahiro Yamada (3):
alpha: add $(src)/ rather than $(obj)/ to make source file path
alpha: merge build rules of division routines
alpha: make short build log available for division routines
Mathias Nyman (1):
xhci: Improve detection of device initiated wake signal.
Maxim Mikityanskiy (1):
media: usbtv: Fix deadlock on suspend
Maximilian Heyne (1):
net: sched: avoid duplicates in classes dump
Mike Christie (1):
scsi: libiscsi: Fix iscsi_prep_scsi_cmd_pdu() error handling
Naveen N. Rao (1):
powerpc/64s: Fix instruction encoding for lis in ppc_function_entry()
Navid Emamdoost (1):
iio: imu: adis16400: fix memory leak
Niv Sardi (1):
USB: serial: ch341: add new Product ID
Oleksij Rempel (1):
can: skb: can_skb_set_owner(): fix ref counting if socket was closed before setting skb ownership
Ondrej Mosnacek (1):
NFSv4.2: fix return value of _nfs4_get_security_label()
Paul Cercueil (2):
net: davicom: Fix regulator not turned off on failed probe
net: davicom: Fix regulator not turned off on driver removal
Paulo Alcantara (1):
cifs: return proper error code in statfs(2)
Pavel Skripkin (1):
USB: serial: io_edgeport: fix memory leak in edge_startup
Richard Henderson (1):
alpha: Package string routines together
Ruslan Bilovol (1):
usb: gadget: f_uac2: always increase endpoint max_packet_size by one audio slot
Sebastian Reichel (1):
USB: serial: cp210x: add some more GE USB IDs
Sergey Shtylyov (1):
sh_eth: fix TRSCER mask for R7S72100
Shuah Khan (5):
usbip: fix stub_dev to check for stream socket
usbip: fix vhci_hcd to check for stream socket
usbip: fix vudc to check for stream socket
usbip: fix stub_dev usbip_sockfd_store() races leading to gpf
usbip: fix vhci_hcd attach_store() races leading to gpf
Stefan Haberland (1):
s390/dasd: fix hanging DASD driver unbind
Steven J. Magnani (1):
udf: fix silent AED tagLocation corruption
Takashi Iwai (3):
ALSA: hda/hdmi: Cancel pending works before suspend
ALSA: hda: Avoid spurious unsol event handling during S3/S4
ALSA: usb-audio: Fix "cannot get freq eq" errors on Dell AE515 sound bar
Vasily Averin (1):
netfilter: x_tables: gpf inside xt_find_revision()
Xie He (1):
net: lapbether: Remove netif_start_queue / netif_stop_queue
Yorick de Wid (1):
Goodix Fingerprint device is not a modem
Yoshihiro Shimoda (1):
usb: renesas_usbhs: Clear PIPECFG for re-enabling pipe with other EPNUM
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 261 +SUBLEVEL = 262 EXTRAVERSION = NAME = Roaring Lionus
arch/alpha/include/asm/uaccess.h +11 -56
93 lines not on this page · raw message
arch/alpha/lib/Makefile +19 -14
@@ -20,12 +20,8 @@ lib-y = __divqu.o __remqu.o __divlu.o __remlu.o \ checksum.o \ csum_partial_copy.o \ $(ev67-y)strlen.o \ - $(ev67-y)strcat.o \ - strcpy.o \ - $(ev67-y)strncat.o \ - strncpy.o \ - $(ev6-y)stxcpy.o \ - $(ev6-y)stxncpy.o \ + stycpy.o \ + styncpy.o \ $(ev67-y)strchr.o \ $(ev67-y)strrchr.o \ $(ev6-y)memchr.o \
@@ -46,11 +42,20 @@ AFLAGS___remqu.o = -DREM AFLAGS___divlu.o = -DDIV -DINTSIZE AFLAGS___remlu.o = -DREM -DINTSIZE -$(obj)/__divqu.o: $(obj)/$(ev6-y)divide.S - $(cmd_as_o_S) -$(obj)/__remqu.o: $(obj)/$(ev6-y)divide.S - $(cmd_as_o_S) -$(obj)/__divlu.o: $(obj)/$(ev6-y)divide.S - $(cmd_as_o_S) -$(obj)/__remlu.o: $(obj)/$(ev6-y)divide.S - $(cmd_as_o_S) +$(addprefix $(obj)/,__divqu.o __remqu.o __divlu.o __remlu.o): \ + $(src)/$(ev6-y)divide.S FORCE + $(call if_changed_rule,as_o_S) + +# There are direct branches between {str*cpy,str*cat} and stx*cpy. +# Ensure the branches are within range by merging these objects. + +LDFLAGS_stycpy.o := -r +LDFLAGS_styncpy.o := -r + +$(obj)/stycpy.o: $(obj)/strcpy.o $(obj)/$(ev67-y)strcat.o \ + $(obj)/$(ev6-y)stxcpy.o FORCE + $(call if_changed,ld) + +$(obj)/styncpy.o: $(obj)/strncpy.o $(obj)/$(ev67-y)strncat.o \ + $(obj)/$(ev6-y)stxncpy.o FORCE + $(call if_changed,ld)
arch/alpha/lib/clear_user.S +26 -40
124 lines not on this page · raw message
arch/alpha/lib/copy_user.S +34 -48
140 lines not on this page · raw message
arch/alpha/lib/ev6-clear_user.S +35 -49
184 lines not on this page · raw message
arch/alpha/lib/ev6-copy_user.S +45 -59
211 lines not on this page · raw message
arch/arm/kvm/mmu.c +1 -1
@@ -1834,7 +1834,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,* Prevent userspace from creating a memory region outside of the IPA * space addressable by the KVM guest IPA space. */ -if (memslot->base_gfn + memslot->npages >= +if (memslot->base_gfn + memslot->npages > (KVM_PHYS_SIZE >>PAGE_SHIFT ))return -EFAULT ;
arch/powerpc/include/asm/code-patching.h +1 -1
@@ -46,7 +46,7 @@ void __patch_exception(int exc, unsigned long addr);#endif #define OP_RT_RA_MASK 0xffff0000UL -#define LIS_R2 0x3c020000UL +#define LIS_R2 0x3c400000UL#define ADDIS_R2_R12 0x3c4c0000UL#define ADDI_R2_R2 0x38420000UL
arch/powerpc/perf/core-book3s.c +15 -4
@@ -2010,7 +2010,17 @@ static void record_and_restart(struct perf_event *event, unsigned long val, left += period;if (left <=0 ) left = period; - record =siar_valid (regs); + +/* +* If address is not requested in the sample via +* PERF_SAMPLE_IP, just record that sample irrespective +* of SIAR valid check. +*/ +if (event->attr.sample_type &PERF_SAMPLE_IP ) + record =siar_valid (regs); +else + record =1 ; + event->hw.last_period = event->hw.sample_period; }if (left <0x80000000LL )
@@ -2028,9 +2038,10 @@ static void record_and_restart(struct perf_event *event, unsigned long val,* MMCR2. Check attr.exclude_kernel and address to drop the sample in * these cases. */ -if (event->attr.exclude_kernel && record) -if (is_kernel_addr (mfspr (SPRN_SIAR ))) - record =0 ; +if (event->attr.exclude_kernel && + (event->attr.sample_type &PERF_SAMPLE_IP ) && +is_kernel_addr (mfspr (SPRN_SIAR ))) + record =0 ;/* * Finally record data if requested.
arch/s390/kernel/smp.c +1 -1
@@ -727,7 +727,7 @@ static int smp_add_core(struct sclp_core_entry *core, cpumask_t *avail,static int __smp_rescan_cpus (struct sclp_core_info *info,bool early) {struct sclp_core_entry *core; -cpumask_t avail; +static cpumask_t avail;bool configured;u16 core_id;int nr, i;
drivers/block/rsxx/core.c +1 -0
@@ -892,6 +892,7 @@ static int rsxx_pci_probe(struct pci_dev *dev, card->event_wq =create_singlethread_workqueue (DRIVER_NAME "_event" );if (!card->event_wq) {dev_err (CARD_TO_DEV (card),"Failed card event setup.\n" ); + st = -ENOMEM ; goto failed_event_handler; }
drivers/hwmon/lm90.c +38 -4
83 lines not on this page · raw message
drivers/iio/imu/adis16400_buffer.c +4 -1
@@ -37,8 +37,11 @@ int adis16400_update_scan_mode(struct iio_dev *indio_dev,return -ENOMEM ; adis->buffer =kzalloc (burst_length +sizeof (u16),GFP_KERNEL ); -if (!adis->buffer) +if (!adis->buffer) { +kfree (adis->xfer); + adis->xfer =NULL ;return -ENOMEM ; + } tx = adis->buffer + burst_length; tx[0 ] =ADIS_READ_REG (ADIS16400_GLOB_CMD );
drivers/iio/imu/adis_buffer.c +4 -1
@@ -39,8 +39,11 @@ int adis_update_scan_mode(struct iio_dev *indio_dev,return -ENOMEM ; adis->buffer =kzalloc (indio_dev->scan_bytes *2 ,GFP_KERNEL ); -if (!adis->buffer) +if (!adis->buffer) { +kfree (adis->xfer); + adis->xfer =NULL ;return -ENOMEM ; + } rx = adis->buffer; tx = rx + scan_count;
drivers/media/usb/usbtv/usbtv-audio.c +1 -1
@@ -398,7 +398,7 @@ void usbtv_audio_free(struct usbtv *usbtv)cancel_work_sync (&usbtv->snd_trigger);if (usbtv->snd && usbtv->udev) { -snd_card_free (usbtv->snd); +snd_card_free_when_closed (usbtv->snd); usbtv->snd =NULL ; } }
drivers/mmc/core/mmc.c +11 -4
@@ -423,10 +423,6 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)/* EXT_CSD value is in units of 10ms, but we store in ms */ card->ext_csd.part_time =10 * ext_csd[EXT_CSD_PART_SWITCH_TIME ]; -/* Some eMMC set the value too low so set a minimum */ -if (card->ext_csd.part_time && - card->ext_csd.part_time <MMC_MIN_PART_SWITCH_TIME ) - card->ext_csd.part_time =MMC_MIN_PART_SWITCH_TIME ;/* Sleep / awake timeout in 100ns units */ if (sa_shift >0 && sa_shift <=0x17 )
@@ -610,6 +606,17 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd) card->ext_csd.data_sector_size =512 ; } +/* +* GENERIC_CMD6_TIME is to be used "unless a specific timeout is defined +* when accessing a specific field", so use it here if there is no +* PARTITION_SWITCH_TIME. +*/ +if (!card->ext_csd.part_time) + card->ext_csd.part_time = card->ext_csd.generic_cmd6_time; +/* Some eMMC set the value too low so set a minimum */ +if (card->ext_csd.part_time <MMC_MIN_PART_SWITCH_TIME ) + card->ext_csd.part_time =MMC_MIN_PART_SWITCH_TIME ; +/* eMMC v5 or later */ if (card->ext_csd.rev >=7 ) { memcpy(card->ext_csd.fwrev, &ext_csd[EXT_CSD_FIRMWARE_VERSION],
drivers/mmc/host/mtk-sd.c +10 -8
@@ -741,13 +741,13 @@ static void msdc_track_cmd_data(struct msdc_host *host,static void msdc_request_done (struct msdc_host *host,struct mmc_request *mrq) {unsigned long flags; -bool ret; - ret =cancel_delayed_work (&host->req_timeout); -if (!ret) { -/* delay work already running */ -return ; - } +/* +* No need check the return value of cancel_delayed_work, as only ONE +* path will go here! +*/ +cancel_delayed_work (&host->req_timeout); +spin_lock_irqsave (&host->lock, flags); host->mrq =NULL ;spin_unlock_irqrestore (&host->lock, flags);
@@ -765,7 +765,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,bool done = false;bool sbc_error;unsigned long flags; -u32 *rsp = cmd->resp; +u32 *rsp; if (mrq->sbc && cmd == mrq->cmd && (events & (MSDC_INT_ACMDRDY | MSDC_INT_ACMDCRCERR
@@ -786,6 +786,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,if (done)return true; + rsp = cmd->resp;sdr_clr_bits (host->base +MSDC_INTEN , cmd_ints_mask);
@@ -968,7 +969,7 @@ static void msdc_data_xfer_next(struct msdc_host *host,static bool msdc_data_xfer_done (struct msdc_host *host,u32 events,struct mmc_request *mrq,struct mmc_data *data) { -struct mmc_command *stop = data->stop; +struct mmc_command *stop;unsigned long flags;bool done; unsigned int check_data = events &
@@ -984,6 +985,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,if (done)return true; + stop = data->stop;if (check_data || (stop && stop->error)) { dev_dbg(host->dev, "DMA status: 0x%8X\n",
drivers/mmc/host/mxs-mmc.c +1 -1
@@ -651,7 +651,7 @@ static int mxs_mmc_probe(struct platform_device *pdev) ret =mmc_of_parse (mmc);if (ret) - goto out_clk_disable; + goto out_free_dma; mmc->ocr_avail =MMC_VDD_32_33 |MMC_VDD_33_34 ;
drivers/net/can/flexcan.c +8 -4
@@ -383,7 +383,7 @@ static int flexcan_chip_freeze(struct flexcan_priv *priv)u32 reg; reg =flexcan_read (®s->mcr); - reg |=FLEXCAN_MCR_HALT ; + reg |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT ;flexcan_write (reg, ®s->mcr);while (timeout-- && !(flexcan_read (®s->mcr) &FLEXCAN_MCR_FRZ_ACK ))
@@ -1098,10 +1098,14 @@ static int register_flexcandev(struct net_device *dev)if (err) goto out_chip_disable; -/* set freeze, halt and activate FIFO, restrict register access */ +/* set freeze, halt */ + err =flexcan_chip_freeze (priv); +if (err) + goto out_chip_disable; + +/* activate FIFO, restrict register access */ reg =flexcan_read (®s->mcr); - reg |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT | -FLEXCAN_MCR_FEN |FLEXCAN_MCR_SUPV ; + reg |=FLEXCAN_MCR_FEN |FLEXCAN_MCR_SUPV ;flexcan_write (reg, ®s->mcr);/* Currently we only support newer versions of this core
drivers/net/ethernet/atheros/alx/main.c +7 -1
@@ -1694,13 +1694,19 @@ static int alx_resume(struct device *dev)struct pci_dev *pdev =to_pci_dev (dev);struct alx_priv *alx =pci_get_drvdata (pdev);struct alx_hw *hw = &alx->hw; +int err;alx_reset_phy (hw);if (!netif_running (alx->dev))return 0 ; + + err =__alx_open (alx, true); +if (err) +return err; +netif_device_attach (alx->dev); -return __alx_open (alx, true); +return 0 ; } static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume);
drivers/net/ethernet/davicom/dm9000.c +17 -4
@@ -143,6 +143,8 @@ struct board_info {u32 wake_state;int ip_summed; + +struct regulator *power_supply; };/* debug code */
@@ -1459,7 +1461,7 @@ dm9000_probe(struct platform_device *pdev)if (ret) {dev_err (dev,"failed to request reset gpio %d: %d\n" , reset_gpios, ret); -return -ENODEV ; + goto out_regulator_disable; }/* According to manual PWRST# Low Period Min 1ms */
@@ -1471,8 +1473,10 @@ dm9000_probe(struct platform_device *pdev)if (!pdata) { pdata =dm9000_parse_dt (&pdev->dev); -if (IS_ERR (pdata)) -return PTR_ERR (pdata); +if (IS_ERR (pdata)) { + ret =PTR_ERR (pdata); + goto out_regulator_disable; + } }/* Init network device */
@@ -1489,6 +1493,8 @@ dm9000_probe(struct platform_device *pdev) db->dev = &pdev->dev; db->ndev = ndev; +if (!IS_ERR (power)) + db->power_supply = power;spin_lock_init (&db->lock);mutex_init (&db->addr_lock);
@@ -1715,6 +1721,10 @@ dm9000_probe(struct platform_device *pdev)dm9000_release_board (pdev, db);free_netdev (ndev); +out_regulator_disable: +if (!IS_ERR (power)) +regulator_disable (power); +return ret; }
@@ -1774,10 +1784,13 @@ static int dm9000_drv_remove(struct platform_device *pdev) {struct net_device *ndev =platform_get_drvdata (pdev); +struct board_info *dm =to_dm9000_board (ndev);unregister_netdev (ndev); -dm9000_release_board (pdev,netdev_priv (ndev)); +dm9000_release_board (pdev, dm);free_netdev (ndev);/* free device structure */ +if (dm->power_supply) +regulator_disable (dm->power_supply);dev_dbg (&pdev->dev,"released and freed device\n" );return 0 ;
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +1 -1
@@ -47,7 +47,7 @@#define EN_ETHTOOL_SHORT_MASK cpu_to_be16(0xffff)#define EN_ETHTOOL_WORD_MASK cpu_to_be32(0xffffffff) -static int mlx4_en_moderation_update (struct mlx4_en_priv *priv) +int mlx4_en_moderation_update (struct mlx4_en_priv *priv) {int i;int err =0 ;
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +2 -0
@@ -3459,6 +3459,8 @@ int mlx4_en_reset_config(struct net_device *dev,en_err (priv,"Failed starting port\n" ); } +if (!err) + err =mlx4_en_moderation_update (priv); out:mutex_unlock (&mdev->state_lock);kfree (tmp);
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +1 -0
@@ -773,6 +773,7 @@ void mlx4_en_ptp_overflow_check(struct mlx4_en_dev *mdev);#define DEV_FEATURE_CHANGED (dev, new_features, feature) \ ((dev->features & feature) ^ (new_features & feature)) +int mlx4_en_moderation_update (struct mlx4_en_priv *priv);int mlx4_en_reset_config (struct net_device *dev,struct hwtstamp_config ts_config,netdev_features_t new_features);
drivers/net/ethernet/renesas/sh_eth.c +2 -0
@@ -526,6 +526,8 @@ static struct sh_eth_cpu_data r7s72100_data = { EESR_TDE | EESR_ECI, .fdr_value = 0x0000070f, + .trscer_err_mask = DESC_I_RINT8 | DESC_I_RINT5, + .no_psr = 1, .apr = 1, .mpr = 1,
drivers/net/wan/lapbether.c +0 -3
@@ -286,7 +286,6 @@ static int lapbeth_open(struct net_device *dev)return -ENODEV ; } -netif_start_queue (dev);return 0 ; }
@@ -294,8 +293,6 @@ static int lapbeth_close(struct net_device *dev) {int err; -netif_stop_queue (dev); -if ((err =lapb_unregister (dev)) !=LAPB_OK )pr_err ("lapb_unregister error: %d\n" , err);
drivers/net/wireless/ath/ath9k/ath9k.h +2 -1
@@ -179,7 +179,8 @@ struct ath_frame_info {s8 txq;u8 keyix;u8 rtscts_rate; - u8 retries : 7; + u8 retries : 6; + u8 dyn_smps : 1; u8 baw_tracked : 1;u8 tx_power; enum ath9k_key_type keytype:2;
drivers/net/wireless/ath/ath9k/xmit.c +6 -0
@@ -1255,6 +1255,11 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, is_40, is_sgi, is_sp);if (rix <8 && (tx_info->flags &IEEE80211_TX_CTL_STBC )) info->rates[i].RateFlags |=ATH9K_RATESERIES_STBC ; +if (rix >=8 && fi->dyn_smps) { + info->rates[i].RateFlags |= +ATH9K_RATESERIES_RTS_CTS ; + info->flags |=ATH9K_TXDESC_CTSENA ; + } info->txpower[i] =ath_get_rate_txpower (sc, bf, rix, is_40, false);
@@ -2158,6 +2163,7 @@ static void setup_frame_info(struct ieee80211_hw *hw, fi->keyix = an->ps_key; else fi->keyix = ATH9K_TXKEYIX_INVALID; + fi->dyn_smps = sta && sta->smps_mode ==IEEE80211_SMPS_DYNAMIC ; fi->keytype = keytype; fi->framelen = framelen; fi->tx_power = txpower;
drivers/pci/host/pci-xgene-msi.c +3 -7
@@ -393,13 +393,9 @@ static int xgene_msi_hwirq_alloc(unsigned int cpu)if (!msi_group->gic_irq)continue ; -irq_set_chained_handler (msi_group->gic_irq, - xgene_msi_isr); - err =irq_set_handler_data (msi_group->gic_irq, msi_group); -if (err) { -pr_err ("failed to register GIC IRQ handler\n" ); -return -EINVAL ; - } +irq_set_chained_handler_and_data (msi_group->gic_irq, + xgene_msi_isr, msi_group); +/* * Statically allocate MSI GIC IRQs to each CPU core. * With 8-core X-Gene v1, 2 MSI GIC IRQs are allocated
drivers/s390/block/dasd.c +1 -2
@@ -3399,8 +3399,6 @@ void dasd_generic_remove(struct ccw_device *cdev)struct dasd_device *device;struct dasd_block *block; - cdev->handler =NULL ; - device =dasd_device_from_cdev (cdev);if (IS_ERR (device)) {dasd_remove_sysfs_files (cdev);
@@ -3419,6 +3417,7 @@ void dasd_generic_remove(struct ccw_device *cdev)* no quite down yet. */ dasd_set_target_state (device,DASD_STATE_NEW ); + cdev->handler =NULL ;/* dasd_delete_device destroys the device reference. */ block = device->block;dasd_delete_device (device);
drivers/scsi/libiscsi.c +3 -8
@@ -1568,14 +1568,9 @@ static int iscsi_data_xmit(struct iscsi_conn *conn) } rc =iscsi_prep_scsi_cmd_pdu (conn->task);if (rc) { -if (rc == -ENOMEM || rc == -EACCES ) { -spin_lock_bh (&conn->taskqueuelock); -list_add_tail (&conn->task->running, - &conn->cmdqueue); - conn->task =NULL ; -spin_unlock_bh (&conn->taskqueuelock); - goto done; - }else +if (rc == -ENOMEM || rc == -EACCES ) +fail_scsi_task (conn->task,DID_IMM_RETRY ); +else fail_scsi_task (conn->task,DID_ABORT );spin_lock_bh (&conn->taskqueuelock);continue ;
drivers/staging/comedi/drivers/addi_apci_1032.c +3 -1
@@ -269,6 +269,7 @@ static irqreturn_t apci1032_interrupt(int irq, void *d)struct apci1032_private *devpriv = dev->private;struct comedi_subdevice *s = dev->read_subdev;unsigned int ctrl; +unsigned short val;/* check interrupt is from this device */ if ((inl(devpriv->amcc_iobase + AMCC_OP_REG_INTCSR) &
@@ -284,7 +285,8 @@ static irqreturn_t apci1032_interrupt(int irq, void *d)outl (ctrl & ~APCI1032_CTRL_INT_ENA , dev->iobase +APCI1032_CTRL_REG ); s->state =inl (dev->iobase +APCI1032_STATUS_REG ) &0xffff ; -comedi_buf_write_samples (s, &s->state,1 ); + val = s->state; +comedi_buf_write_samples (s, &val,1 );comedi_handle_events (dev, s);/* enable the interrupt */
drivers/staging/comedi/drivers/addi_apci_1500.c +9 -9
@@ -217,7 +217,7 @@ static irqreturn_t apci1500_interrupt(int irq, void *d)struct comedi_device *dev = d;struct apci1500_private *devpriv = dev->private;struct comedi_subdevice *s = dev->read_subdev; -unsigned int status =0 ; +unsigned short status =0 ;unsigned int val; val =inl (devpriv->amcc +AMCC_OP_REG_INTCSR );
@@ -247,14 +247,14 @@ static irqreturn_t apci1500_interrupt(int irq, void *d)* * Mask Meaning * ---------- ------------------------------------------ -* 0x00000001 Event 1 has occurred -* 0x00000010 Event 2 has occurred -* 0x00000100 Counter/timer 1 has run down (not implemented) -* 0x00001000 Counter/timer 2 has run down (not implemented) -* 0x00010000 Counter 3 has run down (not implemented) -* 0x00100000 Watchdog has run down (not implemented) -* 0x01000000 Voltage error -* 0x10000000 Short-circuit error +* 0b00000001 Event 1 has occurred +* 0b00000010 Event 2 has occurred +* 0b00000100 Counter/timer 1 has run down (not implemented) +* 0b00001000 Counter/timer 2 has run down (not implemented) +* 0b00010000 Counter 3 has run down (not implemented) +* 0b00100000 Watchdog has run down (not implemented) +* 0b01000000 Voltage error +* 0b10000000 Short-circuit error */ comedi_buf_write_samples (s, &status,1 );comedi_handle_events (dev, s);
drivers/staging/comedi/drivers/adv_pci1710.c +5 -5
@@ -299,11 +299,11 @@ static int pci1710_ai_eoc(struct comedi_device *dev,static int pci1710_ai_read_sample (struct comedi_device *dev,struct comedi_subdevice *s,unsigned int cur_chan, -unsigned int *val) +unsigned short *val) {const struct boardtype *board = dev->board_ptr;struct pci1710_private *devpriv = dev->private; -unsigned int sample; +unsigned short sample;unsigned int chan; sample =inw (dev->iobase +PCI171X_AD_DATA_REG );
@@ -344,7 +344,7 @@ static int pci1710_ai_insn_read(struct comedi_device *dev,pci1710_ai_setup_chanlist (dev, s, &insn->chanspec,1 ,1 );for (i =0 ; i < insn->n; i++) { -unsigned int val; +unsigned short val;/* start conversion */ outw (0 , dev->iobase +PCI171X_SOFTTRG_REG );
@@ -394,7 +394,7 @@ static void pci1710_handle_every_sample(struct comedi_device *dev, {struct comedi_cmd *cmd = &s->async->cmd;unsigned int status; -unsigned int val; +unsigned short val;int ret; status =inw (dev->iobase +PCI171X_STATUS_REG );
@@ -454,7 +454,7 @@ static void pci1710_handle_fifo(struct comedi_device *dev, }for (i =0 ; i < devpriv->max_samples; i++) { -unsigned int val; +unsigned short val;int ret; ret =pci1710_ai_read_sample (dev, s, s->async->cur_chan, &val);
drivers/staging/comedi/drivers/das6402.c +1 -1
@@ -195,7 +195,7 @@ static irqreturn_t das6402_interrupt(int irq, void *d)if (status &DAS6402_STATUS_FFULL ) { async->events |=COMEDI_CB_OVERFLOW ; }else if (status &DAS6402_STATUS_FFNE ) { -unsigned int val; +unsigned short val; val =das6402_ai_read_sample (dev, s);comedi_buf_write_samples (s, &val,1 );
drivers/staging/comedi/drivers/das800.c +1 -1
@@ -436,7 +436,7 @@ static irqreturn_t das800_interrupt(int irq, void *d)struct comedi_cmd *cmd;unsigned long irq_flags;unsigned int status; -unsigned int val; +unsigned short val;bool fifo_empty;bool fifo_overflow;int i;
drivers/staging/comedi/drivers/dmm32at.c +1 -1
@@ -413,7 +413,7 @@ static irqreturn_t dmm32at_isr(int irq, void *d) {struct comedi_device *dev = d;unsigned char intstat; -unsigned int val; +unsigned short val;int i;if (!dev->attached) {
drivers/staging/comedi/drivers/me4000.c +1 -1
@@ -933,7 +933,7 @@ static irqreturn_t me4000_ai_isr(int irq, void *dev_id)struct comedi_subdevice *s = dev->read_subdev;int i;int c =0 ; -unsigned int lval; +unsigned short lval;if (!dev->attached)return IRQ_NONE ;
drivers/staging/comedi/drivers/pcl711.c +1 -1
@@ -193,7 +193,7 @@ static irqreturn_t pcl711_interrupt(int irq, void *d)struct comedi_device *dev = d;struct comedi_subdevice *s = dev->read_subdev;struct comedi_cmd *cmd = &s->async->cmd; -unsigned int data; +unsigned short data;if (!dev->attached) {dev_err (dev->class_dev,"spurious interrupt\n" );
drivers/staging/comedi/drivers/pcl818.c +1 -1
@@ -422,7 +422,7 @@ static int pcl818_ai_eoc(struct comedi_device *dev,static bool pcl818_ai_write_sample (struct comedi_device *dev,struct comedi_subdevice *s, -unsigned int chan,unsigned int val) +unsigned int chan,unsigned short val) {struct pcl818_private *devpriv = dev->private;struct comedi_cmd *cmd = &s->async->cmd;
drivers/staging/ks7010/ks_wlan_net.c +4 -2
@@ -1404,6 +1404,7 @@ static int ks_wlan_set_scan(struct net_device *dev,struct ks_wlan_private *priv = (struct ks_wlan_private *)netdev_priv (dev);struct iw_scan_req *req =NULL ; +int len;DPRINTK (2 ,"\n" );if (priv->sleep_mode ==SLP_SLEEP ) {
@@ -1415,8 +1416,9 @@ static int ks_wlan_set_scan(struct net_device *dev,if (wrqu->data.length ==sizeof (struct iw_scan_req ) && wrqu->data.flags &IW_SCAN_THIS_ESSID ) { req = (struct iw_scan_req *)extra; - priv->scan_ssid_len = req->essid_len; -memcpy (priv->scan_ssid, req->essid, priv->scan_ssid_len); + len =min_t (int, req->essid_len,IW_ESSID_MAX_SIZE ); + priv->scan_ssid_len = len; +memcpy (priv->scan_ssid, req->essid, len); }else { priv->scan_ssid_len =0 ; }
drivers/staging/rtl8188eu/core/rtw_ap.c +5 -0
@@ -917,6 +917,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* SSID */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));if (p && ie_len >0 ) { + ie_len =min_t (int, ie_len,sizeof (pbss_network->Ssid.Ssid));memset (&pbss_network->Ssid,0 ,sizeof (struct ndis_802_11_ssid ));memcpy (pbss_network->Ssid.Ssid, (p +2 ), ie_len); pbss_network->Ssid.SsidLength = ie_len;
@@ -935,6 +936,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* get supported rates */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));if (p) { + ie_len =min_t (int, ie_len,NDIS_802_11_LENGTH_RATES_EX );memcpy (supportRate, p +2 , ie_len); supportRateNum = ie_len; }
@@ -942,6 +944,8 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* get ext_supported rates */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);if (p) { + ie_len =min_t (int, ie_len, +NDIS_802_11_LENGTH_RATES_EX - supportRateNum);memcpy (supportRate + supportRateNum, p +2 , ie_len); supportRateNum += ie_len; }
@@ -1057,6 +1061,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) pht_cap->mcs.rx_mask[0 ] =0xff ; pht_cap->mcs.rx_mask[1 ] =0x0 ; } + ie_len =min_t (int, ie_len,sizeof (pmlmepriv->htpriv.ht_cap));memcpy (&pmlmepriv->htpriv.ht_cap, p+2 , ie_len); }
drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +4 -2
@@ -1172,9 +1172,11 @@ static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a,break ; } sec_len = *(pos++); len -=1 ; -if (sec_len >0 && sec_len <= len) { +if (sec_len >0 && + sec_len <= len && + sec_len <=32 ) { ssid[ssid_index].SsidLength = sec_len; -memcpy (ssid[ssid_index].Ssid, pos, ssid[ssid_index].SsidLength); +memcpy (ssid[ssid_index].Ssid, pos, sec_len); ssid_index++; } pos += sec_len;
drivers/staging/rtl8192e/rtl8192e/rtl_wx.c +4 -3
@@ -419,9 +419,10 @@ static int _rtl92e_wx_set_scan(struct net_device *dev,struct iw_scan_req *req = (struct iw_scan_req *)b;if (req->essid_len) { - ieee->current_network.ssid_len = req->essid_len; -memcpy (ieee->current_network.ssid, req->essid, - req->essid_len); +int len =min_t (int, req->essid_len,IW_ESSID_MAX_SIZE ); + + ieee->current_network.ssid_len = len; +memcpy (ieee->current_network.ssid, req->essid, len); } }
drivers/staging/rtl8192u/r8192U_wx.c +4 -2
@@ -333,8 +333,10 @@ static int r8192_wx_set_scan(struct net_device *dev, struct iw_request_info *a,struct iw_scan_req *req = (struct iw_scan_req *)b;if (req->essid_len) { - ieee->current_network.ssid_len = req->essid_len; -memcpy (ieee->current_network.ssid, req->essid, req->essid_len); +int len =min_t (int, req->essid_len,IW_ESSID_MAX_SIZE ); + + ieee->current_network.ssid_len = len; +memcpy (ieee->current_network.ssid, req->essid, len); } }
drivers/staging/rtl8712/rtl871x_cmd.c +4 -2
@@ -239,8 +239,10 @@ u8 r8712_sitesurvey_cmd(struct _adapter *padapter, psurveyPara->ss_ssidlen =0 ;memset (psurveyPara->ss_ssid,0 ,IW_ESSID_MAX_SIZE +1 );if ((pssid !=NULL ) && (pssid->SsidLength)) { -memcpy (psurveyPara->ss_ssid, pssid->Ssid, pssid->SsidLength); - psurveyPara->ss_ssidlen =cpu_to_le32 (pssid->SsidLength); +int len =min_t (int, pssid->SsidLength,IW_ESSID_MAX_SIZE ); + +memcpy (psurveyPara->ss_ssid, pssid->Ssid, len); + psurveyPara->ss_ssidlen =cpu_to_le32 (len); }set_fwstate (pmlmepriv, _FW_UNDER_SURVEY);r8712_enqueue_cmd (pcmdpriv, ph2c);
drivers/staging/rtl8712/rtl871x_ioctl_linux.c +1 -1
@@ -932,7 +932,7 @@ static int r871x_wx_set_priv(struct net_device *dev,struct iw_point *dwrq = (struct iw_point *)awrq; len = dwrq->length; - ext =memdup_user (dwrq->pointer, len); + ext =strndup_user (dwrq->pointer, len);if (IS_ERR (ext))return PTR_ERR (ext);
drivers/usb/class/cdc-acm.c +5 -0
@@ -1883,6 +1883,11 @@ static const struct usb_device_id acm_ids[] = { .driver_info = SEND_ZERO_PACKET, }, +/* Exclude Goodix Fingerprint Reader */ + { USB_DEVICE(0x27c6, 0x5395), + .driver_info =IGNORE_DEVICE , + }, + /* control interfaces without any protocol set */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, USB_CDC_PROTO_NONE) },
drivers/usb/gadget/function/f_uac2.c +1 -1
@@ -997,7 +997,7 @@ static int set_ep_max_packet_size(const struct f_uac2_opts *uac2_opts, } max_size_bw =num_channels (chmask) * ssize * -DIV_ROUND_UP (srate, factor / (1 << (ep_desc->bInterval -1 ))); + ((srate / (factor / (1 << (ep_desc->bInterval -1 )))) +1 ); ep_desc->wMaxPacketSize =cpu_to_le16 (min_t (u16, max_size_bw, max_size_ep));
drivers/usb/host/xhci.c +13 -3
@@ -1022,6 +1022,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)struct usb_hcd *secondary_hcd;int retval =0 ;bool comp_timer_running = false; +bool pending_portevent = false;if (!hcd->state)return 0 ;
@@ -1155,13 +1156,22 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) done:if (retval ==0 ) { -/* Resume root hubs only when have pending events. */ -if (xhci_pending_portevent (xhci)) { +/* +* Resume roothubs only if there are pending events. +* USB 3 devices resend U3 LFPS wake after a 100ms delay if +* the first wake signalling failed, give it that chance. +*/ + pending_portevent =xhci_pending_portevent (xhci); +if (!pending_portevent) { +msleep (120 ); + pending_portevent =xhci_pending_portevent (xhci); + } + +if (pending_portevent) {usb_hcd_resume_root_hub (xhci->shared_hcd);usb_hcd_resume_root_hub (hcd); } } -/* * If system is subject to the Quirk, Compliance Mode Timer needs to * be re-initialized Always after a system resume. Ports are subject
drivers/usb/renesas_usbhs/pipe.c +2 -0
@@ -746,6 +746,8 @@ struct usbhs_pipe *usbhs_pipe_malloc(struct usbhs_priv *priv,void usbhs_pipe_free (struct usbhs_pipe *pipe) { +usbhsp_pipe_select (pipe); +usbhsp_pipe_cfg_set (pipe,0xFFFF ,0 );usbhsp_put_pipe (pipe); }
drivers/usb/serial/ch341.c +1 -0
@@ -75,6 +75,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x1a86, 0x7522) }, { USB_DEVICE(0x1a86, 0x7523) }, { USB_DEVICE(0x4348, 0x5523) }, + { USB_DEVICE(0x9986, 0x7523) }, { }, };MODULE_DEVICE_TABLE (usb, id_table);
drivers/usb/serial/cp210x.c +3 -0
@@ -143,6 +143,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */ { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ + { USB_DEVICE(0x10C4, 0x88D8) }, /* Acuity Brands nLight Air Adapter */ { USB_DEVICE(0x10C4, 0x88FB) }, /* CESINEL MEDCAL STII Network Analyzer */ { USB_DEVICE(0x10C4, 0x8938) }, /* CESINEL MEDCAL S II Network Analyzer */ { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
@@ -199,6 +200,8 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x1901, 0x0194) }, /* GE Healthcare Remote Alarm Box */ { USB_DEVICE(0x1901, 0x0195) }, /* GE B850/B650/B450 CP2104 DP UART interface */ { USB_DEVICE(0x1901, 0x0196) }, /* GE B850 CP2105 DP UART interface */ + { USB_DEVICE(0x1901, 0x0197) }, /* GE CS1000 Display serial interface */ + { USB_DEVICE(0x1901, 0x0198) }, /* GE CS1000 M.2 Key E serial interface */ { USB_DEVICE(0x199B, 0xBA30) }, /* LORD WSDA-200-USB */ { USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */ { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
drivers/usb/serial/io_edgeport.c +16 -10
@@ -2959,26 +2959,32 @@ static int edge_startup(struct usb_serial *serial) response = -ENODEV ; } -usb_free_urb (edge_serial->interrupt_read_urb); -kfree (edge_serial->interrupt_in_buffer); - -usb_free_urb (edge_serial->read_urb); -kfree (edge_serial->bulk_in_buffer); - -kfree (edge_serial); - -return response; + goto error; }/* start interrupt read for this edgeport this interrupt will * continue as long as the edgeport is connected */ response =usb_submit_urb (edge_serial->interrupt_read_urb,GFP_KERNEL ); -if (response) +if (response) {dev_err (ddev,"%s - Error %d submitting control urb\n" , __func__, response); + + goto error; + } }return response; + +error: +usb_free_urb (edge_serial->interrupt_read_urb); +kfree (edge_serial->interrupt_in_buffer); + +usb_free_urb (edge_serial->read_urb); +kfree (edge_serial->bulk_in_buffer); + +kfree (edge_serial); + +return response; }
drivers/usb/usbip/stub_dev.c +35 -7
70 lines not on this page · raw message
drivers/usb/usbip/vhci_sysfs.c +34 -5
@@ -278,6 +278,8 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,struct vhci_device *vdev;int err;unsigned long flags; +struct task_struct *tcp_rx =NULL ; +struct task_struct *tcp_tx =NULL ;/* * @rhport: port number of vhci_hcd
@@ -309,12 +311,35 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,/* Extract socket from fd. */ socket =sockfd_lookup (sockfd, &err); -if (!socket) +if (!socket) { +dev_err (dev,"failed to lookup sock" );return -EINVAL ; + } +if (socket->type !=SOCK_STREAM ) { +dev_err (dev,"Expecting SOCK_STREAM - found %d" , + socket->type); +sockfd_put (socket); +return -EINVAL ; + } + +/* create threads before locking */ + tcp_rx =kthread_create (vhci_rx_loop, &vdev->ud,"vhci_rx" ); +if (IS_ERR (tcp_rx)) { +sockfd_put (socket); +return -EINVAL ; + } + tcp_tx =kthread_create (vhci_tx_loop, &vdev->ud,"vhci_tx" ); +if (IS_ERR (tcp_tx)) { +kthread_stop (tcp_rx); +sockfd_put (socket); +return -EINVAL ; + } -/* now need lock until setting vdev status as used */ +/* get task structs now */ +get_task_struct (tcp_rx); +get_task_struct (tcp_tx); -/* begin a lock */ +/* now begin lock until setting vdev status set */ spin_lock_irqsave (&vhci->lock, flags);spin_lock (&vdev->ud.lock);
@@ -324,6 +349,8 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,spin_unlock_irqrestore (&vhci->lock, flags);sockfd_put (socket); +kthread_stop_put (tcp_rx); +kthread_stop_put (tcp_tx);dev_err (dev,"port %d already used\n" , rhport);return -EINVAL ;
@@ -338,14 +365,16 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr, vdev->speed = speed; vdev->ud.sockfd = sockfd; vdev->ud.tcp_socket = socket; + vdev->ud.tcp_rx = tcp_rx; + vdev->ud.tcp_tx = tcp_tx; vdev->ud.status =VDEV_ST_NOTASSIGNED ;spin_unlock (&vdev->ud.lock);spin_unlock_irqrestore (&vhci->lock, flags);/* end the lock */ - vdev->ud.tcp_rx =kthread_get_run (vhci_rx_loop, &vdev->ud,"vhci_rx" ); - vdev->ud.tcp_tx =kthread_get_run (vhci_tx_loop, &vdev->ud,"vhci_tx" ); +wake_up_process (vdev->ud.tcp_rx); +wake_up_process (vdev->ud.tcp_tx);rh_port_connect (vdev, speed);
drivers/usb/usbip/vudc_sysfs.c +10 -0
@@ -24,6 +24,7 @@#include <linux/usb/ch9.h> #include <linux/sysfs.h> #include <linux/kthread.h> +#include <linux/file.h> #include <linux/byteorder/generic.h> #include "usbip_common.h"
@@ -150,6 +151,13 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr, goto unlock_ud; } +if (socket->type !=SOCK_STREAM ) { +dev_err (dev,"Expecting SOCK_STREAM - found %d" , + socket->type); + ret = -EINVAL ; + goto sock_err; + } + udc->ud.tcp_socket = socket;spin_unlock_irq (&udc->ud.lock);
@@ -189,6 +197,8 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,return count; +sock_err: +sockfd_put (socket); unlock_ud:spin_unlock_irq (&udc->ud.lock); unlock:
drivers/xen/events/events_2l.c +15 -7
@@ -46,6 +46,11 @@ static unsigned evtchn_2l_max_channels(void)return EVTCHN_2L_NR_CHANNELS ; } +static void evtchn_2l_remove (evtchn_port_t evtchn,unsigned int cpu) +{ +clear_bit (evtchn,BM (per_cpu (cpu_evtchn_mask, cpu))); +} +static void evtchn_2l_bind_to_cpu (struct irq_info *info,unsigned cpu) {clear_bit (info->evtchn,BM (per_cpu (cpu_evtchn_mask, info->cpu)));
@@ -70,12 +75,6 @@ static bool evtchn_2l_is_pending(unsigned port)return sync_test_bit (port,BM (&s->evtchn_pending[0 ])); } -static bool evtchn_2l_test_and_set_mask (unsigned port) -{ -struct shared_info *s = HYPERVISOR_shared_info; -return sync_test_and_set_bit (port,BM (&s->evtchn_mask[0 ])); -} -static void evtchn_2l_mask (unsigned port) {struct shared_info *s = HYPERVISOR_shared_info;
@@ -353,18 +352,27 @@ static void evtchn_2l_resume(void) EVTCHN_2L_NR_CHANNELS/BITS_PER_EVTCHN_WORD); } +static int evtchn_2l_percpu_deinit (unsigned int cpu) +{ +memset (per_cpu (cpu_evtchn_mask, cpu),0 ,sizeof (xen_ulong_t) * +EVTCHN_2L_NR_CHANNELS /BITS_PER_EVTCHN_WORD ); + +return 0 ; +} +static const struct evtchn_ops evtchn_ops_2l = { .max_channels = evtchn_2l_max_channels, .nr_channels = evtchn_2l_max_channels, + .remove = evtchn_2l_remove, .bind_to_cpu = evtchn_2l_bind_to_cpu, .clear_pending = evtchn_2l_clear_pending, .set_pending = evtchn_2l_set_pending, .is_pending = evtchn_2l_is_pending, - .test_and_set_mask = evtchn_2l_test_and_set_mask, .mask = evtchn_2l_mask, .unmask = evtchn_2l_unmask, .handle_events = evtchn_2l_handle_events, .resume = evtchn_2l_resume, + .percpu_deinit = evtchn_2l_percpu_deinit, };void __init xen_evtchn_2l_init (void )
drivers/xen/events/events_base.c +97 -33
275 lines not on this page · raw message
drivers/xen/events/events_fifo.c +0 -7
@@ -209,12 +209,6 @@ static bool evtchn_fifo_is_pending(unsigned port)return sync_test_bit (EVTCHN_FIFO_BIT (PENDING , word),BM (word)); } -static bool evtchn_fifo_test_and_set_mask (unsigned port) -{ -event_word_t *word =event_word_from_port (port); -return sync_test_and_set_bit (EVTCHN_FIFO_BIT (MASKED , word),BM (word)); -} -static void evtchn_fifo_mask (unsigned port) {event_word_t *word =event_word_from_port (port);
@@ -421,7 +415,6 @@ static const struct evtchn_ops evtchn_ops_fifo = { .clear_pending = evtchn_fifo_clear_pending, .set_pending = evtchn_fifo_set_pending, .is_pending = evtchn_fifo_is_pending, - .test_and_set_mask = evtchn_fifo_test_and_set_mask, .mask = evtchn_fifo_mask, .unmask = evtchn_fifo_unmask, .handle_events = evtchn_fifo_handle_events,
drivers/xen/events/events_internal.h +15 -7
@@ -35,13 +35,19 @@ struct irq_info {struct list_head eoi_list;short refcnt;short spurious_cnt; -enum xen_irq_type type;/* type */ +short type;/* type */ +u8 mask_reason;/* Why is event channel masked */ +#define EVT_MASK_REASON_EXPLICIT 0x01 +#define EVT_MASK_REASON_TEMPORARY 0x02 +#define EVT_MASK_REASON_EOI_PENDING 0x04 +u8 is_active;/* Is event just being handled? */ unsigned irq;unsigned int evtchn;/* event channel */ unsigned short cpu;/* cpu bound */ unsigned short eoi_cpu;/* EOI must happen on this cpu */ unsigned int irq_epoch;/* If eoi_cpu valid: irq_epoch of event */ u64 eoi_time;/* Time in jiffies when to EOI. */ +spinlock_t lock;union {unsigned short virq;
@@ -67,12 +73,12 @@ struct evtchn_ops {unsigned (*nr_channels)(void );int (*setup)(struct irq_info *info); +void (*remove)(evtchn_port_t port,unsigned int cpu);void (*bind_to_cpu)(struct irq_info *info,unsigned cpu);void (*clear_pending)(unsigned port);void (*set_pending)(unsigned port);bool (*is_pending)(unsigned port); -bool (*test_and_set_mask)(unsigned port);void (*mask)(unsigned port);void (*unmask)(unsigned port);
@@ -109,6 +115,13 @@ static inline int xen_evtchn_port_setup(struct irq_info *info)return 0 ; } +static inline void xen_evtchn_port_remove (evtchn_port_t evtchn, +unsigned int cpu) +{ +if (evtchn_ops->remove) + evtchn_ops->remove (evtchn, cpu); +} +static inline void xen_evtchn_port_bind_to_cpu (struct irq_info *info,unsigned cpu) {
@@ -130,11 +143,6 @@ static inline bool test_evtchn(unsigned port)return evtchn_ops->is_pending (port); } -static inline bool test_and_set_mask (unsigned port) -{ -return evtchn_ops->test_and_set_mask (port); -} -static inline void mask_evtchn (unsigned port) {return evtchn_ops->mask (port);
fs/binfmt_misc.c +14 -15
@@ -695,12 +695,24 @@ static ssize_t bm_register_write(struct file *file, const char __user *buffer,struct super_block *sb =file_inode (file)->i_sb;struct dentry *root = sb->s_root, *dentry;int err =0 ; +struct file *f =NULL ; e =create_entry (buffer, count);if (IS_ERR (e))return PTR_ERR (e); +if (e->flags &MISC_FMT_OPEN_FILE ) { + f =open_exec (e->interpreter); +if (IS_ERR (f)) { +pr_notice ("register: failed to install interpreter file %s\n" , + e->interpreter); +kfree (e); +return PTR_ERR (f); + } + e->interp_file = f; + } +inode_lock (d_inode (root)); dentry =lookup_one_len (e->name, root,strlen (e->name)); err =PTR_ERR (dentry);
@@ -724,21 +736,6 @@ static ssize_t bm_register_write(struct file *file, const char __user *buffer, goto out2; } -if (e->flags &MISC_FMT_OPEN_FILE ) { -struct file *f; - - f =open_exec (e->interpreter); -if (IS_ERR (f)) { - err =PTR_ERR (f); -pr_notice ("register: failed to install interpreter file %s\n" , e->interpreter); -simple_release_fs (&bm_mnt, &entry_count); -iput (inode); - inode =NULL ; - goto out2; - } - e->interp_file = f; - } - e->dentry =dget (dentry); inode->i_private = e; inode->i_fop = &bm_entry_operations;
@@ -755,6 +752,8 @@ static ssize_t bm_register_write(struct file *file, const char __user *buffer,inode_unlock (d_inode (root));if (err) { +if (f) +filp_close (f,NULL );kfree (e);return err; }
fs/cifs/cifsfs.c +1 -1
@@ -208,7 +208,7 @@ cifs_statfs(struct dentry *dentry, struct kstatfs *buf) rc = server->ops->queryfs (xid, tcon, buf);free_xid (xid); -return 0 ; +return rc; }static long cifs_fallocate (struct file *file,int mode,loff_t off,loff_t len)
fs/configfs/file.c +2 -4
@@ -392,7 +392,7 @@ static int __configfs_open_file(struct inode *inode, struct file *file, int type attr =to_attr (dentry);if (!attr) - goto out_put_item; + goto out_free_buffer;if (type &CONFIGFS_ITEM_BIN_ATTR ) { buffer->bin_attr =to_bin_attr (dentry);
@@ -405,7 +405,7 @@ static int __configfs_open_file(struct inode *inode, struct file *file, int type/* Grab the module reference for this attribute if we have one */ error = -ENODEV ;if (!try_module_get (buffer->owner)) - goto out_put_item; + goto out_free_buffer; error = -EACCES ;if (!buffer->item->ci_type)
@@ -449,8 +449,6 @@ static int __configfs_open_file(struct inode *inode, struct file *file, int type out_put_module:module_put (buffer->owner); -out_put_item: -config_item_put (buffer->item); out_free_buffer:up_read (&frag->frag_sem);kfree (buffer);
fs/nfs/nfs4proc.c +1 -1
@@ -5218,7 +5218,7 @@ static int _nfs4_get_security_label(struct inode *inode, void *buf,return ret;if (!(fattr.valid &NFS_ATTR_FATTR_V4_SECURITY_LABEL ))return -ENOENT ; -return 0 ; +return label.len; } static int nfs4_get_security_label(struct inode *inode, void *buf,
fs/udf/inode.c +6 -3
@@ -548,11 +548,14 @@ static int udf_do_extend_file(struct inode *inode,udf_write_aext (inode, last_pos, &last_ext->extLocation, last_ext->extLength,1 ); +/* -* We've rewritten the last extent but there may be empty -* indirect extent after it - enter it. +* We've rewritten the last extent. If we are going to add +* more extents, we may need to enter possible following +* empty indirect extent. */ -udf_next_aext (inode, last_pos, &tmploc, &tmplen,0 ); +if (new_block_bytes || prealloc_len) +udf_next_aext (inode, last_pos, &tmploc, &tmplen,0 ); }/* Managed to do everything necessary? */
include/linux/can/skb.h +6 -2
@@ -48,8 +48,12 @@ static inline void can_skb_reserve(struct sk_buff *skb)static inline void can_skb_set_owner (struct sk_buff *skb,struct sock *sk) { -if (sk) { -sock_hold (sk); +/* If the socket has already been closed by user space, the +* refcount may already be 0 (and the socket will be freed +* after the last TX skb has been freed). So only increase +* socket refcount if the refcount is > 0. +*/ +if (sk &&atomic_inc_not_zero (&sk->sk_refcnt)) { skb->destructor = sock_efree; skb->sk = sk; }
include/uapi/linux/netfilter/nfnetlink_cthelper.h +1 -1
@@ -4,7 +4,7 @@#define NFCT_HELPER_STATUS_DISABLED 0#define NFCT_HELPER_STATUS_ENABLED 1 -enum nfnl_acct_msg_types { +enum nfnl_cthelper_msg_types {NFNL_MSG_CTHELPER_NEW ,NFNL_MSG_CTHELPER_GET ,NFNL_MSG_CTHELPER_DEL ,
mm/slub.c +1 -1
@@ -1833,7 +1833,7 @@ static void *get_partial_node(struct kmem_cache *s, struct kmem_cache_node *n, t =acquire_slab (s, n, page, object ==NULL , &objects);if (!t) -continue ;/* cmpxchg raced */ +break ; available += objects;if (!object) {
net/ipv4/udp_offload.c +1 -1
@@ -265,7 +265,7 @@ struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb,struct sock *sk;if (NAPI_GRO_CB (skb)->encap_mark || - (skb->ip_summed !=CHECKSUM_PARTIAL && + (uh->check && skb->ip_summed !=CHECKSUM_PARTIAL &&NAPI_GRO_CB (skb)->csum_cnt ==0 && !NAPI_GRO_CB (skb)->csum_valid)) goto out;
net/mpls/mpls_gso.c +3 -0
@@ -18,6 +18,7 @@#include <linux/netdev_features.h> #include <linux/netdevice.h> #include <linux/skbuff.h> +#include <net/mpls.h> static struct sk_buff *mpls_gso_segment (struct sk_buff *skb,netdev_features_t features)
@@ -31,6 +32,8 @@ static struct sk_buff *mpls_gso_segment(struct sk_buff *skb,skb_reset_network_header (skb); mpls_hlen =skb_inner_network_header (skb) -skb_network_header (skb); +if (unlikely (!mpls_hlen || mpls_hlen %MPLS_HLEN )) + goto out;if (unlikely (!pskb_may_pull (skb, mpls_hlen))) goto out;
net/netfilter/x_tables.c +4 -2
@@ -272,6 +272,7 @@ static int match_revfn(u8 af, const char *name, u8 revision, int *bestp)const struct xt_match *m;int have_rev =0 ; +mutex_lock (&xt[af].mutex);list_for_each_entry (m, &xt[af].match, list) {if (strcmp (m->name, name) ==0 ) {if (m->revision > *bestp)
@@ -280,6 +281,7 @@ static int match_revfn(u8 af, const char *name, u8 revision, int *bestp) have_rev =1 ; } } +mutex_unlock (&xt[af].mutex);if (af !=NFPROTO_UNSPEC && !have_rev)return match_revfn (NFPROTO_UNSPEC , name, revision, bestp);
@@ -292,6 +294,7 @@ static int target_revfn(u8 af, const char *name, u8 revision, int *bestp)const struct xt_target *t;int have_rev =0 ; +mutex_lock (&xt[af].mutex);list_for_each_entry (t, &xt[af].target, list) {if (strcmp (t->name, name) ==0 ) {if (t->revision > *bestp)
@@ -300,6 +303,7 @@ static int target_revfn(u8 af, const char *name, u8 revision, int *bestp) have_rev =1 ; } } +mutex_unlock (&xt[af].mutex);if (af !=NFPROTO_UNSPEC && !have_rev)return target_revfn (NFPROTO_UNSPEC , name, revision, bestp);
@@ -313,12 +317,10 @@ int xt_find_revision(u8 af, const char *name, u8 revision, int target, {int have_rev, best =-1 ; -mutex_lock (&xt[af].mutex);if (target ==1 ) have_rev =target_revfn (af, name, revision, &best);else have_rev =match_revfn (af, name, revision, &best); -mutex_unlock (&xt[af].mutex);/* Nothing at all? Return 0 to try loading module. */ if (best ==-1 ) {
net/sched/sch_api.c +4 -4
@@ -1789,7 +1789,7 @@ static int tc_dump_tclass_qdisc(struct Qdisc *q, struct sk_buff *skb,static int tc_dump_tclass_root (struct Qdisc *root,struct sk_buff *skb,struct tcmsg *tcm,struct netlink_callback *cb, -int *t_p,int s_t) +int *t_p,int s_t,bool recur) {struct Qdisc *q;int b;
@@ -1800,7 +1800,7 @@ static int tc_dump_tclass_root(struct Qdisc *root, struct sk_buff *skb,if (tc_dump_tclass_qdisc (root, skb, tcm, cb, t_p, s_t) <0 )return -1 ; -if (!qdisc_dev (root)) +if (!qdisc_dev (root) || !recur)return 0 ;hash_for_each (qdisc_dev (root)->qdisc_hash, b, q, hash) {
@@ -1828,13 +1828,13 @@ static int tc_dump_tclass(struct sk_buff *skb, struct netlink_callback *cb) s_t = cb->args[0 ]; t =0 ; -if (tc_dump_tclass_root (dev->qdisc, skb, tcm, cb, &t, s_t) <0 ) +if (tc_dump_tclass_root (dev->qdisc, skb, tcm, cb, &t, s_t, true) <0 ) goto done; dev_queue =dev_ingress_queue (dev);if (dev_queue &&tc_dump_tclass_root (dev_queue->qdisc_sleeping, skb, tcm, cb, - &t, s_t) <0 ) + &t, s_t, false) <0 ) goto done; done:
scripts/recordmcount.c +1 -1
@@ -362,7 +362,7 @@ static uint32_t (*w2)(uint16_t);static int is_mcounted_section_name (char const *const txtname) { -return strcmp (".text" , txtname) ==0 || +return strncmp (".text" , txtname,5 ) ==0 ||strcmp (".ref.text" , txtname) ==0 ||strcmp (".sched.text" , txtname) ==0 || strcmp(".spinlock.text", txtname) == 0 ||
scripts/recordmcount.pl +13 -0
@@ -140,6 +140,11 @@ my %text_sections = ( ".text.unlikely" => 1, ); +# Acceptable section-prefixes to record. +my %text_section_prefixes = ( + ".text." => 1, +); + # Note: we are nice to C-programmers here, thus we skip the '||='-idiom. $objdump = 'objdump' if (!$objdump); $objcopy = 'objcopy' if (!$objcopy);
@@ -505,6 +510,14 @@ while (<IN>) { # Only record text sections that we know are safe $read_function = defined($text_sections{$1}); + if (!$read_function) { + foreach my $prefix (keys %text_section_prefixes) { + if (substr($1, 0, length $prefix) eq $prefix) { + $read_function = 1; + last; + } + } + } # print out any recorded offsets update_funcs();
sound/pci/hda/hda_bind.c +4 -0
@@ -46,6 +46,10 @@ static void hda_codec_unsol_event(struct hdac_device *dev, unsigned int ev)if (codec->bus->shutdown)return ; +/* ignore unsol events during system suspend/resume */ +if (codec->core.dev.power.power_state.event !=PM_EVENT_ON ) +return ; +if (codec->patch_ops.unsol_event) codec->patch_ops.unsol_event (codec, ev); }
sound/pci/hda/patch_hdmi.c +13 -0
@@ -2156,6 +2156,18 @@ static void generic_hdmi_free(struct hda_codec *codec) }#ifdef CONFIG_PM +static int generic_hdmi_suspend (struct hda_codec *codec) +{ +struct hdmi_spec *spec = codec->spec; +int pin_idx; + +for (pin_idx =0 ; pin_idx < spec->num_pins; pin_idx++) { +struct hdmi_spec_per_pin *per_pin =get_pin (spec, pin_idx); +cancel_delayed_work_sync (&per_pin->work); + } +return 0 ; +} +static int generic_hdmi_resume (struct hda_codec *codec) {struct hdmi_spec *spec = codec->spec;
@@ -2179,6 +2191,7 @@ static const struct hda_codec_ops generic_hdmi_patch_ops = { .build_controls = generic_hdmi_build_controls, .unsol_event = hdmi_unsol_event, #ifdef CONFIG_PM + .suspend = generic_hdmi_suspend, .resume = generic_hdmi_resume,#endif };
sound/usb/quirks.c +1 -0
@@ -1153,6 +1153,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)case USB_ID (0x1de7 ,0x0114 ):/* Phoenix Audio MT202pcs */ case USB_ID (0x21B4 ,0x0081 ):/* AudioQuest DragonFly */ case USB_ID (0x2912 ,0x30c8 ):/* Audioengine D1 */ +case USB_ID (0x413c ,0xa506 ):/* Dell AE515 sound bar */ return true; }return false;