Linux 4.14.215
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.14.215 kernel.
All users of the 4.14 kernel series must upgrade.
The updated 4.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.14.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 | 4 arch/x86/kernel/cpu/mtrr/generic.c | 6 - arch/x86/kvm/mmu.h | 2 arch/x86/mm/pgtable.c | 2 crypto/ecdh.c | 3 drivers/atm/idt77252.c | 2 drivers/base/core.c | 2 drivers/ide/ide-atapi.c | 1 drivers/ide/ide-io.c | 5 drivers/net/ethernet/broadcom/bcmsysport.c | 1 drivers/net/ethernet/ethoc.c | 3 drivers/net/ethernet/freescale/ucc_geth.c | 3 drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 4 drivers/net/ethernet/marvell/mvpp2.c | 2 drivers/net/ethernet/qlogic/qede/qede_fp.c | 5 drivers/net/ethernet/ti/cpts.c | 2 drivers/net/usb/cdc_ncm.c | 3 drivers/net/usb/qmi_wwan.c | 1 drivers/net/virtio_net.c | 12 +- drivers/net/wan/hdlc_ppp.c | 7 + drivers/scsi/ufs/ufshcd-pci.c | 34 ++++++ drivers/target/target_core_xcopy.c | 119 +++++++++++++---------- drivers/target/target_core_xcopy.h | 1 drivers/usb/chipidea/ci_hdrc_imx.c | 6 - drivers/usb/class/cdc-acm.c | 4 drivers/usb/class/usblp.c | 21 +++- drivers/usb/dwc3/core.h | 1 drivers/usb/dwc3/ulpi.c | 2 drivers/usb/gadget/Kconfig | 2 drivers/usb/gadget/composite.c | 10 + drivers/usb/gadget/configfs.c | 19 ++- drivers/usb/gadget/function/f_printer.c | 1 drivers/usb/gadget/function/f_uac2.c | 69 ++++++++++--- drivers/usb/gadget/legacy/acm_ms.c | 4 drivers/usb/host/xhci.c | 24 ++-- drivers/usb/misc/yurex.c | 3 drivers/usb/serial/iuu_phoenix.c | 20 ++- drivers/usb/serial/keyspan_pda.c | 2 drivers/usb/serial/option.c | 3 drivers/usb/storage/unusual_uas.h | 7 + drivers/usb/usbip/vhci_hcd.c | 2 drivers/vhost/net.c | 6 - drivers/video/fbdev/hyperv_fb.c | 6 - include/net/red.h | 4 kernel/workqueue.c | 13 +- lib/genalloc.c | 25 ++-- net/core/net-sysfs.c | 29 ++++- net/ipv4/fib_frontend.c | 2 net/ncsi/ncsi-rsp.c | 2 net/netfilter/ipset/ip_set_hash_gen.h | 20 --- net/netfilter/xt_RATEEST.c | 3 net/sched/sch_choke.c | 2 net/sched/sch_gred.c | 2 net/sched/sch_red.c | 2 net/sched/sch_sfq.c | 2 scripts/depmod.sh | 2 sound/pci/hda/patch_conexant.c | 1 sound/pci/hda/patch_realtek.c | 6 + sound/usb/midi.c | 4 59 files changed, 383 insertions(+), 172 deletions(-)
Adrian Hunter (1):
scsi: ufs-pci: Ensure UFS device is in PowerDown mode for suspend-to-disk ->poweroff()
Antoine Tenart (2):
net-sysfs: take the rtnl lock when storing xps_cpus
net-sysfs: take the rtnl lock when accessing xps_cpus_map and num_tc
Ard Biesheuvel (1):
crypto: ecdh - avoid buffer overflow in ecdh_set_secret()
Arnd Bergmann (1):
usb: gadget: select CONFIG_CRC32
Bard Liao (1):
Revert "device property: Keep secondary firmware node secondary by type"
Bart Van Assche (1):
scsi: ide: Do not set the RQF_PREEMPT flag for sense requests
Bjørn Mork (2):
net: usb: qmi_wwan: add Quectel EM160R-GL
USB: serial: option: add Quectel EM160R-GL
Chandana Kishori Chiluveru (1):
usb: gadget: configfs: Preserve function ordering after bind failure
Dan Carpenter (1):
atm: idt77252: call pci_disable_device() on error path
Dan Williams (1):
x86/mm: Fix leak of pmd ptlock
Daniel Palmer (1):
USB: serial: option: add LongSung M5710 module support
David Disseldorp (1):
scsi: target: Fix XCOPY NAA identifier lookup
Dexuan Cui (1):
video: hyperv_fb: Fix the mmap() regression for v5.4.y and older
Dinghao Liu (1):
net: ethernet: Fix memleak in ethoc_probe
Dominique Martinet (1):
kbuild: don't hardcode depmod path
Eddie Hung (1):
usb: gadget: configfs: Fix use-after-free issue with udc_name
Florian Fainelli (1):
net: systemport: set dev->max_mtu to UMAC_MAX_MTU_SIZE
Florian Westphal (1):
netfilter: xt_RATEEST: reject non-null terminated string from userspace
Greg Kroah-Hartman (1):
Linux 4.14.215
Grygorii Strashko (1):
net: ethernet: ti: cpts: fix ethtool output when no ptp_clock registered
Guillaume Nault (1):
ipv4: Ignore ECN bits for fib lookups in fib_compute_spec_dst()
Huang Shijie (1):
lib/genalloc: fix the overflow when size is too big
Jeff Dike (1):
virtio_net: Fix recursive call to cpus_read_lock()
Jerome Brunet (1):
usb: gadget: f_uac2: reset wMaxPacketSize
Johan Hovold (4):
USB: serial: iuu_phoenix: fix DMA from stack
USB: yurex: fix control-URB timeout handling
USB: usblp: fix DMA to stack
USB: serial: keyspan_pda: remove unused variable
John Wang (1):
net/ncsi: Use real net-device for response handler
Kailang Yang (1):
ALSA: hda/realtek - Fix speaker volume control on Lenovo C940
Linus Torvalds (1):
depmod: handle the case of /sbin/depmod without /sbin in PATH
Manish Chopra (1):
qede: fix offload for IPIP tunnel packets
Michael Grzeschik (1):
USB: xhci: fix U1/U2 handling for hardware with XHCI_INTEL_HOST quirk set
Paolo Bonzini (1):
KVM: x86: fix shift out of bounds reported by UBSAN
Randy Dunlap (2):
net: sched: prevent invalid Scell_log shift count
usb: usbip: vhci_hcd: protect shift size
Rasmus Villemoes (2):
ethernet: ucc_geth: fix use-after-free in ucc_geth_remove()
ethernet: ucc_geth: set dev->max_mtu to 1518
Roland Dreier (1):
CDC-NCM: remove "connected" log message
Sean Young (1):
USB: cdc-acm: blacklist another IR Droid device
Serge Semin (1):
usb: dwc3: ulpi: Use VStsDone to detect PHY regs access completion
Sriharsha Allenki (1):
usb: gadget: Fix spinlock lockup on usb_function_deactivate
Stefan Chulski (1):
net: mvpp2: Fix GoP port 3 Networking Complex Control configurations
Takashi Iwai (1):
ALSA: usb-audio: Fix UBSAN warnings for MIDI jacks
Thinh Nguyen (1):
usb: uas: Add PNY USB Portable SSD to unusual_uas
Vasily Averin (1):
netfilter: ipset: fix shift-out-of-bounds in htable_bits()
Xie He (1):
net: hdlc_ppp: Fix issues when mod_timer is called while timer is running
Yang Yingliang (1):
USB: gadget: legacy: fix return error code in acm_ms_bind()
Ying-Tsun Huang (1):
x86/mtrr: Correct the range check before performing MTRR type lookups
Yu Kuai (1):
usb: chipidea: ci_hdrc_imx: add missing put_device() call in usbmisc_get_init_data()
Yunfeng Ye (1):
workqueue: Kick a worker based on the actual activation of delayed works
Yunjian Wang (2):
net: hns: fix return value check in __lb_other_process()
vhost_net: fix ubuf refcount incorrectly when sendmsg fails
Zqiang (1):
usb: gadget: function: printer: Fix a memory leak for interface descriptor
bo liu (1):
ALSA: hda/conexant: add a new hda codec CX11970
taehyun.cho (1):
usb: gadget: enable super speed plus
Greg Kroah-Hartman
maintainerMakefile +2 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 214 +SUBLEVEL = 215 EXTRAVERSION = NAME = Petit Gorille
@@ -382,7 +382,7 @@ OBJDUMP = $(CROSS_COMPILE)objdump AWK = awk GENKSYMS = scripts/genksyms/genksyms INSTALLKERNEL := installkernel -DEPMOD = /sbin/depmod +DEPMOD = depmod PERL = perl PYTHON = python CHECK = sparse
arch/x86/kernel/cpu/mtrr/generic.c +3 -3
@@ -166,9 +166,6 @@ static u8 mtrr_type_lookup_variable(u64 start, u64 end, u64 *partial_end, *repeat =0 ; *uniform =1 ; -/* Make end inclusive instead of exclusive */ - end--; - prev_match =MTRR_TYPE_INVALID ;for (i =0 ; i < num_var_ranges; ++i) {unsigned short start_state, end_state, inclusive;
@@ -260,6 +257,9 @@ u8 mtrr_type_lookup(u64 start, u64 end, u8 *uniform)int repeat;u64 partial_end; +/* Make end inclusive instead of exclusive */ + end--; +if (!mtrr_state_set)return MTRR_TYPE_INVALID ;
arch/x86/kvm/mmu.h +1 -1
@@ -53,7 +53,7 @@ static inline u64 rsvd_bits(int s, int e)if (e < s)return 0 ; -return ((1ULL << (e - s +1 )) -1 ) << s; +return ((2ULL << (e - s)) -1 ) << s; }void kvm_mmu_set_mmio_spte_mask (u64 mmio_mask,u64 mmio_value);
arch/x86/mm/pgtable.c +2 -0
@@ -765,6 +765,8 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr) }free_page ((unsigned long )pmd_sv); + +pgtable_pmd_page_dtor (virt_to_page (pmd));free_page ((unsigned long )pmd);return 1 ;
crypto/ecdh.c +2 -1
@@ -43,7 +43,8 @@ static int ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,struct ecdh params;unsigned int ndigits; -if (crypto_ecdh_decode_key (buf, len, ¶ms) <0 ) +if (crypto_ecdh_decode_key (buf, len, ¶ms) <0 || + params.key_size >sizeof (ctx->private_key))return -EINVAL ; ndigits =ecdh_supported_curve (params.curve_id);
drivers/atm/idt77252.c +1 -1
@@ -3608,7 +3608,7 @@ static int idt77252_init_one(struct pci_dev *pcidev,if ((err =dma_set_mask_and_coherent (&pcidev->dev,DMA_BIT_MASK (32 )))) {printk ("idt77252: can't enable DMA for PCI device at %s\n" ,pci_name (pcidev)); -return err; + goto err_out_disable_pdev; } card =kzalloc (sizeof (struct idt77252_dev ),GFP_KERNEL );
drivers/base/core.c +1 -1
@@ -3090,7 +3090,7 @@ void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)if (fwnode_is_primary (fn)) { dev->fwnode = fn->secondary;if (!(parent && fn == parent->fwnode)) - fn->secondary =ERR_PTR (-ENODEV ); + fn->secondary =NULL ; }else { dev->fwnode =NULL ; }
drivers/ide/ide-atapi.c +0 -1
@@ -213,7 +213,6 @@ void ide_prep_sense(ide_drive_t *drive, struct request *rq) sense_rq->rq_disk = rq->rq_disk; sense_rq->cmd_flags =REQ_OP_DRV_IN ;ide_req (sense_rq)->type =ATA_PRIV_SENSE ; - sense_rq->rq_flags |=RQF_PREEMPT ; req->cmd[0 ] =GPCMD_REQUEST_SENSE ; req->cmd[4 ] = cmd_len;
drivers/ide/ide-io.c +0 -5
@@ -531,11 +531,6 @@ void do_ide_request(struct request_queue *q)* above to return us whatever is in the queue. Since we call * ide_do_request() ourselves, we end up taking requests while * the queue is blocked... -* -* We let requests forced at head of queue with ide-preempt -* though. I hope that doesn't happen too much, hopefully not -* unless the subdriver triggers such a thing in its own PM -* state machine. */ if ((drive->dev_flags & IDE_DFLAG_BLOCKED) && ata_pm_request(rq) == 0 &&
drivers/net/ethernet/broadcom/bcmsysport.c +1 -0
@@ -2153,6 +2153,7 @@ static int bcm_sysport_probe(struct platform_device *pdev)/* HW supported features, none enabled by default */ dev->hw_features |=NETIF_F_RXCSUM |NETIF_F_HIGHDMA |NETIF_F_IP_CSUM |NETIF_F_IPV6_CSUM ; + dev->max_mtu =UMAC_MAX_MTU_SIZE ;/* Request the WOL interrupt and advertise suspend if available */ priv->wol_irq_disabled =1 ;
drivers/net/ethernet/ethoc.c +2 -1
@@ -1212,7 +1212,7 @@ static int ethoc_probe(struct platform_device *pdev) ret =mdiobus_register (priv->mdio);if (ret) {dev_err (&netdev->dev,"failed to register MDIO bus\n" ); - goto free2; + goto free3; } ret =ethoc_mdio_probe (netdev);
@@ -1244,6 +1244,7 @@ static int ethoc_probe(struct platform_device *pdev)netif_napi_del (&priv->napi); error:mdiobus_unregister (priv->mdio); +free3:mdiobus_free (priv->mdio); free2:if (priv->clk)
drivers/net/ethernet/freescale/ucc_geth.c +2 -1
@@ -3894,6 +3894,7 @@ static int ucc_geth_probe(struct platform_device* ofdev)INIT_WORK (&ugeth->timeout_work, ucc_geth_timeout_work);netif_napi_add (dev, &ugeth->napi, ucc_geth_poll,64 ); dev->mtu =1500 ; + dev->max_mtu =1518 ; ugeth->msg_enable =netif_msg_init (debug.msg_enable,UGETH_MSG_DEFAULT ); ugeth->phy_interface = phy_interface;
@@ -3939,12 +3940,12 @@ static int ucc_geth_remove(struct platform_device* ofdev)struct device_node *np = ofdev->dev.of_node;unregister_netdev (dev); -free_netdev (dev);ucc_geth_memclean (ugeth);if (of_phy_is_fixed_link (np))of_phy_deregister_fixed_link (np);of_node_put (ugeth->ug_info->tbi_node);of_node_put (ugeth->ug_info->phy_node); +free_netdev (dev);return 0 ; }
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c +4 -0
@@ -418,6 +418,10 @@ static void __lb_other_process(struct hns_nic_ring_data *ring_data,/* for mutl buffer*/ new_skb =skb_copy (skb,GFP_ATOMIC );dev_kfree_skb_any (skb); +if (!new_skb) { +netdev_err (ndev,"skb alloc failed\n" ); +return ; + } skb = new_skb; check_ok =0 ;
drivers/net/ethernet/marvell/mvpp2.c +1 -1
@@ -4349,7 +4349,7 @@ static void mvpp22_gop_init_rgmii(struct mvpp2_port *port)regmap_read (priv->sysctrl_base,GENCONF_CTRL0 , &val);if (port->gop_id ==2 ) - val |=GENCONF_CTRL0_PORT0_RGMII |GENCONF_CTRL0_PORT1_RGMII ; + val |=GENCONF_CTRL0_PORT0_RGMII ;else if (port->gop_id ==3 ) val |=GENCONF_CTRL0_PORT1_RGMII_MII ;regmap_write (priv->sysctrl_base,GENCONF_CTRL0 , val);
drivers/net/ethernet/qlogic/qede/qede_fp.c +5 -0
@@ -1708,6 +1708,11 @@ netdev_features_t qede_features_check(struct sk_buff *skb, ntohs(udp_hdr(skb)->dest) != gnv_port))return features & ~(NETIF_F_CSUM_MASK |NETIF_F_GSO_MASK ); + }else if (l4_proto ==IPPROTO_IPIP ) { +/* IPIP tunnels are unknown to the device or at least unsupported natively, +* offloads for them can't be done trivially, so disable them for such skb. +*/ +return features & ~(NETIF_F_CSUM_MASK |NETIF_F_GSO_MASK ); } }
drivers/net/ethernet/ti/cpts.c +2 -0
@@ -471,6 +471,7 @@ void cpts_unregister(struct cpts *cpts)ptp_clock_unregister (cpts->clock); cpts->clock =NULL ; + cpts->phc_index =-1 ;cpts_write32 (cpts,0 , int_enable);cpts_write32 (cpts,0 , control);
@@ -572,6 +573,7 @@ struct cpts *cpts_create(struct device *dev, void __iomem *regs, cpts->cc.read = cpts_systim_read; cpts->cc.mask =CLOCKSOURCE_MASK (32 ); cpts->info = cpts_info; + cpts->phc_index =-1 ;cpts_calc_mult_shift (cpts);/* save cc.mult original value as it can be modified
drivers/net/usb/cdc_ncm.c +0 -3
@@ -1630,9 +1630,6 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)* USB_CDC_NOTIFY_NETWORK_CONNECTION notification shall be * sent by device after USB_CDC_NOTIFY_SPEED_CHANGE. */ -netif_info (dev, link, dev->net, -"network connection: %sconnected\n" , - !!event->wValue ?"" :"dis" );usbnet_link_change (dev, !!event->wValue,0 );break ;
drivers/net/usb/qmi_wwan.c +1 -0
@@ -995,6 +995,7 @@ static const struct usb_device_id products[] = { {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0125)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0306)}, /* Quectel EP06/EG06/EM06 */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0512)}, /* Quectel EG12/EM12 */ + {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0620)}, /* Quectel EM160R-GL */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL *//* 3. Combined interface devices matching on interface number */
drivers/net/virtio_net.c +7 -5
@@ -1788,14 +1788,16 @@ static int virtnet_set_channels(struct net_device *dev,get_online_cpus (); err =_virtnet_set_queues (vi, queue_pairs); -if (!err) { -netif_set_real_num_tx_queues (dev, queue_pairs); -netif_set_real_num_rx_queues (dev, queue_pairs); - -virtnet_set_affinity (vi); +if (err) { +put_online_cpus (); + goto err; } +virtnet_set_affinity (vi);put_online_cpus (); +netif_set_real_num_tx_queues (dev, queue_pairs); +netif_set_real_num_rx_queues (dev, queue_pairs); + err:return err; }
drivers/net/wan/hdlc_ppp.c +7 -0
@@ -572,6 +572,13 @@ static void ppp_timer(unsigned long arg)unsigned long flags;spin_lock_irqsave (&ppp->lock, flags); +/* mod_timer could be called after we entered this function but +* before we got the lock. +*/ +if (timer_pending (&proto->timer)) { +spin_unlock_irqrestore (&ppp->lock, flags); +return ; + }switch (proto->state) {case STOPPING :case REQ_SENT :
drivers/scsi/ufs/ufshcd-pci.c +32 -2
@@ -97,6 +97,30 @@ static int ufshcd_pci_resume(struct device *dev) {return ufshcd_system_resume (dev_get_drvdata (dev)); } + +/** +* ufshcd_pci_poweroff - suspend-to-disk poweroff function +* @dev: pointer to PCI device handle +* +* Returns 0 if successful +* Returns non-zero otherwise +*/ +static int ufshcd_pci_poweroff (struct device *dev) +{ +struct ufs_hba *hba =dev_get_drvdata (dev); +int spm_lvl = hba->spm_lvl; +int ret; + +/* +* For poweroff we need to set the UFS device to PowerDown mode. +* Force spm_lvl to ensure that. +*/ + hba->spm_lvl =5 ; + ret =ufshcd_system_suspend (hba); + hba->spm_lvl = spm_lvl; +return ret; +} +#endif /* !CONFIG_PM_SLEEP */ #ifdef CONFIG_PM
@@ -191,8 +215,14 @@ ufshcd_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) }static const struct dev_pm_ops ufshcd_pci_pm_ops = { - SET_SYSTEM_SLEEP_PM_OPS(ufshcd_pci_suspend, - ufshcd_pci_resume) +#ifdef CONFIG_PM_SLEEP + .suspend = ufshcd_pci_suspend, + .resume = ufshcd_pci_resume, + .freeze = ufshcd_pci_suspend, + .thaw = ufshcd_pci_resume, + .poweroff = ufshcd_pci_poweroff, + .restore = ufshcd_pci_resume, +#endifSET_RUNTIME_PM_OPS (ufshcd_pci_runtime_suspend, ufshcd_pci_runtime_resume, ufshcd_pci_runtime_idle)
drivers/target/target_core_xcopy.c +70 -49
160 lines not on this page · raw message
drivers/target/target_core_xcopy.h +1 -0
@@ -29,6 +29,7 @@ struct xcopy_op {struct se_device *dst_dev;unsigned char dst_tid_wwn[XCOPY_NAA_IEEE_REGEX_LEN ];unsigned char local_dev_wwn[XCOPY_NAA_IEEE_REGEX_LEN ]; +struct percpu_ref *remote_lun_ref;sector_t src_lba;sector_t dst_lba;
drivers/usb/chipidea/ci_hdrc_imx.c +5 -1
@@ -134,9 +134,13 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev) misc_pdev =of_find_device_by_node (args.np);of_node_put (args.np); -if (!misc_pdev || !platform_get_drvdata (misc_pdev)) +if (!misc_pdev)return ERR_PTR (-EPROBE_DEFER ); +if (!platform_get_drvdata (misc_pdev)) { +put_device (&misc_pdev->dev); +return ERR_PTR (-EPROBE_DEFER ); + } data->dev = &misc_pdev->dev;if (of_find_property (np,"disable-over-current" ,NULL ))
drivers/usb/class/cdc-acm.c +4 -0
@@ -1952,6 +1952,10 @@ static const struct usb_device_id acm_ids[] = { { USB_DEVICE(0x04d8, 0x0083), /* Bootloader mode */ .driver_info = IGNORE_DEVICE, }, + + { USB_DEVICE(0x04d8, 0xf58b), + .driver_info = IGNORE_DEVICE, + }, #endif /*Samsung phone in firmware update mode */
drivers/usb/class/usblp.c +19 -2
@@ -289,8 +289,25 @@ static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, i#define usblp_reset (usblp)\ usblp_ctrl_msg(usblp, USBLP_REQ_RESET, USB_TYPE_CLASS, USB_DIR_OUT, USB_RECIP_OTHER, 0, NULL, 0) -#define usblp_hp_channel_change_request (usblp, channel, buffer) \ - usblp_ctrl_msg(usblp, USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST, USB_TYPE_VENDOR, USB_DIR_IN, USB_RECIP_INTERFACE, channel, buffer, 1) +static int usblp_hp_channel_change_request (struct usblp *usblp,int channel,u8 *new_channel) +{ +u8 *buf; +int ret; + + buf =kzalloc (1 ,GFP_KERNEL ); +if (!buf) +return -ENOMEM ; + + ret =usblp_ctrl_msg (usblp,USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST , +USB_TYPE_VENDOR ,USB_DIR_IN ,USB_RECIP_INTERFACE , + channel, buf,1 ); +if (ret ==0 ) + *new_channel = buf[0 ]; + +kfree (buf); + +return ret; +}/* * See the description for usblp_select_alts() below for the usage
drivers/usb/dwc3/core.h +1 -0
@@ -227,6 +227,7 @@/* Global USB2 PHY Vendor Control Register */ #define DWC3_GUSB2PHYACC_NEWREGREQ BIT(25) +#define DWC3_GUSB2PHYACC_DONE BIT(24)#define DWC3_GUSB2PHYACC_BUSY BIT(23)#define DWC3_GUSB2PHYACC_WRITE BIT(22)#define DWC3_GUSB2PHYACC_ADDR (n) (n << 16)
drivers/usb/dwc3/ulpi.c +1 -1
@@ -27,7 +27,7 @@ static int dwc3_ulpi_busyloop(struct dwc3 *dwc)while (count--) { reg =dwc3_readl (dwc->regs,DWC3_GUSB2PHYACC (0 )); -if (!(reg &DWC3_GUSB2PHYACC_BUSY )) +if (reg &DWC3_GUSB2PHYACC_DONE )return 0 ;cpu_relax (); }
drivers/usb/gadget/Kconfig +2 -0
@@ -264,6 +264,7 @@ config USB_CONFIGFS_NCM depends on NET select USB_U_ETHER select USB_F_NCM + select CRC32 help NCM is an advanced protocol for Ethernet encapsulation, allows grouping of several ethernet frames into one USB transfer and
@@ -313,6 +314,7 @@ config USB_CONFIGFS_EEM depends on NET select USB_U_ETHER select USB_F_EEM + select CRC32 help CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM and therefore can be supported by more hardware. Technically ECM and
drivers/usb/gadget/composite.c +8 -2
@@ -395,8 +395,11 @@ int usb_function_deactivate(struct usb_function *function)spin_lock_irqsave (&cdev->lock, flags); -if (cdev->deactivations ==0 ) +if (cdev->deactivations ==0 ) { +spin_unlock_irqrestore (&cdev->lock, flags); status =usb_gadget_deactivate (cdev->gadget); +spin_lock_irqsave (&cdev->lock, flags); + }if (status ==0 ) cdev->deactivations++;
@@ -427,8 +430,11 @@ int usb_function_activate(struct usb_function *function) status = -EINVAL ; else { cdev->deactivations--; -if (cdev->deactivations ==0 ) +if (cdev->deactivations ==0 ) { +spin_unlock_irqrestore (&cdev->lock, flags); status =usb_gadget_activate (cdev->gadget); +spin_lock_irqsave (&cdev->lock, flags); + } }spin_unlock_irqrestore (&cdev->lock, flags);
drivers/usb/gadget/configfs.c +13 -6
@@ -232,9 +232,16 @@ static ssize_t gadget_dev_desc_bcdUSB_store(struct config_item *item,static ssize_t gadget_dev_desc_UDC_show (struct config_item *item,char *page) { -char *udc_name =to_gadget_info (item)->composite.gadget_driver.udc_name; +struct gadget_info *gi =to_gadget_info (item); +char *udc_name; +int ret; + +mutex_lock (&gi->lock); + udc_name = gi->composite.gadget_driver.udc_name; + ret =sprintf (page,"%s\n" , udc_name ?:"" ); +mutex_unlock (&gi->lock); -return sprintf (page,"%s\n" , udc_name ?:"" ); +return ret; }static int unregister_gadget (struct gadget_info *gi)
@@ -1216,9 +1223,9 @@ static void purge_configs_funcs(struct gadget_info *gi) cfg = container_of(c, struct config_usb_cfg, c); -list_for_each_entry_safe (f, tmp, &c->functions, list) { +list_for_each_entry_safe_reverse (f, tmp, &c->functions, list) { -list_move_tail (&f->list, &cfg->func_list); +list_move (&f->list, &cfg->func_list);if (f->unbind) { dev_dbg(&gi->cdev.gadget->dev, "unbind function '%s'/%p\n",
@@ -1504,7 +1511,7 @@ static const struct usb_gadget_driver configfs_driver_template = { .suspend = configfs_composite_suspend, .resume = configfs_composite_resume, - .max_speed = USB_SPEED_SUPER, + .max_speed = USB_SPEED_SUPER_PLUS, .driver = { .owner = THIS_MODULE, .name = "configfs-gadget",
@@ -1544,7 +1551,7 @@ static struct config_group *gadgets_make( gi->composite.unbind = configfs_do_nothing; gi->composite.suspend =NULL ; gi->composite.resume =NULL ; - gi->composite.max_speed =USB_SPEED_SUPER ; + gi->composite.max_speed =USB_SPEED_SUPER_PLUS ;spin_lock_init (&gi->spinlock);mutex_init (&gi->lock);
drivers/usb/gadget/function/f_printer.c +1 -0
@@ -1130,6 +1130,7 @@ static int printer_func_bind(struct usb_configuration *c,printer_req_free (dev->in_ep, req); } +usb_free_all_descriptors (f);return ret; }
drivers/usb/gadget/function/f_uac2.c +55 -14
115 lines not on this page · raw message
drivers/usb/gadget/legacy/acm_ms.c +3 -1
@@ -207,8 +207,10 @@ static int acm_ms_bind(struct usb_composite_dev *cdev)struct usb_descriptor_header *usb_desc; usb_desc =usb_otg_descriptor_alloc (gadget); -if (!usb_desc) +if (!usb_desc) { + status = -ENOMEM ; goto fail_string_ids; + }usb_otg_descriptor_init (gadget, usb_desc); otg_desc[0 ] = usb_desc; otg_desc[1 ] =NULL ;
drivers/usb/host/xhci.c +12 -12
@@ -4390,19 +4390,19 @@ static u16 xhci_calculate_u1_timeout(struct xhci_hcd *xhci, {unsigned long long timeout_ns; +if (xhci->quirks &XHCI_INTEL_HOST ) + timeout_ns =xhci_calculate_intel_u1_timeout (udev, desc); +else + timeout_ns = udev->u1_params.sel; +/* Prevent U1 if service interval is shorter than U1 exit latency */ if (usb_endpoint_xfer_int (desc) ||usb_endpoint_xfer_isoc (desc)) { -if (xhci_service_interval_to_ns (desc) <= udev->u1_params.mel) { +if (xhci_service_interval_to_ns (desc) <= timeout_ns) {dev_dbg (&udev->dev,"Disable U1, ESIT shorter than exit latency\n" );return USB3_LPM_DISABLED ; } } -if (xhci->quirks &XHCI_INTEL_HOST ) - timeout_ns =xhci_calculate_intel_u1_timeout (udev, desc); -else - timeout_ns = udev->u1_params.sel; -/* The U1 timeout is encoded in 1us intervals. * Don't return a timeout of zero, because that's USB3_LPM_DISABLED. */
@@ -4454,19 +4454,19 @@ static u16 xhci_calculate_u2_timeout(struct xhci_hcd *xhci, {unsigned long long timeout_ns; +if (xhci->quirks &XHCI_INTEL_HOST ) + timeout_ns =xhci_calculate_intel_u2_timeout (udev, desc); +else + timeout_ns = udev->u2_params.sel; +/* Prevent U2 if service interval is shorter than U2 exit latency */ if (usb_endpoint_xfer_int (desc) ||usb_endpoint_xfer_isoc (desc)) { -if (xhci_service_interval_to_ns (desc) <= udev->u2_params.mel) { +if (xhci_service_interval_to_ns (desc) <= timeout_ns) {dev_dbg (&udev->dev,"Disable U2, ESIT shorter than exit latency\n" );return USB3_LPM_DISABLED ; } } -if (xhci->quirks &XHCI_INTEL_HOST ) - timeout_ns =xhci_calculate_intel_u2_timeout (udev, desc); -else - timeout_ns = udev->u2_params.sel; -/* The U2 timeout is encoded in 256us intervals */ timeout_ns =DIV_ROUND_UP_ULL (timeout_ns,256 *1000 );/* If the necessary timeout value is bigger than what we can set in the
drivers/usb/misc/yurex.c +3 -0
@@ -501,6 +501,9 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer, timeout =schedule_timeout (YUREX_WRITE_TIMEOUT );finish_wait (&dev->waitq, &wait); +/* make sure URB is idle after timeout or (spurious) CMD_ACK */ +usb_kill_urb (dev->cntl_urb); +mutex_unlock (&dev->io_mutex);if (retval <0 ) {
drivers/usb/serial/iuu_phoenix.c +15 -5
@@ -543,23 +543,29 @@ static int iuu_uart_flush(struct usb_serial_port *port)struct device *dev = &port->dev;int i;int status; -u8 rxcmd =IUU_UART_RX ; +u8 *rxcmd;struct iuu_private *priv =usb_get_serial_port_data (port);if (iuu_led (port,0xF000 ,0 ,0 ,0xFF ) <0 )return -EIO ; + rxcmd =kmalloc (1 ,GFP_KERNEL ); +if (!rxcmd) +return -ENOMEM ; + + rxcmd[0 ] =IUU_UART_RX ; +for (i =0 ; i <2 ; i++) { - status =bulk_immediate (port, &rxcmd,1 ); + status =bulk_immediate (port, rxcmd,1 );if (status !=IUU_OPERATION_OK ) {dev_dbg (dev,"%s - uart_flush_write error\n" , __func__); -return status; + goto out_free; } status =read_immediate (port, &priv->len,1 );if (status !=IUU_OPERATION_OK ) {dev_dbg (dev,"%s - uart_flush_read error\n" , __func__); -return status; + goto out_free; }if (priv->len >0 ) {
@@ -567,12 +573,16 @@ static int iuu_uart_flush(struct usb_serial_port *port) status =read_immediate (port, priv->buf, priv->len);if (status !=IUU_OPERATION_OK ) {dev_dbg (dev,"%s - uart_flush_read error\n" , __func__); -return status; + goto out_free; } } }dev_dbg (dev,"%s - uart_flush_read OK!\n" , __func__);iuu_led (port,0 ,0xF000 ,0 ,0xFF ); + +out_free: +kfree (rxcmd); +return status; }
drivers/usb/serial/keyspan_pda.c +0 -2
@@ -559,10 +559,8 @@ static int keyspan_pda_write(struct tty_struct *tty,static void keyspan_pda_write_bulk_callback (struct urb *urb) {struct usb_serial_port *port = urb->context; -struct keyspan_pda_private *priv;set_bit (0 , &port->write_urbs_free); - priv =usb_get_serial_port_data (port);/* queue up a wakeup at scheduler time */ usb_serial_port_softint (port);
drivers/usb/serial/option.c +3 -0
@@ -1120,6 +1120,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff), .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0620, 0xff, 0xff, 0x30) }, /* EM160R-GL */ + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, 0x0620, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
@@ -2059,6 +2061,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */ .driver_info = RSVD(6) }, { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ + { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */
drivers/usb/storage/unusual_uas.h +7 -0
@@ -166,6 +166,13 @@ UNUSUAL_DEV(0x152d, 0x0578, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_BROKEN_FUA), +/* Reported-by: Thinh Nguyen <[email protected]> */ +UNUSUAL_DEV (0x154b ,0xf00b ,0x0000 ,0x9999 , +"PNY" , +"Pro Elite SSD" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , +US_FL_NO_ATA_1X ), +/* Reported-by: Thinh Nguyen <[email protected]> */ UNUSUAL_DEV(0x154b, 0xf00d, 0x0000, 0x9999, "PNY",
drivers/usb/usbip/vhci_hcd.c +2 -0
@@ -410,6 +410,8 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,default :usbip_dbg_vhci_rh (" ClearPortFeature: default %x\n" , wValue); +if (wValue >=32 ) + goto error; vhci_hcd->port_status[rhport] &= ~(1 << wValue);break ; }
drivers/vhost/net.c +3 -3
@@ -466,6 +466,7 @@ static void handle_tx(struct vhost_net *net)size_t hdr_size;struct socket *sock;struct vhost_net_ubuf_ref *uninitialized_var (ubufs ); +struct ubuf_info *ubuf;bool zcopy, zcopy_used;int sent_pkts =0 ;
@@ -532,9 +533,7 @@ static void handle_tx(struct vhost_net *net)/* use msg_control to pass vhost zerocopy ubuf info to skb */ if (zcopy_used) { -struct ubuf_info *ubuf; ubuf = nvq->ubuf_info + nvq->upend_idx; - vq->heads[nvq->upend_idx].id =cpu_to_vhost32 (vq, head); vq->heads[nvq->upend_idx].len =VHOST_DMA_IN_PROGRESS ; ubuf->callback = vhost_zerocopy_callback;
@@ -563,7 +562,8 @@ static void handle_tx(struct vhost_net *net) err = sock->ops->sendmsg (sock, &msg, len);if (unlikely (err <0 )) {if (zcopy_used) { -vhost_net_ubuf_put (ubufs); +if (vq->heads[ubuf->desc].len ==VHOST_DMA_IN_PROGRESS ) +vhost_net_ubuf_put (ubufs); nvq->upend_idx = ((unsigned )nvq->upend_idx -1 ) %UIO_MAXIOV ; }
drivers/video/fbdev/hyperv_fb.c +2 -4
@@ -713,11 +713,9 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) }/* -* Map the VRAM cacheable for performance. This is also required for -* VM Connect to display properly for ARM64 Linux VM, as the host also -* maps the VRAM cacheable. +* Map the VRAM cacheable for performance. */ - fb_virt =ioremap_cache (par->mem->start, screen_fb_size); + fb_virt =ioremap_wc (par->mem->start, screen_fb_size);if (!fb_virt) goto err2;
include/net/red.h +3 -1
@@ -168,12 +168,14 @@ static inline void red_set_vars(struct red_vars *v) v->qcount =-1 ; } -static inline bool red_check_params (u32 qth_min,u32 qth_max,u8 Wlog) +static inline bool red_check_params (u32 qth_min,u32 qth_max,u8 Wlog,u8 Scell_log) {if (fls (qth_min) + Wlog >32 )return false;if (fls (qth_max) + Wlog >32 )return false; +if (Scell_log >=32 ) +return false;if (qth_max < qth_min)return false;return true;
kernel/workqueue.c +10 -3
@@ -3494,17 +3494,24 @@ static void pwq_adjust_max_active(struct pool_workqueue *pwq)* is updated and visible. */ if (!freezable || !workqueue_freezing) { +bool kick = false; + pwq->max_active = wq->saved_max_active;while (!list_empty (&pwq->delayed_works) && - pwq->nr_active < pwq->max_active) + pwq->nr_active < pwq->max_active) {pwq_activate_first_delayed (pwq); + kick = true; + }/* * Need to kick a worker after thawed or an unbound wq's -* max_active is bumped. It's a slow path. Do it always. +* max_active is bumped. In realtime scenarios, always kicking a +* worker will cause interference on the isolated cpu cores, so +* let's kick iff work items were activated. */ -wake_up_worker (pwq->pool); +if (kick) +wake_up_worker (pwq->pool); }else { pwq->max_active =0 ; }
lib/genalloc.c +13 -12
@@ -83,14 +83,14 @@ static int clear_bits_ll(unsigned long *addr, unsigned long mask_to_clear)* users set the same bit, one user will return remain bits, otherwise * return 0. */ -static int bitmap_set_ll (unsigned long *map,int start,int nr) +static int bitmap_set_ll (unsigned long *map,unsigned long start,unsigned long nr) {unsigned long *p = map +BIT_WORD (start); -const int size = start + nr; +const unsigned long size = start + nr;int bits_to_set =BITS_PER_LONG - (start %BITS_PER_LONG );unsigned long mask_to_set =BITMAP_FIRST_WORD_MASK (start); -while (nr - bits_to_set >=0 ) { +while (nr >= bits_to_set) {if (set_bits_ll (p, mask_to_set))return nr; nr -= bits_to_set;
@@ -118,14 +118,15 @@ static int bitmap_set_ll(unsigned long *map, int start, int nr)* users clear the same bit, one user will return remain bits, * otherwise return 0. */ -static int bitmap_clear_ll (unsigned long *map,int start,int nr) +static unsigned long +bitmap_clear_ll (unsigned long *map,unsigned long start,unsigned long nr) {unsigned long *p = map +BIT_WORD (start); -const int size = start + nr; +const unsigned long size = start + nr;int bits_to_clear =BITS_PER_LONG - (start %BITS_PER_LONG );unsigned long mask_to_clear =BITMAP_FIRST_WORD_MASK (start); -while (nr - bits_to_clear >=0 ) { +while (nr >= bits_to_clear) {if (clear_bits_ll (p, mask_to_clear))return nr; nr -= bits_to_clear;
@@ -184,8 +185,8 @@ int gen_pool_add_virt(struct gen_pool *pool, unsigned long virt, phys_addr_t phy size_t size, int nid) {struct gen_pool_chunk *chunk; -int nbits = size >> pool->min_alloc_order; -int nbytes =sizeof (struct gen_pool_chunk ) + +unsigned long nbits = size >> pool->min_alloc_order; +unsigned long nbytes =sizeof (struct gen_pool_chunk ) +BITS_TO_LONGS (nbits) *sizeof (long ); chunk =vzalloc_node (nbytes, nid);
@@ -242,7 +243,7 @@ void gen_pool_destroy(struct gen_pool *pool)struct list_head *_chunk, *_next_chunk;struct gen_pool_chunk *chunk;int order = pool->min_alloc_order; -int bit, end_bit; +unsigned long bit, end_bit;list_for_each_safe (_chunk, _next_chunk, &pool->chunks) { chunk = list_entry(_chunk, struct gen_pool_chunk, next_chunk);
@@ -293,7 +294,7 @@ unsigned long gen_pool_alloc_algo(struct gen_pool *pool, size_t size,struct gen_pool_chunk *chunk;unsigned long addr =0 ;int order = pool->min_alloc_order; -int nbits, start_bit, end_bit, remain; +unsigned long nbits, start_bit, end_bit, remain;#ifndef CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG BUG_ON (in_nmi ());
@@ -376,7 +377,7 @@ void gen_pool_free(struct gen_pool *pool, unsigned long addr, size_t size) {struct gen_pool_chunk *chunk;int order = pool->min_alloc_order; -int start_bit, nbits, remain; +unsigned long start_bit, nbits, remain;#ifndef CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG BUG_ON (in_nmi ());
@@ -638,7 +639,7 @@ unsigned long gen_pool_best_fit(unsigned long *map, unsigned long size, index =bitmap_find_next_zero_area (map, size, start, nr,0 );while (index < size) { -int next_bit =find_next_bit (map, size, index + nr); +unsigned long next_bit =find_next_bit (map, size, index + nr);if ((next_bit - index) < len) { len = next_bit - index; start_bit = index;
net/core/net-sysfs.c +24 -5
@@ -1207,23 +1207,30 @@ static const struct attribute_group dql_group = {static ssize_t xps_cpus_show (struct netdev_queue *queue,char *buf) { +int cpu, len, ret, num_tc =1 , tc =0 ;struct net_device *dev = queue->dev; -int cpu, len, num_tc =1 , tc =0 ;struct xps_dev_maps *dev_maps;cpumask_var_t mask;unsigned long index; index =get_netdev_queue_index (queue); +if (!rtnl_trylock ()) +return restart_syscall (); +if (dev->num_tc) { num_tc = dev->num_tc; tc =netdev_txq_to_tc (dev, index); -if (tc <0 ) -return -EINVAL ; +if (tc <0 ) { + ret = -EINVAL ; + goto err_rtnl_unlock; + } } -if (!zalloc_cpumask_var (&mask,GFP_KERNEL )) -return -ENOMEM ; +if (!zalloc_cpumask_var (&mask,GFP_KERNEL )) { + ret = -ENOMEM ; + goto err_rtnl_unlock; + }rcu_read_lock (); dev_maps =rcu_dereference (dev->xps_maps);
@@ -1246,9 +1253,15 @@ static ssize_t xps_cpus_show(struct netdev_queue *queue, }rcu_read_unlock (); +rtnl_unlock (); + len =snprintf (buf,PAGE_SIZE ,"%*pb\n" ,cpumask_pr_args (mask));free_cpumask_var (mask);return len <PAGE_SIZE ? len : -EINVAL ; + +err_rtnl_unlock: +rtnl_unlock (); +return ret; } static ssize_t xps_cpus_store(struct netdev_queue *queue,
@@ -1273,7 +1286,13 @@ static ssize_t xps_cpus_store(struct netdev_queue *queue,return err; } +if (!rtnl_trylock ()) { +free_cpumask_var (mask); +return restart_syscall (); + } + err =netif_set_xps_queue (dev, mask, index); +rtnl_unlock ();free_cpumask_var (mask);
net/ipv4/fib_frontend.c +1 -1
@@ -292,7 +292,7 @@ __be32 fib_compute_spec_dst(struct sk_buff *skb) .flowi4_iif = LOOPBACK_IFINDEX, .flowi4_oif = l3mdev_master_ifindex_rcu(dev), .daddr = ip_hdr(skb)->saddr, - .flowi4_tos = RT_TOS(ip_hdr(skb)->tos), + .flowi4_tos = ip_hdr(skb)->tos & IPTOS_RT_MASK, .flowi4_scope = scope, .flowi4_mark = vmark ? skb->mark : 0, };
net/ncsi/ncsi-rsp.c +1 -1
@@ -983,7 +983,7 @@ int ncsi_rcv_rsp(struct sk_buff *skb, struct net_device *dev,int payload, i, ret;/* Find the NCSI device */ - nd =ncsi_find_dev (dev); + nd =ncsi_find_dev (orig_dev); ndp = nd ?TO_NCSI_DEV_PRIV (nd) :NULL ;if (!ndp)return -ENODEV ;
net/netfilter/ipset/ip_set_hash_gen.h +5 -15
@@ -115,20 +115,6 @@ htable_size(u8 hbits)return hsize *sizeof (struct hbucket *) +sizeof (struct htable ); } -/* Compute htable_bits from the user input parameter hashsize */ -static u8 -htable_bits (u32 hashsize) -{ -/* Assume that hashsize == 2^htable_bits */ -u8 bits =fls (hashsize -1 ); - -if (jhash_size (bits) != hashsize) -/* Round up to the first 2^n value */ - bits =fls (hashsize); - -return bits; -} -#ifdef IP_SET_HASH_WITH_NETS #if IPSET_NET_COUNT >1 #define __CIDR (cidr, i) (cidr[i])
@@ -1294,7 +1280,11 @@ IPSET_TOKEN(HTYPE, _create)(struct net *net, struct ip_set *set,if (!h)return -ENOMEM ; - hbits =htable_bits (hashsize); +/* Compute htable_bits from the user input parameter hashsize. +* Assume that hashsize == 2^htable_bits, +* otherwise round up to the first 2^n value. +*/ + hbits =fls (hashsize -1 ); hsize =htable_size (hbits);if (hsize ==0 ) {kfree (h);
net/netfilter/xt_RATEEST.c +3 -0
@@ -106,6 +106,9 @@ static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par) } cfg;int ret; +if (strnlen (info->name,sizeof (est->name)) >=sizeof (est->name)) +return -ENAMETOOLONG ; +net_get_random_once (&jhash_rnd,sizeof (jhash_rnd));mutex_lock (&xt_rateest_mutex);
net/sched/sch_choke.c +1 -1
@@ -370,7 +370,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt) ctl =nla_data (tb[TCA_CHOKE_PARMS ]); -if (!red_check_params (ctl->qth_min, ctl->qth_max, ctl->Wlog)) +if (!red_check_params (ctl->qth_min, ctl->qth_max, ctl->Wlog, ctl->Scell_log))return -EINVAL ;if (ctl->limit >CHOKE_MAX_QUEUE )
net/sched/sch_gred.c +1 -1
@@ -356,7 +356,7 @@ static inline int gred_change_vq(struct Qdisc *sch, int dp,struct gred_sched *table =qdisc_priv (sch);struct gred_sched_data *q = table->tab[dp]; -if (!red_check_params (ctl->qth_min, ctl->qth_max, ctl->Wlog)) +if (!red_check_params (ctl->qth_min, ctl->qth_max, ctl->Wlog, ctl->Scell_log))return -EINVAL ;if (!q) {
net/sched/sch_red.c +1 -1
@@ -184,7 +184,7 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt) max_P = tb[TCA_RED_MAX_P ] ?nla_get_u32 (tb[TCA_RED_MAX_P ]) :0 ; ctl =nla_data (tb[TCA_RED_PARMS ]); -if (!red_check_params (ctl->qth_min, ctl->qth_max, ctl->Wlog)) +if (!red_check_params (ctl->qth_min, ctl->qth_max, ctl->Wlog, ctl->Scell_log))return -EINVAL ;if (ctl->limit >0 ) {
net/sched/sch_sfq.c +1 -1
@@ -649,7 +649,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt) }if (ctl_v1 && !red_check_params (ctl_v1->qth_min, ctl_v1->qth_max, - ctl_v1->Wlog)) + ctl_v1->Wlog, ctl_v1->Scell_log))return -EINVAL ;if (ctl_v1 && ctl_v1->qth_min) { p =kmalloc (sizeof (*p),GFP_KERNEL );
scripts/depmod.sh +2 -0
@@ -15,6 +15,8 @@ if ! test -r System.map ; then exit 0 fi +# legacy behavior: "depmod" in /sbin, no /sbin in PATH +PATH="$PATH:/sbin" if [ -z $(command -v $DEPMOD) ]; then echo "Warning: 'make modules_install' requires $DEPMOD. Please install it." >&2 echo "This is probably in the kmod package." >&2
sound/pci/hda/patch_conexant.c +1 -0
@@ -1118,6 +1118,7 @@ static int patch_conexant_auto(struct hda_codec *codec)static const struct hda_device_id snd_hda_id_conexant[] = {HDA_CODEC_ENTRY (0x14f11f86 ,"CX8070" , patch_conexant_auto),HDA_CODEC_ENTRY (0x14f12008 ,"CX8200" , patch_conexant_auto), +HDA_CODEC_ENTRY (0x14f120d0 ,"CX11970" , patch_conexant_auto),HDA_CODEC_ENTRY (0x14f15045 ,"CX20549 (Venice)" , patch_conexant_auto),HDA_CODEC_ENTRY (0x14f15047 ,"CX20551 (Waikiki)" , patch_conexant_auto),HDA_CODEC_ENTRY (0x14f15051 ,"CX20561 (Hermosa)" , patch_conexant_auto),
sound/pci/hda/patch_realtek.c +6 -0
@@ -5510,6 +5510,7 @@ enum {ALC221_FIXUP_HP_FRONT_MIC ,ALC292_FIXUP_TPT460 ,ALC298_FIXUP_SPK_VOLUME , +ALC298_FIXUP_LENOVO_SPK_VOLUME ,ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER ,ALC269_FIXUP_ATIV_BOOK_8 , ALC221_FIXUP_HP_MIC_NO_PRESENCE,
@@ -6261,6 +6262,10 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id = ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE, }, + [ALC298_FIXUP_LENOVO_SPK_VOLUME] = { + .type = HDA_FIXUP_FUNC, + .v.func = alc298_fixup_speaker_volume, + }, [ALC295_FIXUP_DISABLE_DAC3] = { .type = HDA_FIXUP_FUNC, .v.func = alc295_fixup_disable_dac3,
@@ -6662,6 +6667,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x17aa ,0x3151 ,"ThinkCentre Station" ,ALC283_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x17aa ,0x3176 ,"ThinkCentre Station" ,ALC283_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x17aa ,0x3178 ,"ThinkCentre Station" ,ALC283_FIXUP_HEADSET_MIC ), +SND_PCI_QUIRK (0x17aa ,0x3818 ,"Lenovo C940" ,ALC298_FIXUP_LENOVO_SPK_VOLUME ),SND_PCI_QUIRK (0x17aa ,0x3902 ,"Lenovo E50-80" ,ALC269_FIXUP_DMIC_THINKPAD_ACPI ),SND_PCI_QUIRK (0x17aa ,0x3977 ,"IdeaPad S210" ,ALC283_FIXUP_INT_MIC ), SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
sound/usb/midi.c +4 -0
@@ -1867,6 +1867,8 @@ static int snd_usbmidi_get_ms_info(struct snd_usb_midi *umidi, ms_ep =find_usb_ms_endpoint_descriptor (hostep);if (!ms_ep)continue ; +if (ms_ep->bNumEmbMIDIJack >0x10 ) +continue ;if (usb_endpoint_dir_out (ep)) {if (endpoints[epidx].out_ep) {if (++epidx >=MIDI_MAX_ENDPOINTS ) {
@@ -2119,6 +2121,8 @@ static int snd_usbmidi_detect_roland(struct snd_usb_midi *umidi, cs_desc[1] == USB_DT_CS_INTERFACE && cs_desc[2] == 0xf1 && cs_desc[3] == 0x02) { +if (cs_desc[4 ] >0x10 || cs_desc[5 ] >0x10 ) +continue ; endpoint->in_cables = (1 << cs_desc[4 ]) -1 ; endpoint->out_cables = (1 << cs_desc[5 ]) -1 ;return snd_usbmidi_detect_endpoints (umidi, endpoint,1 );