Linux 5.15.100
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.100 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/ABI/testing/configfs-usb-gadget-uvc | 2 Makefile | 2 arch/alpha/kernel/irq.c | 2 arch/arm/boot/dts/spear320-hmi.dts | 2 arch/ia64/kernel/iosapic.c | 2 arch/ia64/kernel/irq.c | 4 arch/ia64/kernel/msi_ia64.c | 4 arch/parisc/kernel/irq.c | 2 arch/um/drivers/vector_kern.c | 1 arch/um/drivers/virt-pci.c | 26 arch/um/drivers/virtio_uml.c | 18 arch/x86/include/asm/resctrl.h | 12 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 4 arch/x86/kernel/process_32.c | 2 arch/x86/kernel/process_64.c | 2 arch/x86/um/vdso/um_vdso.c | 12 drivers/auxdisplay/hd44780.c | 2 drivers/base/component.c | 2 drivers/base/dd.c | 2 drivers/block/loop.c | 8 drivers/firmware/efi/sysfb_efi.c | 8 drivers/gpu/drm/arm/malidp_planes.c | 2 drivers/gpu/drm/drm_dp_mst_topology.c | 5 drivers/gpu/drm/virtio/virtgpu_object.c | 3 drivers/iio/accel/mma9551_core.c | 10 drivers/infiniband/hw/hfi1/chip.c | 59 - drivers/iommu/amd/iommu.c | 12 drivers/irqchip/irq-bcm6345-l1.c | 4 drivers/media/usb/uvc/uvc_ctrl.c | 5 drivers/media/usb/uvc/uvc_driver.c | 90 - drivers/media/usb/uvc/uvc_entity.c | 2 drivers/media/usb/uvc/uvc_status.c | 37 drivers/media/usb/uvc/uvc_v4l2.c | 2 drivers/media/usb/uvc/uvc_video.c | 15 drivers/media/usb/uvc/uvcvideo.h | 4 drivers/mfd/arizona-core.c | 2 drivers/misc/mei/bus-fixup.c | 8 drivers/misc/vmw_balloon.c | 2 drivers/mtd/ubi/build.c | 7 drivers/mtd/ubi/fastmap-wl.c | 12 drivers/mtd/ubi/vmt.c | 18 drivers/mtd/ubi/wl.c | 25 drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c | 2 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 3 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c | 1 drivers/nfc/st-nci/se.c | 6 drivers/nfc/st21nfca/se.c | 6 drivers/parisc/iosapic.c | 2 drivers/pci/controller/pci-loongson.c | 71 - drivers/pci/pci.c | 10 drivers/pci/quirks.c | 22 drivers/pci/setup-bus.c | 179 +-- drivers/phy/rockchip/phy-rockchip-typec.c | 3 drivers/pwm/pwm-sifive.c | 16 drivers/pwm/pwm-stm32-lp.c | 2 drivers/rtc/interface.c | 2 drivers/rtc/rtc-sun6i.c | 16 drivers/scsi/ipr.c | 41 drivers/scsi/mpt3sas/mpt3sas_base.c | 20 drivers/sh/intc/chip.c | 2 drivers/soundwire/bus_type.c | 9 drivers/soundwire/cadence_master.c | 43 drivers/soundwire/cadence_master.h | 13 drivers/staging/emxx_udc/emxx_udc.c | 7 drivers/thermal/intel/Kconfig | 3 drivers/thermal/intel/intel_quark_dts_thermal.c | 12 drivers/tty/serial/fsl_lpuart.c | 24 drivers/tty/serial/pch_uart.c | 2 drivers/tty/serial/sc16is7xx.c | 51 drivers/tty/tty_io.c | 8 drivers/tty/vt/vc_screen.c | 4 drivers/usb/chipidea/debug.c | 2 drivers/usb/core/usb.c | 2 drivers/usb/dwc3/core.h | 2 drivers/usb/dwc3/debug.h | 3 drivers/usb/dwc3/debugfs.c | 19 drivers/usb/dwc3/gadget.c | 4 drivers/usb/gadget/function/uvc_configfs.c | 59 - drivers/usb/gadget/udc/bcm63xx_udc.c | 2 drivers/usb/gadget/udc/gr_udc.c | 2 drivers/usb/gadget/udc/lpc32xx_udc.c | 2 drivers/usb/gadget/udc/pxa25x_udc.c | 2 drivers/usb/gadget/udc/pxa27x_udc.c | 2 drivers/usb/host/fotg210-hcd.c | 2 drivers/usb/host/isp116x-hcd.c | 2 drivers/usb/host/isp1362-hcd.c | 2 drivers/usb/host/sl811-hcd.c | 2 drivers/usb/host/uhci-hcd.c | 6 drivers/usb/host/xhci-mvebu.c | 2 drivers/usb/storage/ene_ub6250.c | 2 drivers/watchdog/at91sam9_wdt.c | 7 drivers/watchdog/pcwd_usb.c | 6 drivers/watchdog/sbsa_gwdt.c | 1 drivers/watchdog/watchdog_dev.c | 2 drivers/xen/events/events_base.c | 7 fs/ext4/fast_commit.c | 44 fs/f2fs/file.c | 2 fs/f2fs/inline.c | 15 fs/f2fs/iostat.c | 6 fs/f2fs/super.c | 11 fs/f2fs/verity.c | 12 fs/jfs/jfs_dmap.c | 3 fs/ubifs/budget.c | 9 fs/ubifs/dir.c | 9 fs/ubifs/file.c | 12 fs/ubifs/super.c | 17 fs/ubifs/tnc.c | 24 fs/ubifs/ubifs.h | 5 include/linux/bootconfig.h | 2 include/linux/irq.h | 18 include/linux/pci.h | 1 include/linux/pci_ids.h | 2 include/net/sctp/structs.h | 1 include/net/tc_act/tc_pedit.h | 81 + include/uapi/linux/usb/video.h | 30 include/uapi/linux/uvcvideo.h | 2 kernel/fail_function.c | 5 kernel/printk/index.c | 2 kernel/trace/ring_buffer.c | 7 net/9p/trans_rdma.c | 15 net/9p/trans_xen.c | 48 net/bluetooth/hci_sock.c | 11 net/bridge/netfilter/ebtables.c | 2 net/core/dev.c | 4 net/ipv4/netfilter/arp_tables.c | 4 net/ipv4/netfilter/ip_tables.c | 7 net/ipv4/tcp_minisocks.c | 7 net/ipv6/netfilter/ip6_tables.c | 7 net/ipv6/route.c | 11 net/netfilter/nf_conntrack_netlink.c | 5 net/netfilter/nf_tables_api.c | 2 net/nfc/netlink.c | 4 net/sched/Kconfig | 11 net/sched/Makefile | 1 net/sched/act_mpls.c | 66 - net/sched/act_pedit.c | 178 +-- net/sched/act_sample.c | 11 net/sched/cls_tcindex.c | 756 ------------- net/sctp/stream_sched_prio.c | 52 net/tls/tls_sw.c | 26 sound/soc/codecs/Kconfig | 2 sound/soc/codecs/adau7118.c | 19 sound/soc/mediatek/mt8195/mt8195-dai-etdm.c | 3 tools/iio/iio_utils.c | 23 tools/objtool/check.c | 2 145 files changed, 1267 insertions(+), 1495 deletions(-)
Alexander Potapenko (1):
fs: f2fs: initialize fsdata in pagecache_write()
Alexander Usyskin (1):
mei: bus-fixup:upon error print return values of send and receive
Alexandre Belloni (1):
rtc: allow rtc_read_alarm without read_alarm callback
Ammar Faizi (1):
x86: um: vdso: Add '%rcx' and '%r11' to the syscall clobber list
Arnd Bergmann (2):
scsi: ipr: Work around fortify-string warning
ASoC: zl38060 add gpiolib dependency
Benjamin Berg (4):
um: virtio_uml: free command if adding to virtqueue failed
um: virtio_uml: mark device as unregistered when breaking it
um: virtio_uml: move device breaking into workqueue
um: virt-pci: properly remove PCI device from bus
Chen Jun (1):
watchdog: Fix kmemleak in watchdog_cdev_register
Dan Carpenter (1):
thermal: intel: quark_dts: fix error pointer dereference
Daniel Scally (2):
usb: uvc: Enumerate valid values for color matching
usb: gadget: uvc: Make bSourceID read/write
Darrell Kavanagh (1):
firmware/efi sysfb_efi: Add quirk for Lenovo IdeaPad Duet 3
Dean Luick (1):
IB/hfi1: Update RMT size calculation
Deepak R Varma (1):
octeontx2-pf: Use correct struct reference in test condition
Emil Renner Berthing (1):
pwm: sifive: Always let the first pwm_apply_state succeed
Eric Biggers (2):
f2fs: use memcpy_{to,from}_page() where possible
ext4: use ext4_fc_tl_mem in fast-commit replay path
Eric Dumazet (2):
net: fix __dev_kfree_skb_any() vs drop monitor
tcp: tcp_check_req() can be called from process context
Fabrice Gasnier (1):
pwm: stm32-lp: fix the check on arr and cmp registers update
Fedor Pchelkin (1):
nfc: fix memory leak of se_io context in nfc_genl_se_io
Florian Westphal (1):
netfilter: ebtables: fix table blob use-after-free
George Cherian (1):
watchdog: sbsa_wdog: Make sure the timeout programming is within the limits
George Kennedy (2):
ubi: ensure that VID header offset + VID header size <= alloc, size
vc_screen: modify vcs_size() handling in vcs_read()
Greg Kroah-Hartman (20):
kernel/printk/index.c: fix memory leak with using debugfs_lookup()
USB: fix memory leak with using debugfs_lookup()
USB: dwc3: fix memory leak with using debugfs_lookup()
USB: chipidea: fix memory leak with using debugfs_lookup()
USB: uhci: fix memory leak with using debugfs_lookup()
USB: sl811: fix memory leak with using debugfs_lookup()
USB: fotg210: fix memory leak with using debugfs_lookup()
USB: isp116x: fix memory leak with using debugfs_lookup()
USB: isp1362: fix memory leak with using debugfs_lookup()
USB: gadget: gr_udc: fix memory leak with using debugfs_lookup()
USB: gadget: bcm63xx_udc: fix memory leak with using debugfs_lookup()
USB: gadget: lpc32xx_udc: fix memory leak with using debugfs_lookup()
USB: gadget: pxa25x_udc: fix memory leak with using debugfs_lookup()
USB: gadget: pxa27x_udc: fix memory leak with using debugfs_lookup()
tty: pcn_uart: fix memory leak with using debugfs_lookup()
misc: vmw_balloon: fix memory leak with using debugfs_lookup()
drivers: base: component: fix memory leak with using debugfs_lookup()
drivers: base: dd: fix memory leak with using debugfs_lookup() kernel/fail_function: fix memory leak with using debugfs_lookup() Linux 5.15.100
Guenter Roeck (1):
media: uvcvideo: Handle errors from calls to usb_string
Hangyu Hua (1):
netfilter: ctnetlink: fix possible refcount leak in ctnetlink_create_conntrack()
Harshit Mogalapalli (3):
iio: accel: mma9551_core: Prevent uninitialized variable in mma9551_read_status_word()
iio: accel: mma9551_core: Prevent uninitialized variable in mma9551_read_config_word() drm/virtio: Fix error code in virtio_gpu_object_shmem_init()
Huacai Chen (2):
PCI: loongson: Prevent LS7A MRRS increases
PCI: loongson: Add more devices that need MRRS quirk
Imre Deak (2):
drm/display/dp_mst: Fix down/up message handling after sink disconnect drm/display/dp_mst: Fix down message handling after a packet reception error
Isaac True (1):
serial: sc16is7xx: setup GPIO controller later in probe
Jakub Kicinski (1):
net: tls: avoid hanging tasks on the tx_lock
Jamal Hadi Salim (1):
net/sched: Retire tcindex classifier
Jia-Ju Bai (1):
tracing: Add NULL checks for buffer in ring_buffer_free_read_page()
Jianglei Nie (1):
auxdisplay: hd44780: Fix potential memory leak in hd44780_remove()
Jiapeng Chong (1):
phy: rockchip-typec: Fix unsigned comparison with less than zero
Juergen Gross (2):
9p/xen: fix version parsing
9p/xen: fix connection sequence
Kees Cook (3):
media: uvcvideo: Silence memcpy() run-time false positive warnings
usb: host: xhci: mvebu: Iterate over array indexes instead of using pointer math
USB: ene_usb6250: Allocate enough memory for full object
Krzysztof Kozlowski (1):
ARM: dts: spear320-hmi: correct STMPE GPIO compatible
Laurent Pinchart (1):
media: uvcvideo: Remove format descriptions
Li Hua (2):
ubifs: Fix build errors as symbol undefined
watchdog: pcwd_usb: Fix attempting to access uninitialized memory
Li Zetao (3):
ubi: Fix use-after-free when volume resizing failed
ubi: Fix unreferenced object reported by kmemleak in ubi_resize_volume()
ubifs: Fix memory leak in alloc_wbufs()
Liang He (1):
mfd: arizona: Use pm_runtime_resume_and_get() to prevent refcnt leak
Linus Torvalds (1):
x86/resctl: fix scheduler confusion with 'current'
Liu Shixin via Jfs-discussion (1):
fs/jfs: fix shift exponent db_agl2size negative
Lu Wei (1):
ipv6: Add lwtunnel encap size of all siblings in nexthop calculation
Maor Dickman (1):
net/mlx5: Geneve, Fix handling of Geneve object id as error code
Mark Brown (1):
ASoC: zl38060: Remove spurious gpiolib select
Mengyuan Lou (1):
PCI: Add ACS quirk for Wangxun NICs
Miaoqian Lin (2):
objtool: Fix memory leak in create_static_call_sections()
malidp: Fix NULL vs IS_ERR() checking
Mika Westerberg (2):
PCI: Align extra resources for hotplug bridges properly
PCI: Take other bus devices into account when distributing resources
Nguyen Dinh Phi (1):
Bluetooth: hci_sock: purge socket queues in the destruct() callback
Nuno Sá (1):
ASoC: adau7118: don't disable regulators on device unbind
Pablo Neira Ayuso (1):
netfilter: nf_tables: allow to fetch set elements when table has an owner
Pavel Tikhomirov (1):
netfilter: x_tables: fix percpu counter block leak on error path when creating new netns
Pedro Tammela (4):
net/sched: transition act_pedit to rcu and percpu stats net/sched: act_pedit: fix action bind logic net/sched: act_mpls: fix action bind logic net/sched: act_sample: fix action bind logic
Randy Dunlap (1):
thermal: intel: BXT_PMIC: select REGMAP instead of depending on it
Ricardo Ribalda (3):
media: uvcvideo: Handle cameras with invalid descriptors
media: uvcvideo: Quirk for autosuspend in Logitech B910 and C910
media: uvcvideo: Fix race condition with usb_kill_urb
Richard Fitzgerald (3):
soundwire: bus_type: Avoid lockdep assert in sdw_drv_probe()
soundwire: cadence: Remove wasted space in response_buf
soundwire: cadence: Drain the RX FIFO after an IO timeout
Roi Dayan (1):
net/mlx5e: Verify flow_source cap before using it
Salvatore Bonaccorso (1):
Revert "scsi: mpt3sas: Fix return value check of dma_get_required_mask()"
Samuel Holland (3):
rtc: sun6i: Always export the internal oscillator
genirq: Refactor accessors to use irq_data_get_affinity_mask
genirq: Add and use an irq_data_update_affinity helper
Sherry Sun (1):
tty: serial: fsl_lpuart: disable the CTS when send break signal
Souradeep Chowdhury (1):
bootconfig: Increase max nodes of bootconfig from 1024 to 8192 for DCC support
Sreekanth Reddy (3):
scsi: mpt3sas: Don't change DMA mask while reallocating pools
scsi: mpt3sas: re-do lost mpt3sas DMA mask fix
scsi: mpt3sas: Remove usage of dma_get_required_mask() API
Sven Schnelle (1):
tty: fix out-of-bounds access in tty_driver_lookup_tty()
Trevor Wu (1):
ASoC: mediatek: mt8195: add missing initialization
Uwe Kleine-König (1):
pwm: sifive: Reduce time the controller lock is held
Vasant Hegde (1):
iommu/amd: Fix error handling for pdev_pri_ats_enable()
Xiang Yang (1):
um: vector: Fix memory leak in vector_config
Xin Long (1):
sctp: add a refcnt in sctp_stream_priorities to avoid a nested loop
Yang Yingliang (2):
ubi: Fix possible null-ptr-deref in ubi_free_volume()
usb: gadget: uvc: fix missing mutex_unlock() if kstrtou8() fails
Yangtao Li (2):
f2fs: allow set compression option of files without blocks
f2fs: fix to avoid potential memory corruption in __update_iostat_latency()
Yuan Can (1):
staging: emxx_udc: Add checks for dma_alloc_coherent()
Yulong Zhang (1):
tools/iio/iio_utils:fix memory leak
Zhengchao Shao (1):
9p/rdma: unmap receive dma buffer in rdma_request()/post_recv()
Zhihao Cheng (11):
ubifs: Rectify space budget for ubifs_symlink() if symlink is encrypted
ubifs: Rectify space budget for ubifs_xrename()
ubifs: Fix wrong dirty space budget for dirty inode
ubifs: do_rename: Fix wrong space budget when target inode's nlink > 1
ubifs: Reserve one leb for each journal head while doing budget
ubifs: Re-statistic cleaned znode count if commit failed
ubifs: dirty_cow_znode: Fix memleak in error handling path
ubifs: ubifs_writepage: Mark page dirty after writing inode failed
ubi: fastmap: Fix missed fm_anchor PEB in wear-leveling after disabling fastmap
ubi: Fix UAF wear-leveling entry in eraseblk_count_seq_show()
ubi: ubi_wl_put_peb: Fix infinite loop when wear-leveling work failed
Zhong Jinghua (1):
loop: loop_set_status_from_info() check before assignment
ruanjinjie (1):
watchdog: at91sam9_wdt: use devm_request_irq to avoid missing free_irq() in error path
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/configfs-usb-gadget-uvc +1 -1
@@ -51,7 +51,7 @@ Date: Dec 2014 KernelVersion: 4.0 Description: Default output terminal descriptors - All attributes read only: + All attributes read only except bSourceID: ============== ============================================= iTerminal index of string descriptor
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 99 +SUBLEVEL = 100 EXTRAVERSION = NAME = Trick or Treat
arch/alpha/kernel/irq.c +1 -1
@@ -60,7 +60,7 @@ int irq_select_affinity(unsigned int irq) cpu = (cpu < (NR_CPUS -1 ) ? cpu +1 :0 ); last_cpu = cpu; -cpumask_copy (irq_data_get_affinity_mask (data),cpumask_of (cpu)); +irq_data_update_affinity (data,cpumask_of (cpu)); chip->irq_set_affinity (data,cpumask_of (cpu), false);return 0 ; }
arch/arm/boot/dts/spear320-hmi.dts +1 -1
@@ -242,7 +242,7 @@ stmpe811@41 { irq-trigger = <0x1>; stmpegpio: stmpe-gpio { - compatible = "stmpe,gpio"; + compatible = "st,stmpe-gpio"; reg = <0>; gpio-controller; #gpio-cells = <2>;
arch/ia64/kernel/iosapic.c +1 -1
@@ -834,7 +834,7 @@ iosapic_unregister_intr (unsigned int gsi)if (iosapic_intr_info[irq].count ==0 ) {#ifdef CONFIG_SMP /* Clear affinity */ -cpumask_setall (irq_get_affinity_mask (irq)); +irq_data_update_affinity (irq_get_irq_data (irq), cpu_all_mask);#endif /* Clear the interrupt information */ iosapic_intr_info[irq].dest =0 ;
arch/ia64/kernel/irq.c +2 -2
@@ -57,8 +57,8 @@ static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 };void set_irq_affinity_info (unsigned int irq,int hwid,int redir) {if (irq <NR_IRQS ) { -cpumask_copy (irq_get_affinity_mask (irq), -cpumask_of (cpu_logical_id (hwid))); +irq_data_update_affinity (irq_get_irq_data (irq), +cpumask_of (cpu_logical_id (hwid))); irq_redir[irq] = (char ) (redir &0xff ); } }
arch/ia64/kernel/msi_ia64.c +2 -2
@@ -37,7 +37,7 @@ static int ia64_set_msi_irq_affinity(struct irq_data *idata, msg.data = data;pci_write_msi_msg (irq, &msg); -cpumask_copy (irq_data_get_affinity_mask (idata),cpumask_of (cpu)); +irq_data_update_affinity (idata,cpumask_of (cpu));return 0 ; }
@@ -132,7 +132,7 @@ static int dmar_msi_set_affinity(struct irq_data *data, msg.address_lo |=MSI_ADDR_DEST_ID_CPU (cpu_physical_id (cpu));dmar_msi_write (irq, &msg); -cpumask_copy (irq_data_get_affinity_mask (data), mask); +irq_data_update_affinity (data, mask);return 0 ; }
arch/parisc/kernel/irq.c +1 -1
@@ -333,7 +333,7 @@ unsigned long txn_affinity_addr(unsigned int irq, int cpu) {#ifdef CONFIG_SMP struct irq_data *d =irq_get_irq_data (irq); -cpumask_copy (irq_data_get_affinity_mask (d),cpumask_of (cpu)); +irq_data_update_affinity (d,cpumask_of (cpu));#endif return per_cpu (cpu_data, cpu).txn_addr;
arch/um/drivers/vector_kern.c +1 -0
@@ -770,6 +770,7 @@ static int vector_config(char *str, char **error_out)if (parsed ==NULL ) { *error_out ="vector_config failed to parse parameters" ; +kfree (params);return -EINVAL ; }
arch/um/drivers/virt-pci.c +20 -6
@@ -131,8 +131,11 @@ static int um_pci_send_cmd(struct um_pci_device *dev, out ?1 :0 , posted ? cmd :HANDLE_NO_FREE (cmd), GFP_ATOMIC); -if (ret) +if (ret) { +if (posted) +kfree (cmd); goto out; + }if (posted) {virtqueue_kick (dev->cmd_vq);
@@ -615,22 +618,33 @@ static void um_pci_virtio_remove(struct virtio_device *vdev)struct um_pci_device *dev = vdev->priv;int i; -/* Stop all virtqueues */ - vdev->config->reset (vdev); - vdev->config->del_vqs (vdev); -device_set_wakeup_enable (&vdev->dev, false);mutex_lock (&um_pci_mtx);for (i =0 ; i <MAX_DEVICES ; i++) {if (um_pci_devices[i].dev != dev)continue ; + um_pci_devices[i].dev =NULL ;irq_free_desc (dev->irq); + +break ; }mutex_unlock (&um_pci_mtx); -um_pci_rescan (); +if (i <MAX_DEVICES ) { +struct pci_dev *pci_dev; + + pci_dev =pci_get_slot (bridge->bus, i); +if (pci_dev) +pci_stop_and_remove_bus_device_locked (pci_dev); + } + +/* Stop all virtqueues */ +virtio_reset_device (vdev); + dev->cmd_vq =NULL ; + dev->irq_vq =NULL ; + vdev->config->del_vqs (vdev);kfree (dev); }
arch/um/drivers/virtio_uml.c +17 -1
@@ -168,7 +168,8 @@ static void vhost_user_check_reset(struct virtio_uml_device *vu_dev,if (!vu_dev->registered)return ; -virtio_break_device (&vu_dev->vdev); + vu_dev->registered =0 ; +schedule_work (&pdata->conn_broken_wk); }
@@ -1132,6 +1133,15 @@ void virtio_uml_set_no_vq_suspend(struct virtio_device *vdev,static void vu_of_conn_broken (struct work_struct *wk) { +struct virtio_uml_platform_data *pdata; +struct virtio_uml_device *vu_dev; + + pdata = container_of(wk, struct virtio_uml_platform_data, conn_broken_wk); + + vu_dev =platform_get_drvdata (pdata->pdev); + +virtio_break_device (&vu_dev->vdev); +/* * We can't remove the device from the devicetree so the only thing we * can do is warn.
@@ -1262,8 +1272,14 @@ static int vu_unregister_cmdline_device(struct device *dev, void *data)static void vu_conn_broken (struct work_struct *wk) {struct virtio_uml_platform_data *pdata; +struct virtio_uml_device *vu_dev; pdata = container_of(wk, struct virtio_uml_platform_data, conn_broken_wk); + + vu_dev =platform_get_drvdata (pdata->pdev); + +virtio_break_device (&vu_dev->vdev); +vu_unregister_cmdline_device (&pdata->pdev->dev,NULL ); }
arch/x86/include/asm/resctrl.h +6 -6
@@ -51,7 +51,7 @@ DECLARE_STATIC_KEY_FALSE(rdt_mon_enable_key);* simple as possible. * Must be called with preemption disabled. */ -static void __resctrl_sched_in (void ) +static inline void __resctrl_sched_in (struct task_struct *tsk) {struct resctrl_pqr_state *state =this_cpu_ptr (&pqr_state);u32 closid = state->default_closid;
@@ -63,13 +63,13 @@ static void __resctrl_sched_in(void)* Else use the closid/rmid assigned to this cpu. */ if (static_branch_likely (&rdt_alloc_enable_key)) { - tmp =READ_ONCE (current->closid); + tmp =READ_ONCE (tsk->closid);if (tmp) closid = tmp; }if (static_branch_likely (&rdt_mon_enable_key)) { - tmp =READ_ONCE (current->rmid); + tmp =READ_ONCE (tsk->rmid);if (tmp) rmid = tmp; }
@@ -81,17 +81,17 @@ static void __resctrl_sched_in(void) } } -static inline void resctrl_sched_in (void ) +static inline void resctrl_sched_in (struct task_struct *tsk) {if (static_branch_likely (&rdt_enable_key)) -__resctrl_sched_in (); +__resctrl_sched_in (tsk); }void resctrl_cpu_detect (struct cpuinfo_x86 *c);#else -static inline void resctrl_sched_in (void ) {} +static inline void resctrl_sched_in (struct task_struct *tsk) {}static inline void resctrl_cpu_detect (struct cpuinfo_x86 *c) {}#endif /* CONFIG_X86_CPU_RESCTRL */
arch/x86/kernel/cpu/resctrl/rdtgroup.c +2 -2
@@ -314,7 +314,7 @@ static void update_cpu_closid_rmid(void *info)* executing task might have its own closid selected. Just reuse * the context switch code. */ -resctrl_sched_in (); +resctrl_sched_in (current); }/*
@@ -535,7 +535,7 @@ static void _update_task_closid_rmid(void *task)* Otherwise, the MSR is updated when the task is scheduled in. */ if (task == current) -resctrl_sched_in (); +resctrl_sched_in (task); }static void update_task_closid_rmid (struct task_struct *t)
arch/x86/kernel/process_32.c +1 -1
@@ -216,7 +216,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)switch_fpu_finish (next_fpu);/* Load the Intel cache allocation PQR MSR. */ -resctrl_sched_in (); +resctrl_sched_in (next_p);return prev_p; }
arch/x86/kernel/process_64.c +1 -1
@@ -656,7 +656,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) }/* Load the Intel cache allocation PQR MSR. */ -resctrl_sched_in (); +resctrl_sched_in (next_p);return prev_p; }
arch/x86/um/vdso/um_vdso.c +8 -4
@@ -17,8 +17,10 @@ int __vdso_clock_gettime(clockid_t clock, struct __kernel_old_timespec *ts) {long ret; - asm("syscall" :"=a" (ret) : -"0" (__NR_clock_gettime),"D" (clock),"S" (ts) :"memory" ); + asm("syscall" + :"=a" (ret) + :"0" (__NR_clock_gettime),"D" (clock),"S" (ts) + :"rcx" ,"r11" ,"memory" );return ret; }
@@ -29,8 +31,10 @@ int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz) {long ret; - asm("syscall" :"=a" (ret) : -"0" (__NR_gettimeofday),"D" (tv),"S" (tz) :"memory" ); + asm("syscall" + :"=a" (ret) + :"0" (__NR_gettimeofday),"D" (tv),"S" (tz) + :"rcx" ,"r11" ,"memory" );return ret; }
drivers/auxdisplay/hd44780.c +2 -0
@@ -322,8 +322,10 @@ static int hd44780_probe(struct platform_device *pdev)static int hd44780_remove (struct platform_device *pdev) {struct charlcd *lcd =platform_get_drvdata (pdev); +struct hd44780_common *hdc = lcd->drvdata;charlcd_unregister (lcd); +kfree (hdc->hd44780);kfree (lcd->drvdata);kfree (lcd);
drivers/base/component.c +1 -1
@@ -130,7 +130,7 @@ static void component_master_debugfs_add(struct master *m)static void component_master_debugfs_del (struct master *m) { -debugfs_remove (debugfs_lookup (dev_name (m->parent), component_debugfs_dir)); +debugfs_lookup_and_remove (dev_name (m->parent), component_debugfs_dir); }#else
drivers/base/dd.c +1 -1
@@ -352,7 +352,7 @@ late_initcall(deferred_probe_initcall); static void __exit deferred_probe_exit(void) { -debugfs_remove_recursive (debugfs_lookup ("devices_deferred" ,NULL )); +debugfs_lookup_and_remove ("devices_deferred" ,NULL ); }__exitcall (deferred_probe_exit);
drivers/block/loop.c +4 -4
@@ -1152,13 +1152,13 @@ loop_set_status_from_info(struct loop_device *lo,if (err)return err; +/* Avoid assigning overflow values */ +if (info->lo_offset >LLONG_MAX || info->lo_sizelimit >LLONG_MAX ) +return -EOVERFLOW ; + lo->lo_offset = info->lo_offset; lo->lo_sizelimit = info->lo_sizelimit; -/* loff_t vars have been assigned __u64 */ -if (lo->lo_offset <0 || lo->lo_sizelimit <0 ) -return -EOVERFLOW ; -memcpy (lo->lo_file_name, info->lo_file_name,LO_NAME_SIZE );memcpy (lo->lo_crypt_name, info->lo_crypt_name,LO_NAME_SIZE ); lo->lo_file_name[LO_NAME_SIZE -1 ] =0 ;
drivers/firmware/efi/sysfb_efi.c +8 -0
@@ -266,6 +266,14 @@ static const struct dmi_system_id efifb_dmi_swap_width_height[] __initconst = { "Lenovo ideapad D330-10IGM"), }, }, + { + /* Lenovo IdeaPad Duet 3 10IGL5 with 1200x1920 portrait screen */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, + "IdeaPad Duet 3 10IGL5"), + }, + }, {}, };
drivers/gpu/drm/arm/malidp_planes.c +1 -1
@@ -348,7 +348,7 @@ static bool malidp_check_pages_threshold(struct malidp_plane_state *ms,else sgt = obj->funcs->get_sg_table (obj); -if (!sgt) +if (IS_ERR (sgt))return false; sgl = sgt->sgl;
drivers/gpu/drm/drm_dp_mst_topology.c +4 -1
@@ -3781,6 +3781,9 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool msset_bit (0 , &mgr->payload_mask); mgr->vcpi_mask =0 ; mgr->payload_id_table_cleared = false; + +memset (&mgr->down_rep_recv,0 ,sizeof (mgr->down_rep_recv)); +memset (&mgr->up_req_recv,0 ,sizeof (mgr->up_req_recv)); } out_unlock:
@@ -3994,7 +3997,7 @@ static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr)struct drm_dp_sideband_msg_rx *msg = &mgr->down_rep_recv;if (!drm_dp_get_one_sb_msg (mgr, false, &mstb)) - goto out; + goto out_clear_reply;/* Multi-packet message transmission, don't clear the reply */ if (!msg->have_eomt)
drivers/gpu/drm/virtio/virtgpu_object.c +2 -1
@@ -169,8 +169,9 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev, shmem->pages =drm_gem_shmem_get_sg_table (&bo->base);if (IS_ERR (shmem->pages)) {drm_gem_shmem_unpin (&bo->base); + ret =PTR_ERR (shmem->pages); shmem->pages =NULL ; -return PTR_ERR (shmem->pages); +return ret; }if (use_dma_api) {
drivers/iio/accel/mma9551_core.c +8 -2
@@ -296,9 +296,12 @@ int mma9551_read_config_word(struct i2c_client *client, u8 app_id, ret =mma9551_transfer (client, app_id,MMA9551_CMD_READ_CONFIG , reg,NULL ,0 , (u8 *)&v,2 ); +if (ret <0 ) +return ret; + *val =be16_to_cpu (v); -return ret; +return 0 ; }EXPORT_SYMBOL (mma9551_read_config_word);
@@ -354,9 +357,12 @@ int mma9551_read_status_word(struct i2c_client *client, u8 app_id, ret =mma9551_transfer (client, app_id,MMA9551_CMD_READ_STATUS , reg,NULL ,0 , (u8 *)&v,2 ); +if (ret <0 ) +return ret; + *val =be16_to_cpu (v); -return ret; +return 0 ; }EXPORT_SYMBOL (mma9551_read_status_word);
drivers/infiniband/hw/hfi1/chip.c +32 -27
96 lines not on this page · raw message
drivers/iommu/amd/iommu.c +7 -5
@@ -1586,27 +1586,29 @@ static int pdev_iommuv2_enable(struct pci_dev *pdev)/* Only allow access to user-accessible pages */ ret =pci_enable_pasid (pdev,0 );if (ret) - goto out_err; +return ret;/* First reset the PRI state of the device */ ret =pci_reset_pri (pdev);if (ret) - goto out_err; + goto out_err_pasid;/* Enable PRI */ /* FIXME: Hardcode number of outstanding requests for now */ ret =pci_enable_pri (pdev,32 );if (ret) - goto out_err; + goto out_err_pasid; ret =pci_enable_ats (pdev,PAGE_SHIFT );if (ret) - goto out_err; + goto out_err_pri;return 0 ; -out_err: +out_err_pri:pci_disable_pri (pdev); + +out_err_pasid:pci_disable_pasid (pdev);return ret;
drivers/irqchip/irq-bcm6345-l1.c +2 -2
@@ -220,11 +220,11 @@ static int bcm6345_l1_set_affinity(struct irq_data *d, enabled = intc->cpus[old_cpu]->enable_cache[word] & mask;if (enabled)__bcm6345_l1_mask (d); -cpumask_copy (irq_data_get_affinity_mask (d), dest); +irq_data_update_affinity (d, dest);if (enabled)__bcm6345_l1_unmask (d); }else { -cpumask_copy (irq_data_get_affinity_mask (d), dest); +irq_data_update_affinity (d, dest); }raw_spin_unlock_irqrestore (&intc->lock, flags);
drivers/media/usb/uvc/uvc_ctrl.c +5 -0
@@ -6,6 +6,7 @@* Laurent Pinchart ([email protected]) */ +#include <asm/barrier.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/module.h>
@@ -1459,6 +1460,10 @@ static void uvc_ctrl_status_event_work(struct work_struct *work)uvc_ctrl_status_event (w->chain, w->ctrl, w->data); +/* The barrier is needed to synchronize with uvc_status_stop(). */ +if (smp_load_acquire (&dev->flush_status)) +return ; +/* Resubmit the URB. */ w->urb->interval = dev->int_ep->desc.bInterval; ret =usb_submit_urb (w->urb,GFP_KERNEL );
drivers/media/usb/uvc/uvc_driver.c +39 -51
172 lines not on this page · raw message
drivers/media/usb/uvc/uvc_entity.c +1 -1
@@ -37,7 +37,7 @@ static int uvc_mc_create_links(struct uvc_video_chain *chain,continue ; remote =uvc_entity_by_id (chain->dev, entity->baSourceID[i]); -if (remote ==NULL ) +if (remote ==NULL || remote->num_pads ==0 )return -EINVAL ; source = (UVC_ENTITY_TYPE (remote) ==UVC_TT_STREAMING )
drivers/media/usb/uvc/uvc_status.c +37 -0
@@ -6,6 +6,7 @@* Laurent Pinchart ([email protected]) */ +#include <asm/barrier.h> #include <linux/kernel.h> #include <linux/input.h> #include <linux/slab.h>
@@ -309,5 +310,41 @@ int uvc_status_start(struct uvc_device *dev, gfp_t flags)void uvc_status_stop (struct uvc_device *dev) { +struct uvc_ctrl_work *w = &dev->async_ctrl; + +/* +* Prevent the asynchronous control handler from requeing the URB. The +* barrier is needed so the flush_status change is visible to other +* CPUs running the asynchronous handler before usb_kill_urb() is +* called below. +*/ +smp_store_release (&dev->flush_status, true); + +/* +* Cancel any pending asynchronous work. If any status event was queued, +* process it synchronously. +*/ +if (cancel_work_sync (&w->work)) +uvc_ctrl_status_event (w->chain, w->ctrl, w->data); + +/* Kill the urb. */ usb_kill_urb (dev->int_urb); + +/* +* The URB completion handler may have queued asynchronous work. This +* won't resubmit the URB as flush_status is set, but it needs to be +* cancelled before returning or it could then race with a future +* uvc_status_start() call. +*/ +if (cancel_work_sync (&w->work)) +uvc_ctrl_status_event (w->chain, w->ctrl, w->data); + +/* +* From this point, there are no events on the queue and the status URB +* is dead. No events will be queued until uvc_status_start() is called. +* The barrier is needed to make sure that flush_status is visible to +* uvc_ctrl_status_event_work() when uvc_status_start() will be called +* again. +*/ +smp_store_release (&dev->flush_status, false); }
drivers/media/usb/uvc/uvc_v4l2.c +0 -2
@@ -657,8 +657,6 @@ static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream, fmt->flags =0 ;if (format->flags &UVC_FMT_FLAG_COMPRESSED ) fmt->flags |=V4L2_FMT_FLAG_COMPRESSED ; -strscpy (fmt->description, format->name,sizeof (fmt->description)); - fmt->description[sizeof (fmt->description) -1 ] =0 ; fmt->pixelformat = format->fcc;return 0 ; }
drivers/media/usb/uvc/uvc_video.c +14 -1
@@ -1334,7 +1334,9 @@ static void uvc_video_decode_meta(struct uvc_streaming *stream,if (has_scr)memcpy (stream->clock.last_scr, scr,6 ); -memcpy (&meta->length, mem, length); + meta->length = mem[0 ]; + meta->flags = mem[1 ]; +memcpy (meta->buf, &mem[2 ], length -2 ); meta_buf->bytesused += length +sizeof (meta->ns) +sizeof (meta->sof); uvc_dbg(stream->dev, FRAME,
@@ -1951,6 +1953,17 @@ static int uvc_video_start_transfer(struct uvc_streaming *stream,"Selecting alternate setting %u (%u B/frame bandwidth)\n" , altsetting, best_psize); +/* +* Some devices, namely the Logitech C910 and B910, are unable +* to recover from a USB autosuspend, unless the alternate +* setting of the streaming interface is toggled. +*/ +if (stream->dev->quirks &UVC_QUIRK_WAKE_AUTOSUSPEND ) { +usb_set_interface (stream->dev->udev, intfnum, + altsetting); +usb_set_interface (stream->dev->udev, intfnum,0 ); + } + ret =usb_set_interface (stream->dev->udev, intfnum, altsetting);if (ret <0 )return ret;
drivers/media/usb/uvc/uvcvideo.h +2 -2
@@ -209,6 +209,7 @@#define UVC_QUIRK_RESTORE_CTRLS_ON_INIT 0x00000400#define UVC_QUIRK_FORCE_Y8 0x00000800#define UVC_QUIRK_FORCE_BPP 0x00001000 +#define UVC_QUIRK_WAKE_AUTOSUSPEND 0x00002000/* Format flags */ #define UVC_FMT_FLAG_COMPRESSED 0x00000001
@@ -405,8 +406,6 @@ struct uvc_format {u32 fcc;u32 flags; -char name[32 ]; -unsigned int nframes;struct uvc_frame *frame; };
@@ -698,6 +697,7 @@ struct uvc_device {/* Status Interrupt Endpoint */ struct usb_host_endpoint *int_ep;struct urb *int_urb; +bool flush_status;u8 *status;struct input_dev *input;char input_phys[64 ];
drivers/mfd/arizona-core.c +1 -1
@@ -45,7 +45,7 @@ int arizona_clk32k_enable(struct arizona *arizona)if (arizona->clk32k_ref ==1 ) {switch (arizona->pdata.clk32k_src) {case ARIZONA_32KZ_MCLK1 : - ret =pm_runtime_get_sync (arizona->dev); + ret =pm_runtime_resume_and_get (arizona->dev);if (ret !=0 ) goto err_ref; ret =clk_prepare_enable (arizona->mclk[ARIZONA_MCLK1 ]);
drivers/misc/mei/bus-fixup.c +4 -4
@@ -175,7 +175,7 @@ static int mei_fwver(struct mei_cl_device *cldev) ret =__mei_cl_send (cldev->cl, (u8 *)&req,sizeof (req),0 ,MEI_CL_IO_TX_BLOCKING );if (ret <0 ) { -dev_err (&cldev->dev,"Could not send ReqFWVersion cmd\n" ); +dev_err (&cldev->dev,"Could not send ReqFWVersion cmd ret = %d\n" , ret);return ret; }
@@ -187,7 +187,7 @@ static int mei_fwver(struct mei_cl_device *cldev)* Should be at least one version block, * error out if nothing found */ -dev_err (&cldev->dev,"Could not read FW version\n" ); +dev_err (&cldev->dev,"Could not read FW version ret = %d\n" , bytes_recv);return -EIO ; }
@@ -337,7 +337,7 @@ static int mei_nfc_if_version(struct mei_cl *cl, ret =__mei_cl_send (cl, (u8 *)&cmd,sizeof (cmd),0 ,MEI_CL_IO_TX_BLOCKING );if (ret <0 ) { -dev_err (bus->dev,"Could not send IF version cmd\n" ); +dev_err (bus->dev,"Could not send IF version cmd ret = %d\n" , ret);return ret; }
@@ -352,7 +352,7 @@ static int mei_nfc_if_version(struct mei_cl *cl, bytes_recv =__mei_cl_recv (cl, (u8 *)reply, if_version_length, &vtag,0 ,0 );if (bytes_recv <0 || (size_t )bytes_recv < if_version_length) { -dev_err (bus->dev,"Could not read IF version\n" ); +dev_err (bus->dev,"Could not read IF version ret = %d\n" , bytes_recv); ret = -EIO ; goto err; }
drivers/misc/vmw_balloon.c +1 -1
@@ -1711,7 +1711,7 @@ static void __init vmballoon_debugfs_init(struct vmballoon *b) static void __exit vmballoon_debugfs_exit(struct vmballoon *b) {static_key_disable (&balloon_stat_enabled.key); -debugfs_remove (debugfs_lookup ("vmmemctl" ,NULL )); +debugfs_lookup_and_remove ("vmmemctl" ,NULL );kfree (b->stats); b->stats =NULL ; }
drivers/mtd/ubi/build.c +7 -0
@@ -468,6 +468,7 @@ static int uif_init(struct ubi_device *ubi) err =ubi_add_volume (ubi, ubi->volumes[i]);if (err) {ubi_err (ubi,"cannot add volume %d" , i); + ubi->volumes[i] =NULL ; goto out_volumes; } }
@@ -663,6 +664,12 @@ static int io_init(struct ubi_device *ubi, int max_beb_per1024) ubi->ec_hdr_alsize =ALIGN (UBI_EC_HDR_SIZE , ubi->hdrs_min_io_size); ubi->vid_hdr_alsize =ALIGN (UBI_VID_HDR_SIZE , ubi->hdrs_min_io_size); +if (ubi->vid_hdr_offset && ((ubi->vid_hdr_offset +UBI_VID_HDR_SIZE ) > + ubi->vid_hdr_alsize)) { +ubi_err (ubi,"VID header offset %d too large." , ubi->vid_hdr_offset); +return -EINVAL ; + } +dbg_gen ("min_io_size %d" , ubi->min_io_size);dbg_gen ("max_write_size %d" , ubi->max_write_size);dbg_gen ("hdrs_min_io_size %d" , ubi->hdrs_min_io_size);
drivers/mtd/ubi/fastmap-wl.c +7 -5
@@ -146,13 +146,15 @@ void ubi_refill_pools(struct ubi_device *ubi)if (ubi->fm_anchor) {wl_tree_add (ubi->fm_anchor, &ubi->free); ubi->free_count++; + ubi->fm_anchor =NULL ; } -/* -* All available PEBs are in ubi->free, now is the time to get -* the best anchor PEBs. -*/ - ubi->fm_anchor =ubi_wl_get_fm_peb (ubi,1 ); +if (!ubi->fm_disabled) +/* +* All available PEBs are in ubi->free, now is the time to get +* the best anchor PEBs. +*/ + ubi->fm_anchor =ubi_wl_get_fm_peb (ubi,1 );for (;;) { enough =0 ;
drivers/mtd/ubi/vmt.c +10 -8
@@ -464,7 +464,7 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs)for (i =0 ; i < -pebs; i++) { err =ubi_eba_unmap_leb (ubi, vol, reserved_pebs + i);if (err) - goto out_acc; + goto out_free; }spin_lock (&ubi->volumes_lock); ubi->rsvd_pebs += pebs;
@@ -512,8 +512,10 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs) ubi->avail_pebs += pebs;spin_unlock (&ubi->volumes_lock); } +return err; + out_free: -kfree (new_eba_tbl); +ubi_eba_destroy_table (new_eba_tbl);return err; }
@@ -580,6 +582,7 @@ int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol)if (err) {ubi_err (ubi,"cannot add character device for volume %d, error %d" , vol_id, err); +vol_release (&vol->dev);return err; }
@@ -590,15 +593,14 @@ int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol) vol->dev.groups = volume_dev_groups;dev_set_name (&vol->dev,"%s_%d" , ubi->ubi_name, vol->vol_id); err =device_register (&vol->dev); -if (err) - goto out_cdev; +if (err) { +cdev_del (&vol->cdev); +put_device (&vol->dev); +return err; + }self_check_volumes (ubi);return err; - -out_cdev: -cdev_del (&vol->cdev); -return err; }/**
drivers/mtd/ubi/wl.c +22 -3
@@ -886,8 +886,11 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk, err =do_sync_erase (ubi, e1, vol_id, lnum,0 );if (err) { -if (e2) +if (e2) { +spin_lock (&ubi->wl_lock);wl_entry_destroy (ubi, e2); +spin_unlock (&ubi->wl_lock); + } goto out_ro; }
@@ -969,11 +972,11 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,spin_lock (&ubi->wl_lock); ubi->move_from = ubi->move_to =NULL ; ubi->move_to_put = ubi->wl_scheduled =0 ; +wl_entry_destroy (ubi, e1); +wl_entry_destroy (ubi, e2);spin_unlock (&ubi->wl_lock);ubi_free_vid_buf (vidb); -wl_entry_destroy (ubi, e1); -wl_entry_destroy (ubi, e2); out_ro:ubi_ro_mode (ubi);
@@ -1120,14 +1123,18 @@ static int __erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk)/* Re-schedule the LEB for erasure */ err1 =schedule_erase (ubi, e, vol_id, lnum,0 , false);if (err1) { +spin_lock (&ubi->wl_lock);wl_entry_destroy (ubi, e); +spin_unlock (&ubi->wl_lock); err = err1; goto out_ro; }return err; } +spin_lock (&ubi->wl_lock);wl_entry_destroy (ubi, e); +spin_unlock (&ubi->wl_lock);if (err != -EIO )/* * If this is not %-EIO, we have no idea what to do. Scheduling
@@ -1243,6 +1250,18 @@ int ubi_wl_put_peb(struct ubi_device *ubi, int vol_id, int lnum, retry:spin_lock (&ubi->wl_lock); e = ubi->lookuptbl[pnum]; +if (!e) { +/* +* This wl entry has been removed for some errors by other +* process (eg. wear leveling worker), corresponding process +* (except __erase_worker, which cannot concurrent with +* ubi_wl_put_peb) will set ubi ro_mode at the same time, +* just ignore this wl entry. +*/ +spin_unlock (&ubi->wl_lock); +up_read (&ubi->fm_protect); +return 0 ; + }if (e == ubi->move_from) {/* * User is putting the physical eraseblock which was selected to
drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c +1 -1
@@ -748,7 +748,7 @@ static int otx2_prepare_ipv6_flow(struct ethtool_rx_flow_spec *fsp,/* NPC profile doesn't extract AH/ESP header fields */ if ((ah_esp_mask->spi & ah_esp_hdr->spi) || - (ah_esp_mask->tclass & ah_esp_mask->tclass)) + (ah_esp_mask->tclass & ah_esp_hdr->tclass))return -EOPNOTSUPP ;if (flow_type ==AH_V6_FLOW )
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +2 -1
@@ -962,7 +962,8 @@ mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *on_esw, dest.vport.flags |=MLX5_FLOW_DEST_VPORT_VHCA_ID ; flow_act.action =MLX5_FLOW_CONTEXT_ACTION_FWD_DEST ; -if (rep->vport ==MLX5_VPORT_UPLINK ) +if (MLX5_CAP_ESW_FLOWTABLE (on_esw->dev, flow_source) && + rep->vport ==MLX5_VPORT_UPLINK ) spec->flow_context.flow_source =MLX5_FLOW_CONTEXT_FLOW_SOURCE_LOCAL_VPORT ; flow_rule = mlx5_add_flow_rules(on_esw->fdb_table.offloads.slow_fdb,
drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c +1 -0
@@ -105,6 +105,7 @@ int mlx5_geneve_tlv_option_add(struct mlx5_geneve *geneve, struct geneve_opt *op geneve->opt_type = opt->type; geneve->obj_id = res; geneve->refcount++; + res =0 ; } unlock:
drivers/nfc/st-nci/se.c +6 -0
@@ -674,6 +674,12 @@ int st_nci_se_io(struct nci_dev *ndev, u32 se_idx,ST_NCI_EVT_TRANSMIT_DATA , apdu, apdu_length);default : +/* Need to free cb_context here as at the moment we can't +* clearly indicate to the caller if the callback function +* would be called (and free it) or not. In both cases a +* negative value may be returned to the caller. +*/ +kfree (cb_context);return -ENODEV ; } }
drivers/nfc/st21nfca/se.c +6 -0
@@ -236,6 +236,12 @@ int st21nfca_hci_se_io(struct nfc_hci_dev *hdev, u32 se_idx,ST21NFCA_EVT_TRANSMIT_DATA , apdu, apdu_length);default : +/* Need to free cb_context here as at the moment we can't +* clearly indicate to the caller if the callback function +* would be called (and free it) or not. In both cases a +* negative value may be returned to the caller. +*/ +kfree (cb_context);return -ENODEV ; } }
drivers/parisc/iosapic.c +1 -1
@@ -677,7 +677,7 @@ static int iosapic_set_affinity_irq(struct irq_data *d,if (dest_cpu <0 )return -1 ; -cpumask_copy (irq_data_get_affinity_mask (d),cpumask_of (dest_cpu)); +irq_data_update_affinity (d,cpumask_of (dest_cpu)); vi->txn_addr =txn_affinity_addr (d->irq, dest_cpu);spin_lock_irqsave (&iosapic_lock, flags);
drivers/pci/controller/pci-loongson.c +36 -35
93 lines not on this page · raw message
drivers/pci/pci.c +10 -0
@@ -5970,6 +5970,7 @@ int pcie_set_readrq(struct pci_dev *dev, int rq) {u16 v;int ret; +struct pci_host_bridge *bridge =pci_find_host_bridge (dev->bus);if (rq <128 || rq >4096 || !is_power_of_2 (rq))return -EINVAL ;
@@ -5988,6 +5989,15 @@ int pcie_set_readrq(struct pci_dev *dev, int rq) v = (ffs (rq) -8 ) <<12 ; +if (bridge->no_inc_mrrs) { +int max_mrrs =pcie_get_readrq (dev); + +if (rq > max_mrrs) { +pci_info (dev,"can't set Max_Read_Request_Size to %d; max is %d\n" , rq, max_mrrs); +return -EINVAL ; + } + } + ret =pcie_capability_clear_and_set_word (dev,PCI_EXP_DEVCTL ,PCI_EXP_DEVCTL_READRQ , v);
drivers/pci/quirks.c +22 -0
@@ -4823,6 +4823,26 @@ static int pci_quirk_brcm_acs(struct pci_dev *dev, u16 acs_flags) PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF); } +/* +* Wangxun 10G/1G NICs have no ACS capability, and on multi-function +* devices, peer-to-peer transactions are not be used between the functions. +* So add an ACS quirk for below devices to isolate functions. +* SFxxx 1G NICs(em). +* RP1000/RP2000 10G NICs(sp). +*/ +static int pci_quirk_wangxun_nic_acs (struct pci_dev *dev,u16 acs_flags) +{ +switch (dev->device) { + case 0x0100 ... 0x010F: +case 0x1001 : +case 0x2001 : +return pci_acs_ctrl_enabled (acs_flags, +PCI_ACS_SV |PCI_ACS_RR |PCI_ACS_CR |PCI_ACS_UF ); + } + +return false; +} + static const struct pci_dev_acs_enabled { u16 vendor; u16 device;
@@ -4968,6 +4988,8 @@ static const struct pci_dev_acs_enabled { { PCI_VENDOR_ID_NXP, 0x8d9b, pci_quirk_nxp_rp_acs },/* Zhaoxin Root/Downstream Ports */ { PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs }, +/* Wangxun nics */ + { PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs }, { 0 } };
drivers/pci/setup-bus.c +114 -65
227 lines not on this page · raw message
drivers/phy/rockchip/phy-rockchip-typec.c +1 -2
@@ -808,9 +808,8 @@ static int tcphy_get_mode(struct rockchip_typec_phy *tcphy)struct extcon_dev *edev = tcphy->extcon;union extcon_property_value property;unsigned int id; -bool ufp, dp;u8 mode; -int ret; +int ret, ufp, dp;if (!edev)return MODE_DFP_USB ;
drivers/pwm/pwm-sifive.c +12 -4
@@ -41,7 +41,7 @@struct pwm_sifive_ddata {struct pwm_chip chip; -struct mutex lock;/* lock to protect user_count */ +struct mutex lock;/* lock to protect user_count and approx_period */ struct notifier_block notifier;struct clk *clk;void __iomem *regs;
@@ -76,6 +76,7 @@ static void pwm_sifive_free(struct pwm_chip *chip, struct pwm_device *pwm)mutex_unlock (&ddata->lock); } +/* Called holding ddata->lock */ static void pwm_sifive_update_clock (struct pwm_sifive_ddata *ddata,unsigned long rate) {
@@ -163,7 +164,6 @@ static int pwm_sifive_apply(struct pwm_chip *chip, struct pwm_device *pwm,return ret; } -mutex_lock (&ddata->lock); cur_state = pwm->state; enabled = cur_state.enabled;
@@ -182,14 +182,23 @@ static int pwm_sifive_apply(struct pwm_chip *chip, struct pwm_device *pwm,/* The hardware cannot generate a 100% duty cycle */ frac =min (frac, (1U <<PWM_SIFIVE_CMPWIDTH ) -1 ); +mutex_lock (&ddata->lock);if (state->period != ddata->approx_period) { -if (ddata->user_count !=1 ) { +/* +* Don't let a 2nd user change the period underneath the 1st user. +* However if ddate->approx_period == 0 this is the first time we set +* any period, so let whoever gets here first set the period so other +* users who agree on the period won't fail. +*/ +if (ddata->user_count !=1 && ddata->approx_period) { +mutex_unlock (&ddata->lock); ret = -EBUSY ; goto exit; } ddata->approx_period = state->period;pwm_sifive_update_clock (ddata,clk_get_rate (ddata->clk)); } +mutex_unlock (&ddata->lock);writel (frac, ddata->regs +PWM_SIFIVE_PWMCMP (pwm->hwpwm));
@@ -198,7 +207,6 @@ static int pwm_sifive_apply(struct pwm_chip *chip, struct pwm_device *pwm, exit:clk_disable (ddata->clk); -mutex_unlock (&ddata->lock);return ret; }
drivers/pwm/pwm-stm32-lp.c +1 -1
@@ -127,7 +127,7 @@ static int stm32_pwm_lp_apply(struct pwm_chip *chip, struct pwm_device *pwm,/* ensure CMP & ARR registers are properly written */ ret =regmap_read_poll_timeout (priv->regmap,STM32_LPTIM_ISR , val, - (val &STM32_LPTIM_CMPOK_ARROK ), + (val &STM32_LPTIM_CMPOK_ARROK ) ==STM32_LPTIM_CMPOK_ARROK ,100 ,1000 );if (ret) {dev_err (priv->chip.dev,"ARR/CMP registers write issue\n" );
drivers/rtc/interface.c +1 -1
@@ -392,7 +392,7 @@ int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)return err;if (!rtc->ops) { err = -ENODEV ; - }else if (!test_bit (RTC_FEATURE_ALARM , rtc->features) || !rtc->ops->read_alarm) { + }else if (!test_bit (RTC_FEATURE_ALARM , rtc->features)) { err = -EINVAL ; }else {memset (alarm,0 ,sizeof (struct rtc_wkalrm ));
drivers/rtc/rtc-sun6i.c +4 -12
@@ -128,7 +128,6 @@ struct sun6i_rtc_clk_data { unsigned int fixed_prescaler : 16; unsigned int has_prescaler : 1; unsigned int has_out_clk : 1; - unsigned int export_iosc : 1; unsigned int has_losc_en : 1; unsigned int has_auto_swt : 1; };
@@ -260,10 +259,8 @@ static void __init sun6i_rtc_clk_init(struct device_node *node,/* Yes, I know, this is ugly. */ sun6i_rtc = rtc; -/* Only read IOSC name from device tree if it is exported */ -if (rtc->data->export_iosc) -of_property_read_string_index (node,"clock-output-names" ,2 , - &iosc_name); +of_property_read_string_index (node,"clock-output-names" ,2 , + &iosc_name); rtc->int_osc = clk_hw_register_fixed_rate_with_accuracy(NULL, iosc_name,
@@ -304,13 +301,10 @@ static void __init sun6i_rtc_clk_init(struct device_node *node, goto err_register; } - clk_data->num =2 ; + clk_data->num =3 ; clk_data->hws[0 ] = &rtc->hw; clk_data->hws[1 ] =__clk_get_hw (rtc->ext_losc); -if (rtc->data->export_iosc) { - clk_data->hws[2 ] = rtc->int_osc; - clk_data->num =3 ; - } + clk_data->hws[2 ] = rtc->int_osc;of_clk_add_hw_provider (node, of_clk_hw_onecell_get, clk_data);return ;
@@ -350,7 +344,6 @@ static const struct sun6i_rtc_clk_data sun8i_h3_rtc_data = { .fixed_prescaler = 32, .has_prescaler = 1, .has_out_clk = 1, - .export_iosc = 1, };static void __init sun8i_h3_rtc_clk_init (struct device_node *node)
@@ -368,7 +361,6 @@ static const struct sun6i_rtc_clk_data sun50i_h6_rtc_data = { .fixed_prescaler = 32, .has_prescaler = 1, .has_out_clk = 1, - .export_iosc = 1, .has_losc_en = 1, .has_auto_swt = 1, };
drivers/scsi/ipr.c +21 -20
63 lines not on this page · raw message
drivers/scsi/mpt3sas/mpt3sas_base.c +13 -7
@@ -2990,19 +2990,25 @@ static int _base_config_dma_addressing(struct MPT3SAS_ADAPTER *ioc, struct pci_dev *pdev) { struct sysinfo s; +u64 coherent_dma_mask, dma_mask; -if (ioc->is_mcpu_endpoint || -sizeof (dma_addr_t) ==4 || ioc->use_32bit_dma || -dma_get_required_mask (&pdev->dev) <=DMA_BIT_MASK (32 )) +if (ioc->is_mcpu_endpoint ||sizeof (dma_addr_t) ==4 ) { ioc->dma_mask =32 ; + coherent_dma_mask = dma_mask =DMA_BIT_MASK (32 );/* Set 63 bit DMA mask for all SAS3 and SAS35 controllers */ -else if (ioc->hba_mpi_version_belonged >MPI2_VERSION ) + }else if (ioc->hba_mpi_version_belonged >MPI2_VERSION ) { ioc->dma_mask =63 ; -else + coherent_dma_mask = dma_mask =DMA_BIT_MASK (63 ); + }else { ioc->dma_mask =64 ; + coherent_dma_mask = dma_mask =DMA_BIT_MASK (64 ); + } + +if (ioc->use_32bit_dma) + coherent_dma_mask =DMA_BIT_MASK (32 ); -if (dma_set_mask (&pdev->dev,DMA_BIT_MASK (ioc->dma_mask)) || -dma_set_coherent_mask (&pdev->dev,DMA_BIT_MASK (ioc->dma_mask))) +if (dma_set_mask (&pdev->dev, dma_mask) || +dma_set_coherent_mask (&pdev->dev, coherent_dma_mask))return -ENODEV ;if (ioc->dma_mask >32 ) {
drivers/sh/intc/chip.c +1 -1
@@ -72,7 +72,7 @@ static int intc_set_affinity(struct irq_data *data,if (!cpumask_intersects (cpumask, cpu_online_mask))return -1 ; -cpumask_copy (irq_data_get_affinity_mask (data), cpumask); +irq_data_update_affinity (data, cpumask);return IRQ_SET_MASK_OK_NOCOPY ; }
drivers/soundwire/bus_type.c +3 -6
@@ -105,20 +105,19 @@ static int sdw_drv_probe(struct device *dev)if (ret)return ret; -mutex_lock (&slave->sdw_dev_lock); - ret = drv->probe (slave, id);if (ret) { name = drv->name;if (!name) name = drv->driver.name; -mutex_unlock (&slave->sdw_dev_lock);dev_err (dev,"Probe of %s failed: %d\n" , name, ret);dev_pm_domain_detach (dev, false);return ret; } +mutex_lock (&slave->sdw_dev_lock); +/* device is probed so let's read the properties now */ if (drv->ops && drv->ops->read_prop) drv->ops->read_prop (slave);
@@ -167,14 +166,12 @@ static int sdw_drv_remove(struct device *dev)int ret =0 ;mutex_lock (&slave->sdw_dev_lock); - slave->probed = false; +mutex_unlock (&slave->sdw_dev_lock);if (drv->remove) ret = drv->remove (slave); -mutex_unlock (&slave->sdw_dev_lock); -dev_pm_domain_detach (dev, false);return ret;
drivers/soundwire/cadence_master.c +27 -16
61 lines not on this page · raw message
drivers/soundwire/cadence_master.h +12 -1
@@ -8,6 +8,12 @@#define SDW_CADENCE_GSYNC_KHZ 4/* 4 kHz */ #define SDW_CADENCE_GSYNC_HZ (SDW_CADENCE_GSYNC_KHZ * 1000) +/* +* The Cadence IP supports up to 32 entries in the FIFO, though implementations +* can configure the IP to have a smaller FIFO. +*/ +#define CDNS_MCP_IP_MAX_CMD_LEN 32 +/** * struct sdw_cdns_pdi: PDI (Physical Data Interface) instance *
@@ -119,7 +125,12 @@ struct sdw_cdns {struct sdw_bus bus;unsigned int instance; -u32 response_buf[0x80 ]; +/* +* The datasheet says the RX FIFO AVAIL can be 2 entries more +* than the FIFO capacity, so allow for this. +*/ +u32 response_buf[CDNS_MCP_IP_MAX_CMD_LEN +2 ]; +struct completion tx_complete;struct sdw_defer *defer;
drivers/staging/emxx_udc/emxx_udc.c +6 -1
@@ -2590,10 +2590,15 @@ static int nbu2ss_ep_queue(struct usb_ep *_ep, req->unaligned = false;if (req->unaligned) { -if (!ep->virt_buf) +if (!ep->virt_buf) { ep->virt_buf =dma_alloc_coherent (udc->dev,PAGE_SIZE , &ep->phys_buf,GFP_ATOMIC |GFP_DMA ); +if (!ep->virt_buf) { +spin_unlock_irqrestore (&udc->lock, flags); +return -ENOMEM ; + } + }if (ep->epnum >0 ) {if (ep->direct ==USB_DIR_IN ) memcpy(ep->virt_buf, req->req.buf,
drivers/thermal/intel/Kconfig +2 -1
@@ -64,7 +64,8 @@ endmenu config INTEL_BXT_PMIC_THERMAL tristate "Intel Broxton PMIC thermal driver" - depends on X86 && INTEL_SOC_PMIC_BXTWC && REGMAP + depends on X86 && INTEL_SOC_PMIC_BXTWC + select REGMAP help Select this driver for Intel Broxton PMIC with ADC channels monitoring system temperature measurements and alerts.
drivers/thermal/intel/intel_quark_dts_thermal.c +2 -10
@@ -415,22 +415,14 @@ MODULE_DEVICE_TABLE(x86cpu, qrk_thermal_ids);static int __init intel_quark_thermal_init (void ) { -int err =0 ; -if (!x86_match_cpu (qrk_thermal_ids) || !iosf_mbi_available ())return -ENODEV ; soc_dts =alloc_soc_dts (); -if (IS_ERR (soc_dts)) { - err =PTR_ERR (soc_dts); - goto err_free; - } +if (IS_ERR (soc_dts)) +return PTR_ERR (soc_dts);return 0 ; - -err_free: -free_soc_dts (soc_dts); -return err; } static void __exit intel_quark_thermal_exit(void)
drivers/tty/serial/fsl_lpuart.c +22 -2
@@ -1484,12 +1484,32 @@ static void lpuart_break_ctl(struct uart_port *port, int break_state)static void lpuart32_break_ctl (struct uart_port *port,int break_state) { -unsigned long temp; +unsigned long temp, modem; +struct tty_struct *tty; +unsigned int cflag =0 ; + + tty =tty_port_tty_get (&port->state->port); +if (tty) { + cflag = tty->termios.c_cflag; +tty_kref_put (tty); + } temp =lpuart32_read (port,UARTCTRL ) & ~UARTCTRL_SBK ; + modem =lpuart32_read (port,UARTMODIR ); -if (break_state !=0 ) +if (break_state !=0 ) { temp |=UARTCTRL_SBK ; +/* +* LPUART CTS has higher priority than SBK, need to disable CTS before +* asserting SBK to avoid any interference if flow control is enabled. +*/ +if (cflag &CRTSCTS && modem &UARTMODIR_TXCTSE ) +lpuart32_write (port, modem & ~UARTMODIR_TXCTSE ,UARTMODIR ); + }else { +/* Re-enable the CTS when break off. */ +if (cflag &CRTSCTS && !(modem &UARTMODIR_TXCTSE )) +lpuart32_write (port, modem |UARTMODIR_TXCTSE ,UARTMODIR ); + }lpuart32_write (port, temp,UARTCTRL ); }
drivers/tty/serial/pch_uart.c +1 -1
@@ -1821,7 +1821,7 @@ static void pch_uart_exit_port(struct eg20t_port *priv)char name[32 ];snprintf (name,sizeof (name),"uart%d_regs" , priv->port.line); -debugfs_remove (debugfs_lookup (name,NULL )); +debugfs_lookup_and_remove (name,NULL );uart_remove_one_port (&pch_uart_driver, &priv->port);free_page ((unsigned long )priv->rxbuf.buf); }
drivers/tty/serial/sc16is7xx.c +26 -25
75 lines not on this page · raw message
drivers/tty/tty_io.c +5 -3
@@ -1244,14 +1244,16 @@ static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver, {struct tty_struct *tty; -if (driver->ops->lookup) +if (driver->ops->lookup) {if (!file) tty =ERR_PTR (-EIO );else tty = driver->ops->lookup (driver, file, idx); -else + }else { +if (idx >= driver->num) +return ERR_PTR (-EINVAL ); tty = driver->ttys[idx]; - + }if (!IS_ERR (tty))tty_kref_get (tty);return tty;
drivers/tty/vt/vc_screen.c +1 -3
@@ -415,10 +415,8 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/ size =vcs_size (vc, attr, uni_mode);if (size <0 ) { -if (read) -break ; ret = size; - goto unlock_out; +break ; }if (pos >= size)break ;
drivers/usb/chipidea/debug.c +1 -1
@@ -364,5 +364,5 @@ void dbg_create_files(struct ci_hdrc *ci)*/ void dbg_remove_files (struct ci_hdrc *ci) { -debugfs_remove (debugfs_lookup (dev_name (ci->dev), usb_debug_root)); +debugfs_lookup_and_remove (dev_name (ci->dev), usb_debug_root); }
drivers/usb/core/usb.c +1 -1
@@ -1036,7 +1036,7 @@ static void usb_debugfs_init(void)static void usb_debugfs_cleanup (void ) { -debugfs_remove (debugfs_lookup ("devices" , usb_debug_root)); +debugfs_lookup_and_remove ("devices" , usb_debug_root); }/*
drivers/usb/dwc3/core.h +2 -0
@@ -1092,6 +1092,7 @@ struct dwc3_scratchpad_array {* address. * @num_ep_resized: carries the current number endpoints which have had its tx * fifo resized. +* @debug_root: root debugfs directory for this device to put its files in. */ struct dwc3 {struct work_struct drd_work;
@@ -1303,6 +1304,7 @@ struct dwc3 {int max_cfg_eps;int last_fifo_depth;int num_ep_resized; +struct dentry *debug_root; };#define INCRX_BURST_MODE 0
drivers/usb/dwc3/debug.h +3 -0
@@ -414,11 +414,14 @@ static inline const char *dwc3_gadget_generic_cmd_status_string(int status)#ifdef CONFIG_DEBUG_FS extern void dwc3_debugfs_create_endpoint_dir (struct dwc3_ep *dep); +extern void dwc3_debugfs_remove_endpoint_dir (struct dwc3_ep *dep);extern void dwc3_debugfs_init (struct dwc3 *d);extern void dwc3_debugfs_exit (struct dwc3 *d);#else static inline void dwc3_debugfs_create_endpoint_dir (struct dwc3_ep *dep) { } +static inline void dwc3_debugfs_remove_endpoint_dir (struct dwc3_ep *dep) +{ }static inline void dwc3_debugfs_init (struct dwc3 *d) { }static inline void dwc3_debugfs_exit (struct dwc3 *d)
drivers/usb/dwc3/debugfs.c +8 -11
@@ -873,27 +873,23 @@ static const struct dwc3_ep_file_map dwc3_ep_file_map[] = { { "GDBGEPINFO", &dwc3_ep_info_register_fops, }, }; -static void dwc3_debugfs_create_endpoint_files (struct dwc3_ep *dep, -struct dentry *parent) +void dwc3_debugfs_create_endpoint_dir (struct dwc3_ep *dep) { +struct dentry *dir;int i; + dir =debugfs_create_dir (dep->name, dep->dwc->debug_root);for (i =0 ; i <ARRAY_SIZE (dwc3_ep_file_map); i++) {const struct file_operations *fops = dwc3_ep_file_map[i].fops;const char *name = dwc3_ep_file_map[i].name; -debugfs_create_file (name,0444 , parent, dep, fops); +debugfs_create_file (name,0444 , dir, dep, fops); } } -void dwc3_debugfs_create_endpoint_dir (struct dwc3_ep *dep) +void dwc3_debugfs_remove_endpoint_dir (struct dwc3_ep *dep) { -struct dentry *dir; -struct dentry *root; - - root =debugfs_lookup (dev_name (dep->dwc->dev), usb_debug_root); - dir =debugfs_create_dir (dep->name, root); -dwc3_debugfs_create_endpoint_files (dep, dir); +debugfs_lookup_and_remove (dep->name, dep->dwc->debug_root); }void dwc3_debugfs_init (struct dwc3 *dwc)
@@ -911,6 +907,7 @@ void dwc3_debugfs_init(struct dwc3 *dwc) dwc->regset->base = dwc->regs -DWC3_GLOBALS_REGS_START ; root =debugfs_create_dir (dev_name (dwc->dev), usb_debug_root); + dwc->debug_root = root;debugfs_create_regset32 ("regdump" ,0444 , root, dwc->regset);debugfs_create_file ("lsp_dump" ,0644 , root, dwc, &dwc3_lsp_fops);
@@ -929,6 +926,6 @@ void dwc3_debugfs_init(struct dwc3 *dwc)void dwc3_debugfs_exit (struct dwc3 *dwc) { -debugfs_remove (debugfs_lookup (dev_name (dwc->dev), usb_debug_root)); +debugfs_lookup_and_remove (dev_name (dwc->dev), usb_debug_root);kfree (dwc->regset); }
drivers/usb/dwc3/gadget.c +1 -3
@@ -3081,9 +3081,7 @@ static void dwc3_gadget_free_endpoints(struct dwc3 *dwc)list_del (&dep->endpoint.ep_list); } -debugfs_remove_recursive (debugfs_lookup (dep->name, -debugfs_lookup (dev_name (dep->dwc->dev), - usb_debug_root))); +dwc3_debugfs_remove_endpoint_dir (dep);kfree (dep); } }
drivers/usb/gadget/function/uvc_configfs.c +58 -1
69 lines not on this page · raw message
drivers/usb/gadget/udc/bcm63xx_udc.c +1 -1
@@ -2259,7 +2259,7 @@ static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc *udc)*/ static void bcm63xx_udc_cleanup_debugfs (struct bcm63xx_udc *udc) { -debugfs_remove (debugfs_lookup (udc->gadget.name, usb_debug_root)); +debugfs_lookup_and_remove (udc->gadget.name, usb_debug_root); }/***********************************************************************
drivers/usb/gadget/udc/gr_udc.c +1 -1
@@ -215,7 +215,7 @@ static void gr_dfs_create(struct gr_udc *dev)static void gr_dfs_delete (struct gr_udc *dev) { -debugfs_remove (debugfs_lookup (dev_name (dev->dev), usb_debug_root)); +debugfs_lookup_and_remove (dev_name (dev->dev), usb_debug_root); }#else /* !CONFIG_USB_GADGET_DEBUG_FS */
drivers/usb/gadget/udc/lpc32xx_udc.c +1 -1
@@ -532,7 +532,7 @@ static void create_debug_file(struct lpc32xx_udc *udc)static void remove_debug_file (struct lpc32xx_udc *udc) { -debugfs_remove (debugfs_lookup (debug_filename,NULL )); +debugfs_lookup_and_remove (debug_filename,NULL ); }#else
drivers/usb/gadget/udc/pxa25x_udc.c +1 -1
@@ -1341,7 +1341,7 @@ DEFINE_SHOW_ATTRIBUTE(udc_debug);debugfs_create_file (dev->gadget.name, \S_IRUGO ,NULL , dev, &udc_debug_fops); \ } while (0) -#define remove_debug_files (dev) debugfs_remove(debugfs_lookup(dev->gadget.name, NULL)) +#define remove_debug_files (dev) debugfs_lookup_and_remove(dev->gadget.name, NULL)#else /* !CONFIG_USB_GADGET_DEBUG_FILES */
drivers/usb/gadget/udc/pxa27x_udc.c +1 -1
@@ -215,7 +215,7 @@ static void pxa_init_debugfs(struct pxa_udc *udc)static void pxa_cleanup_debugfs (struct pxa_udc *udc) { -debugfs_remove (debugfs_lookup (udc->gadget.name, usb_debug_root)); +debugfs_lookup_and_remove (udc->gadget.name, usb_debug_root); }#else
drivers/usb/host/fotg210-hcd.c +1 -1
@@ -862,7 +862,7 @@ static inline void remove_debug_files(struct fotg210_hcd *fotg210) {struct usb_bus *bus = &fotg210_to_hcd (fotg210)->self; -debugfs_remove (debugfs_lookup (bus->bus_name, fotg210_debug_root)); +debugfs_lookup_and_remove (bus->bus_name, fotg210_debug_root); }/* handshake - spin reading hc until handshake completes or fails
drivers/usb/host/isp116x-hcd.c +1 -1
@@ -1206,7 +1206,7 @@ static void create_debug_file(struct isp116x *isp116x)static void remove_debug_file (struct isp116x *isp116x) { -debugfs_remove (debugfs_lookup (hcd_name, usb_debug_root)); +debugfs_lookup_and_remove (hcd_name, usb_debug_root); }#else
drivers/usb/host/isp1362-hcd.c +1 -1
@@ -2170,7 +2170,7 @@ static void create_debug_file(struct isp1362_hcd *isp1362_hcd)static void remove_debug_file (struct isp1362_hcd *isp1362_hcd) { -debugfs_remove (debugfs_lookup ("isp1362" , usb_debug_root)); +debugfs_lookup_and_remove ("isp1362" , usb_debug_root); }/*-------------------------------------------------------------------------*/
drivers/usb/host/sl811-hcd.c +1 -1
@@ -1501,7 +1501,7 @@ static void create_debug_file(struct sl811 *sl811)static void remove_debug_file (struct sl811 *sl811) { -debugfs_remove (debugfs_lookup ("sl811h" , usb_debug_root)); +debugfs_lookup_and_remove ("sl811h" , usb_debug_root); }/*-------------------------------------------------------------------------*/
drivers/usb/host/uhci-hcd.c +3 -3
@@ -536,8 +536,8 @@ static void release_uhci(struct uhci_hcd *uhci) uhci->is_initialized =0 ;spin_unlock_irq (&uhci->lock); -debugfs_remove (debugfs_lookup (uhci_to_hcd (uhci)->self.bus_name, - uhci_debugfs_root)); +debugfs_lookup_and_remove (uhci_to_hcd (uhci)->self.bus_name, + uhci_debugfs_root);for (i =0 ; i <UHCI_NUM_SKELQH ; i++)uhci_free_qh (uhci, uhci->skelqh[i]);
@@ -700,7 +700,7 @@ static int uhci_start(struct usb_hcd *hcd) uhci->frame, uhci->frame_dma_handle); err_alloc_frame: -debugfs_remove (debugfs_lookup (hcd->self.bus_name, uhci_debugfs_root)); +debugfs_lookup_and_remove (hcd->self.bus_name, uhci_debugfs_root);return retval; }
drivers/usb/host/xhci-mvebu.c +1 -1
@@ -33,7 +33,7 @@ static void xhci_mvebu_mbus_config(void __iomem *base,/* Program each DRAM CS in a seperate window */ for (win =0 ; win < dram->num_cs; win++) { -const struct mbus_dram_window *cs = dram->cs + win; +const struct mbus_dram_window *cs = &dram->cs[win]; writel(((cs->size - 1) & 0xffff0000) | (cs->mbus_attr << 8) | (dram->mbus_dram_target_id << 4) | 1,
drivers/usb/storage/ene_ub6250.c +1 -1
@@ -939,7 +939,7 @@ static int ms_lib_process_bootblock(struct us_data *us, u16 PhyBlock, u8 *PageDastruct ms_lib_type_extdat ExtraData;struct ene_ub6250_info *info = (struct ene_ub6250_info *) us->extra; - PageBuffer =kmalloc (MS_BYTES_PER_PAGE ,GFP_KERNEL ); + PageBuffer =kzalloc (MS_BYTES_PER_PAGE *2 ,GFP_KERNEL );if (PageBuffer ==NULL )return (u32)-1 ;
drivers/watchdog/at91sam9_wdt.c +3 -4
@@ -206,10 +206,9 @@ static int at91_wdt_init(struct platform_device *pdev, struct at91wdt *wdt) "min heartbeat and max heartbeat might be too close for the system to handle it correctly\n");if ((tmp &AT91_WDT_WDFIEN ) && wdt->irq) { - err =request_irq (wdt->irq, wdt_interrupt, -IRQF_SHARED |IRQF_IRQPOLL | -IRQF_NO_SUSPEND , - pdev->name, wdt); + err =devm_request_irq (dev, wdt->irq, wdt_interrupt, +IRQF_SHARED |IRQF_IRQPOLL |IRQF_NO_SUSPEND , + pdev->name, wdt);if (err)return err; }
drivers/watchdog/pcwd_usb.c +4 -2
@@ -325,7 +325,8 @@ static int usb_pcwd_set_heartbeat(struct usb_pcwd_private *usb_pcwd, int t)static int usb_pcwd_get_temperature (struct usb_pcwd_private *usb_pcwd,int *temperature) { -unsigned char msb, lsb; +unsigned char msb =0x00 ; +unsigned char lsb =0x00 ;usb_pcwd_send_command (usb_pcwd,CMD_READ_TEMP , &msb, &lsb);
@@ -341,7 +342,8 @@ static int usb_pcwd_get_temperature(struct usb_pcwd_private *usb_pcwd,static int usb_pcwd_get_timeleft (struct usb_pcwd_private *usb_pcwd,int *time_left) { -unsigned char msb, lsb; +unsigned char msb =0x00 ; +unsigned char lsb =0x00 ;/* Read the time that's left before rebooting */ /* Note: if the board is not yet armed then we will read 0xFFFF */
drivers/watchdog/sbsa_gwdt.c +1 -0
@@ -150,6 +150,7 @@ static int sbsa_gwdt_set_timeout(struct watchdog_device *wdd,struct sbsa_gwdt *gwdt =watchdog_get_drvdata (wdd); wdd->timeout = timeout; + timeout = clamp_t(unsigned int, timeout, 1, wdd->max_hw_heartbeat_ms / 1000);if (action)sbsa_gwdt_reg_write (gwdt->clk * timeout, gwdt);
drivers/watchdog/watchdog_dev.c +1 -1
@@ -1044,8 +1044,8 @@ static int watchdog_cdev_register(struct watchdog_device *wdd)if (wdd->id ==0 ) {misc_deregister (&watchdog_miscdev); old_wd_data =NULL ; -put_device (&wd_data->dev); } +put_device (&wd_data->dev);return err; }
drivers/xen/events/events_base.c +4 -3
@@ -528,9 +528,10 @@ static void bind_evtchn_to_cpu(evtchn_port_t evtchn, unsigned int cpu,BUG_ON (irq ==-1 );if (IS_ENABLED (CONFIG_SMP ) && force_affinity) { -cpumask_copy (irq_get_affinity_mask (irq),cpumask_of (cpu)); -cpumask_copy (irq_get_effective_affinity_mask (irq), -cpumask_of (cpu)); +struct irq_data *data =irq_get_irq_data (irq); + +irq_data_update_affinity (data,cpumask_of (cpu)); +irq_data_update_effective_affinity (data,cpumask_of (cpu)); }xen_evtchn_port_bind_to_cpu (evtchn, cpu, info->cpu);
fs/ext4/fast_commit.c +26 -18
103 lines not on this page · raw message
fs/f2fs/file.c +1 -1
@@ -3928,7 +3928,7 @@ static int f2fs_ioc_set_compress_option(struct file *filp, unsigned long arg) goto out; } -if (inode->i_size !=0 ) { +if (F2FS_HAS_BLOCKS (inode)) { ret = -EFBIG ; goto out; }
fs/f2fs/inline.c +4 -11
@@ -64,7 +64,6 @@ bool f2fs_may_inline_dentry(struct inode *inode)void f2fs_do_read_inline_data (struct page *page,struct page *ipage) {struct inode *inode = page->mapping->host; -void *src_addr, *dst_addr;if (PageUptodate (page))return ;
@@ -74,11 +73,8 @@ void f2fs_do_read_inline_data(struct page *page, struct page *ipage)zero_user_segment (page,MAX_INLINE_DATA (inode),PAGE_SIZE );/* Copy the whole inline data block */ - src_addr =inline_data_addr (inode, ipage); - dst_addr =kmap_atomic (page); -memcpy (dst_addr, src_addr,MAX_INLINE_DATA (inode)); -flush_dcache_page (page); -kunmap_atomic (dst_addr); +memcpy_to_page (page,0 ,inline_data_addr (inode, ipage), +MAX_INLINE_DATA (inode));if (!PageUptodate (page))SetPageUptodate (page); }
@@ -246,7 +242,6 @@ int f2fs_convert_inline_inode(struct inode *inode)int f2fs_write_inline_data (struct inode *inode,struct page *page) { -void *src_addr, *dst_addr;struct dnode_of_data dn;int err;
@@ -263,10 +258,8 @@ int f2fs_write_inline_data(struct inode *inode, struct page *page)f2fs_bug_on (F2FS_I_SB (inode), page->index);f2fs_wait_on_page_writeback (dn.inode_page,NODE , true, true); - src_addr =kmap_atomic (page); - dst_addr =inline_data_addr (inode, dn.inode_page); -memcpy (dst_addr, src_addr,MAX_INLINE_DATA (inode)); -kunmap_atomic (src_addr); +memcpy_from_page (inline_data_addr (inode, dn.inode_page), + page,0 ,MAX_INLINE_DATA (inode));set_page_dirty (dn.inode_page);f2fs_clear_page_cache_dirty_tag (page);
fs/f2fs/iostat.c +5 -1
@@ -194,8 +194,12 @@ static inline void __update_iostat_latency(struct bio_iostat_ctx *iostat_ctx,return ; ts_diff = jiffies - iostat_ctx->submit_ts; -if (iotype >=META_FLUSH ) +if (iotype ==META_FLUSH ) { iotype =META ; + }else if (iotype >=NR_PAGE_TYPE ) { +f2fs_warn (sbi,"%s: %d over NR_PAGE_TYPE" , __func__, iotype); +return ; + }if (rw ==0 ) { idx =READ_IO ;
fs/f2fs/super.c +2 -9
@@ -2442,7 +2442,6 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,size_t toread;loff_t i_size =i_size_read (inode);struct page *page; -char *kaddr;if (off > i_size)return 0 ;
@@ -2476,9 +2475,7 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,return -EIO ; } - kaddr =kmap_atomic (page); -memcpy (data, kaddr + offset, tocopy); -kunmap_atomic (kaddr); +memcpy_from_page (data, page, offset, tocopy);f2fs_put_page (page,1 ); offset =0 ;
@@ -2500,7 +2497,6 @@ static ssize_t f2fs_quota_write(struct super_block *sb, int type,size_t towrite = len;struct page *page;void *fsdata =NULL ; -char *kaddr;int err =0 ;int tocopy;
@@ -2520,10 +2516,7 @@ static ssize_t f2fs_quota_write(struct super_block *sb, int type,break ; } - kaddr =kmap_atomic (page); -memcpy (kaddr + offset, data, tocopy); -kunmap_atomic (kaddr); -flush_dcache_page (page); +memcpy_to_page (page, offset, data, tocopy); a_ops->write_end (NULL , mapping, off, tocopy, tocopy, page, fsdata);
fs/f2fs/verity.c +3 -9
@@ -47,16 +47,13 @@ static int pagecache_read(struct inode *inode, void *buf, size_t count,size_t n =min_t (size_t, count,PAGE_SIZE -offset_in_page (pos));struct page *page; -void *addr; page =read_mapping_page (inode->i_mapping, pos >>PAGE_SHIFT ,NULL );if (IS_ERR (page))return PTR_ERR (page); - addr =kmap_atomic (page); -memcpy (buf, addr +offset_in_page (pos), n); -kunmap_atomic (addr); +memcpy_from_page (buf, page,offset_in_page (pos), n);put_page (page);
@@ -81,8 +78,7 @@ static int pagecache_write(struct inode *inode, const void *buf, size_t count,size_t n =min_t (size_t, count,PAGE_SIZE -offset_in_page (pos));struct page *page; -void *fsdata; -void *addr; +void *fsdata =NULL ;int res; res = pagecache_write_begin(NULL, inode->i_mapping, pos, n, 0,
@@ -90,9 +86,7 @@ static int pagecache_write(struct inode *inode, const void *buf, size_t count,if (res)return res; - addr =kmap_atomic (page); -memcpy (addr +offset_in_page (pos), buf, n); -kunmap_atomic (addr); +memcpy_to_page (page,offset_in_page (pos), buf, n); res =pagecache_write_end (NULL , inode->i_mapping, pos, n, n, page, fsdata);
fs/jfs/jfs_dmap.c +2 -1
@@ -193,7 +193,8 @@ int dbMount(struct inode *ipbmap) bmp->db_agwidth =le32_to_cpu (dbmp_le->dn_agwidth); bmp->db_agstart =le32_to_cpu (dbmp_le->dn_agstart); bmp->db_agl2size =le32_to_cpu (dbmp_le->dn_agl2size); -if (bmp->db_agl2size >L2MAXL2SIZE -L2MAXAG ) { +if (bmp->db_agl2size >L2MAXL2SIZE -L2MAXAG || + bmp->db_agl2size <0 ) { err = -EINVAL ; goto err_release_metapage; }
fs/ubifs/budget.c +4 -5
@@ -212,11 +212,10 @@ long long ubifs_calc_available(const struct ubifs_info *c, int min_idx_lebs) subtract_lebs +=1 ;/* -* The GC journal head LEB is not really accessible. And since -* different write types go to different heads, we may count only on -* one head's space. +* Since different write types go to different heads, we should +* reserve one leb for each head. */ - subtract_lebs += c->jhead_cnt -1 ; + subtract_lebs += c->jhead_cnt;/* We also reserve one LEB for deletions, which bypass budgeting */ subtract_lebs +=1 ;
@@ -403,7 +402,7 @@ static int calc_dd_growth(const struct ubifs_info *c, dd_growth = req->dirtied_page ? c->bi.page_budget :0 ;if (req->dirtied_ino) - dd_growth += c->bi.inode_budget << (req->dirtied_ino -1 ); + dd_growth += c->bi.inode_budget * req->dirtied_ino;if (req->mod_dent) dd_growth += c->bi.dent_budget; dd_growth += req->dirtied_ino_d;
fs/ubifs/dir.c +8 -1
@@ -1147,7 +1147,6 @@ static int ubifs_symlink(struct user_namespace *mnt_userns, struct inode *dir,int err, sz_change, len =strlen (symname);struct fscrypt_str disk_link;struct ubifs_budget_req req = { .new_ino =1 , .new_dent =1 , - .new_ino_d =ALIGN (len,8 ), .dirtied_ino =1 };struct fscrypt_name nm;
@@ -1163,6 +1162,7 @@ static int ubifs_symlink(struct user_namespace *mnt_userns, struct inode *dir,* Budget request settings: new inode, new direntry and changing parent * directory inode. */ + req.new_ino_d =ALIGN (disk_link.len -1 ,8 ); err =ubifs_budget_space (c, &req);if (err)return err;
@@ -1320,6 +1320,8 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,if (unlink) {ubifs_assert (c,inode_is_locked (new_inode)); +/* Budget for old inode's data when its nlink > 1. */ + req.dirtied_ino_d =ALIGN (ubifs_inode (new_inode)->data_len,8 ); err =ubifs_purge_xattrs (new_inode);if (err)return err;
@@ -1572,6 +1574,10 @@ static int ubifs_xrename(struct inode *old_dir, struct dentry *old_dentry,return err; } + err =ubifs_budget_space (c, &req); +if (err) + goto out; +lock_4_inodes (old_dir, new_dir,NULL ,NULL ); time =current_time (old_dir);
@@ -1597,6 +1603,7 @@ static int ubifs_xrename(struct inode *old_dir, struct dentry *old_dentry,unlock_4_inodes (old_dir, new_dir,NULL ,NULL );ubifs_release_budget (c, &req); +out:fscrypt_free_filename (&fst_nm);fscrypt_free_filename (&snd_nm);return err;
fs/ubifs/file.c +9 -3
@@ -1031,7 +1031,7 @@ static int ubifs_writepage(struct page *page, struct writeback_control *wbc)if (page->index >= synced_i_size >>PAGE_SHIFT ) { err = inode->i_sb->s_op->write_inode (inode,NULL );if (err) - goto out_unlock; + goto out_redirty;/* * The inode has been written, but the write-buffer has * not been synchronized, so in case of an unclean
@@ -1059,11 +1059,17 @@ static int ubifs_writepage(struct page *page, struct writeback_control *wbc)if (i_size > synced_i_size) { err = inode->i_sb->s_op->write_inode (inode,NULL );if (err) - goto out_unlock; + goto out_redirty; }return do_writepage (page, len); - +out_redirty: +/* +* redirty_page_for_writepage() won't call ubifs_dirty_inode() because +* it passes I_DIRTY_PAGES flag while calling __mark_inode_dirty(), so +* there is no need to do space budget for dirty inode. +*/ +redirty_page_for_writepage (wbc, page); out_unlock:unlock_page (page);return err;
fs/ubifs/super.c +13 -4
@@ -833,7 +833,7 @@ static int alloc_wbufs(struct ubifs_info *c)INIT_LIST_HEAD (&c->jheads[i].buds_list); err =ubifs_wbuf_init (c, &c->jheads[i].wbuf);if (err) -return err; + goto out_wbuf; c->jheads[i].wbuf.sync_callback = &bud_wbuf_callback; c->jheads[i].wbuf.jhead = i;
@@ -841,7 +841,7 @@ static int alloc_wbufs(struct ubifs_info *c) c->jheads[i].log_hash =ubifs_hash_get_desc (c);if (IS_ERR (c->jheads[i].log_hash)) { err =PTR_ERR (c->jheads[i].log_hash); - goto out; + goto out_log_hash; } }
@@ -854,9 +854,18 @@ static int alloc_wbufs(struct ubifs_info *c)return 0 ; -out: -while (i--) +out_log_hash: +kfree (c->jheads[i].wbuf.buf); +kfree (c->jheads[i].wbuf.inodes); + +out_wbuf: +while (i--) { +kfree (c->jheads[i].wbuf.buf); +kfree (c->jheads[i].wbuf.inodes);kfree (c->jheads[i].log_hash); + } +kfree (c->jheads); + c->jheads =NULL ;return err; }
fs/ubifs/tnc.c +23 -1
@@ -267,11 +267,18 @@ static struct ubifs_znode *dirty_cow_znode(struct ubifs_info *c,if (zbr->len) { err =insert_old_idx (c, zbr->lnum, zbr->offs);if (unlikely (err)) -return ERR_PTR (err); +/* +* Obsolete znodes will be freed by tnc_destroy_cnext() +* or free_obsolete_znodes(), copied up znodes should +* be added back to tnc and freed by +* ubifs_destroy_tnc_subtree(). +*/ + goto out; err =add_idx_dirt (c, zbr->lnum, zbr->len); }else err =0 ; +out: zbr->znode = zn; zbr->lnum =0 ; zbr->offs =0 ;
@@ -3053,6 +3060,21 @@ static void tnc_destroy_cnext(struct ubifs_info *c) cnext = cnext->cnext;if (ubifs_zn_obsolete (znode))kfree (znode); +else if (!ubifs_zn_cow (znode)) { +/* +* Don't forget to update clean znode count after +* committing failed, because ubifs will check this +* count while closing tnc. Non-obsolete znode could +* be re-dirtied during committing process, so dirty +* flag is untrustable. The flag 'COW_ZNODE' is set +* for each dirty znode before committing, and it is +* cleared as long as the znode become clean, so we +* can statistic clean znode count according to this +* flag. +*/ +atomic_long_inc (&c->clean_zn_cnt); +atomic_long_inc (&ubifs_clean_zn_cnt); + } }while (cnext && cnext != c->cnext); }
fs/ubifs/ubifs.h +5 -0
@@ -1594,8 +1594,13 @@ static inline int ubifs_check_hmac(const struct ubifs_info *c,return crypto_memneq (expected, got, c->hmac_desc_len); } +#ifdef CONFIG_UBIFS_FS_AUTHENTICATION void ubifs_bad_hash (const struct ubifs_info *c,const void *node,const u8 *hash,int lnum,int offs); +#else +static inline void ubifs_bad_hash (const struct ubifs_info *c,const void *node, +const u8 *hash,int lnum,int offs) {}; +#endif int __ubifs_node_check_hash (const struct ubifs_info *c,const void *buf,const u8 *expected);
include/linux/bootconfig.h +1 -1
@@ -49,7 +49,7 @@ struct xbc_node {/* Maximum size of boot config is 32KB - 1 */ #define XBC_DATA_MAX (XBC_VALUE - 1) -#define XBC_NODE_MAX 1024 +#define XBC_NODE_MAX 8192#define XBC_KEYLEN_MAX 256#define XBC_DEPTH_MAX 16
include/linux/irq.h +12 -6
@@ -875,16 +875,22 @@ static inline int irq_data_get_node(struct irq_data *d)return irq_common_data_get_node (d->common); } -static inline struct cpumask *irq_get_affinity_mask (int irq) +static inline struct cpumask *irq_data_get_affinity_mask (struct irq_data *d) { -struct irq_data *d =irq_get_irq_data (irq); +return d->common->affinity; +} -return d ? d->common->affinity :NULL ; +static inline void irq_data_update_affinity (struct irq_data *d, +const struct cpumask *m) +{ +cpumask_copy (d->common->affinity, m); } -static inline struct cpumask *irq_data_get_affinity_mask (struct irq_data *d) +static inline struct cpumask *irq_get_affinity_mask (int irq) { -return d->common->affinity; +struct irq_data *d =irq_get_irq_data (irq); + +return d ?irq_data_get_affinity_mask (d) :NULL ; }#ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK
@@ -906,7 +912,7 @@ static inline void irq_data_update_effective_affinity(struct irq_data *d,static inline struct cpumask *irq_data_get_effective_affinity_mask (struct irq_data *d) { -return d->common->affinity; +return irq_data_get_affinity_mask (d); }#endif
include/linux/pci.h +1 -0
@@ -557,6 +557,7 @@ struct pci_host_bridge {void *release_data; unsigned int ignore_reset_delay:1; /* For entire hierarchy */ unsigned int no_ext_tags:1; /* No Extended Tags */ + unsigned int no_inc_mrrs:1; /* No Increase MRRS */ unsigned int native_aer:1; /* OS may use PCIe AER */ unsigned int native_pcie_hotplug:1; /* OS may use PCIe hotplug */ unsigned int native_shpc_hotplug:1; /* OS may use SHPC hotplug */
include/linux/pci_ids.h +2 -0
@@ -3012,6 +3012,8 @@#define PCI_DEVICE_ID_INTEL_VMD_9A0B 0x9a0b#define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 +#define PCI_VENDOR_ID_WANGXUN 0x8088 +#define PCI_VENDOR_ID_SCALEMP 0x8686#define PCI_DEVICE_ID_SCALEMP_VSMP_CTL 0x1010
include/net/sctp/structs.h +1 -0
@@ -1420,6 +1420,7 @@ struct sctp_stream_priorities {/* The next stream in line */ struct sctp_stream_out_ext *next;__u16 prio; +__u16 users; };struct sctp_stream_out_ext {
include/net/tc_act/tc_pedit.h +66 -15
125 lines not on this page · raw message
include/uapi/linux/usb/video.h +30 -0
@@ -179,6 +179,36 @@#define UVC_CONTROL_CAP_AUTOUPDATE (1 << 3)#define UVC_CONTROL_CAP_ASYNCHRONOUS (1 << 4) +/* 3.9.2.6 Color Matching Descriptor Values */ +enum uvc_color_primaries_values { +UVC_COLOR_PRIMARIES_UNSPECIFIED , +UVC_COLOR_PRIMARIES_BT_709_SRGB , +UVC_COLOR_PRIMARIES_BT_470_2_M , +UVC_COLOR_PRIMARIES_BT_470_2_B_G , +UVC_COLOR_PRIMARIES_SMPTE_170M , +UVC_COLOR_PRIMARIES_SMPTE_240M , +}; + +enum uvc_transfer_characteristics_values { +UVC_TRANSFER_CHARACTERISTICS_UNSPECIFIED , +UVC_TRANSFER_CHARACTERISTICS_BT_709 , +UVC_TRANSFER_CHARACTERISTICS_BT_470_2_M , +UVC_TRANSFER_CHARACTERISTICS_BT_470_2_B_G , +UVC_TRANSFER_CHARACTERISTICS_SMPTE_170M , +UVC_TRANSFER_CHARACTERISTICS_SMPTE_240M , +UVC_TRANSFER_CHARACTERISTICS_LINEAR , +UVC_TRANSFER_CHARACTERISTICS_SRGB , +}; + +enum uvc_matrix_coefficients { +UVC_MATRIX_COEFFICIENTS_UNSPECIFIED , +UVC_MATRIX_COEFFICIENTS_BT_709 , +UVC_MATRIX_COEFFICIENTS_FCC , +UVC_MATRIX_COEFFICIENTS_BT_470_2_B_G , +UVC_MATRIX_COEFFICIENTS_SMPTE_170M , +UVC_MATRIX_COEFFICIENTS_SMPTE_240M , +}; +/* ------------------------------------------------------------------------ * UVC structures */
include/uapi/linux/uvcvideo.h +1 -1
@@ -86,7 +86,7 @@ struct uvc_xu_control_query {* struct. The first two fields are added by the driver, they can be used for * clock synchronisation. The rest is an exact copy of a UVC payload header. * Only complete objects with complete buffers are included. Therefore it's -* always sizeof(meta->ts) + sizeof(meta->sof) + meta->length bytes large. +* always sizeof(meta->ns) + sizeof(meta->sof) + meta->length bytes large. */ struct uvc_meta_buf {__u64 ns;
kernel/fail_function.c +1 -4
@@ -163,10 +163,7 @@ static void fei_debugfs_add_attr(struct fei_attr *attr)static void fei_debugfs_remove_attr (struct fei_attr *attr) { -struct dentry *dir; - - dir =debugfs_lookup (attr->kp.symbol_name, fei_debugfs_dir);
Lines of this file are not shown. View the raw message.
net/9p/trans_xen.c +31 -17
48 lines not on this page · raw message
net/sched/act_mpls.c +37 -29
66 lines not on this page · raw message
net/sched/act_pedit.c +104 -74
178 lines not on this page · raw message
net/sched/cls_tcindex.c deleted +0 -756
756 lines not on this page · raw message
net/sctp/stream_sched_prio.c +21 -31
52 lines not on this page · raw message
sound/soc/mediatek/mt8195/mt8195-dai-etdm.c +3 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.