Linux 5.10.156
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.156 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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/process/code-of-conduct-interpretation.rst | 2 Makefile | 2 arch/arm/boot/dts/imx7s.dtsi | 4 arch/arm64/boot/dts/freescale/imx8mm.dtsi | 4 arch/arm64/boot/dts/freescale/imx8mn.dtsi | 2 arch/arm64/include/asm/cputype.h | 2 arch/x86/events/intel/pt.c | 9 + block/sed-opal.c | 32 +++++- drivers/accessibility/speakup/main.c | 2 drivers/ata/libata-transport.c | 19 +++- drivers/block/drbd/drbd_main.c | 4 drivers/firmware/google/coreboot_table.c | 37 ++++++- drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 25 ++++- drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 27 ++++- drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 42 +++++++- drivers/gpu/drm/drm_drv.c | 2 drivers/gpu/drm/drm_internal.h | 3 drivers/gpu/drm/imx/imx-tve.c | 5 - drivers/gpu/drm/panel/panel-simple.c | 2 drivers/i2c/busses/i2c-i801.c | 1 drivers/i2c/busses/i2c-tegra.c | 16 ++- drivers/iio/adc/at91_adc.c | 4 drivers/iio/adc/mp2629_adc.c | 5 - drivers/iio/pressure/ms5611_spi.c | 2 drivers/iio/trigger/iio-trig-sysfs.c | 6 + drivers/input/joystick/iforce/iforce-main.c | 8 - drivers/input/serio/i8042.c | 4 drivers/iommu/intel/pasid.c | 5 - drivers/isdn/mISDN/core.c | 2 drivers/isdn/mISDN/dsp_pipeline.c | 3 drivers/md/dm-ioctl.c | 4 drivers/mfd/lpc_ich.c | 59 +++++++++++- drivers/misc/vmw_vmci/vmci_queue_pair.c | 2 drivers/mmc/core/core.c | 8 + drivers/mmc/host/sdhci-esdhc-imx.c | 4 drivers/mmc/host/sdhci-pci-core.c | 2 drivers/mmc/host/sdhci-pci-o2micro.c | 7 + drivers/mtd/spi-nor/controllers/intel-spi-pci.c | 29 ++++-- drivers/mtd/spi-nor/controllers/intel-spi.c | 51 +++++----- drivers/net/ethernet/amazon/ena/ena_netdev.c | 8 + drivers/net/ethernet/atheros/ag71xx.c | 3 drivers/net/ethernet/broadcom/Kconfig | 2 drivers/net/ethernet/broadcom/bgmac.c | 1 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 10 +- drivers/net/ethernet/cavium/liquidio/lio_main.c | 34 +++++-- drivers/net/ethernet/huawei/hinic/hinic_main.c | 9 + drivers/net/ethernet/pensando/ionic/ionic_main.c | 8 + drivers/net/macvlan.c | 6 - drivers/net/thunderbolt.c | 19 ++-- drivers/net/usb/smsc95xx.c | 27 ++++- drivers/nvme/host/core.c | 6 + drivers/nvme/host/nvme.h | 16 ++- drivers/parport/parport_pc.c | 2 drivers/pinctrl/devicetree.c | 2 drivers/platform/x86/intel_pmc_core_pltdrv.c | 9 + drivers/s390/scsi/zfcp_fsf.c | 2 drivers/scsi/scsi_debug.c | 6 + drivers/siox/siox-core.c | 2 drivers/slimbus/stream.c | 8 - drivers/spi/spi-stm32.c | 1 drivers/target/loopback/tcm_loop.c | 3 drivers/tty/n_gsm.c | 2 drivers/tty/serial/8250/8250_lpss.c | 15 ++- drivers/tty/serial/8250/8250_omap.c | 45 +++++---- drivers/tty/serial/8250/8250_port.c | 25 +---- drivers/tty/serial/imx.c | 1 drivers/usb/chipidea/otg_fsm.c | 2 drivers/usb/core/quirks.c | 3 drivers/usb/dwc3/host.c | 10 -- drivers/usb/host/bcma-hcd.c | 10 +- drivers/usb/serial/option.c | 19 +++- drivers/usb/typec/mux/intel_pmc_mux.c | 15 ++- drivers/xen/pcpu.c | 2 fs/btrfs/tests/qgroup-tests.c | 16 --- fs/buffer.c | 4 fs/cifs/ioctl.c | 4 fs/cifs/smb2ops.c | 4 fs/gfs2/ops_fstype.c | 17 ++- fs/namei.c | 2 fs/nfs/nfs4proc.c | 6 - fs/ntfs/attrib.c | 28 +++++ fs/ntfs/inode.c | 7 + include/linux/platform_data/intel-spi.h | 6 - include/linux/ring_buffer.h | 2 include/linux/stddef.h | 48 ++++++++++ include/net/ip.h | 2 include/net/ipv6.h | 2 include/uapi/linux/ip.h | 6 - include/uapi/linux/ipv6.h | 6 - include/uapi/linux/stddef.h | 25 +++++ kernel/bpf/percpu_freelist.c | 23 ++-- kernel/kprobes.c | 8 + kernel/trace/ftrace.c | 5 - kernel/trace/kprobe_event_gen_test.c | 48 ++++++---- kernel/trace/ring_buffer.c | 71 ++++++++++----- kernel/trace/synth_event_gen_test.c | 16 +-- kernel/trace/trace.c | 2 kernel/trace/trace_events_synth.c | 5 - mm/filemap.c | 2 mm/maccess.c | 2 net/9p/trans_fd.c | 6 + net/bluetooth/l2cap_core.c | 2 net/bpf/test_run.c | 1 net/caif/chnl_net.c | 3 net/ipv4/tcp_cdg.c | 2 net/kcm/kcmsock.c | 62 +------------ net/l2tp/l2tp_core.c | 10 +- net/sctp/outqueue.c | 13 +- net/x25/x25_dev.c | 2 scripts/kernel-doc | 7 + sound/pci/hda/patch_realtek.c | 14 ++ sound/soc/codecs/jz4725b.c | 34 ++++--- sound/soc/codecs/mt6660.c | 8 - sound/soc/codecs/rt1308-sdw.h | 2 sound/soc/codecs/tas2764.c | 19 +--- sound/soc/codecs/tas2770.c | 20 +--- sound/soc/codecs/wm5102.c | 6 - sound/soc/codecs/wm5110.c | 6 - sound/soc/codecs/wm8962.c | 54 ++++++++++- sound/soc/codecs/wm8997.c | 6 - sound/soc/soc-core.c | 17 +++ sound/soc/soc-utils.c | 2 sound/usb/midi.c | 4 tools/testing/selftests/futex/functional/Makefile | 6 - tools/testing/selftests/intel_pstate/Makefile | 6 - 126 files changed, 994 insertions(+), 467 deletions(-)
Adrian Hunter (1):
perf/x86/intel/pt: Fix sampling using single range output
Aishwarya Kothari (1):
drm/panel: simple: set bpc field for logic technologies displays
Alban Crequy (1):
maccess: Fix writing offset in case of fault in strncpy_from_kernel_nofault()
Alexander Potapenko (2):
misc/vmw_vmci: fix an infoleak in vmci_host_do_receive_datagram()
mm: fs: initialize fsdata passed to write_begin/write_end interface
Alexander Sergeyev (1):
ALSA: hda/realtek: fix speakers and micmute on HP 855 G8
Anastasia Belova (2):
cifs: add check for returning value of SMB2_close_init
cifs: add check for returning value of SMB2_set_info_init
Andreas Gruenbacher (1):
gfs2: Switch from strlcpy to strscpy
Andrew Price (1):
gfs2: Check sb_bsize_shift after reading superblock
Baisong Zhong (1):
bpf, test_run: Fix alignment problem in bpf_prog_test_run_skb()
Benjamin Block (1):
scsi: zfcp: Fix double free of FSF request when qdio send fails
Benjamin Coddington (1):
NFSv4: Retry LOCK on OLD_STATEID during delegation return
Benoît Monin (1):
USB: serial: option: add Sierra Wireless EM9191
Brian Norris (1):
firmware: coreboot: Register bus in module init
Chen Jun (1):
Input: i8042 - fix leaking of platform device on module removal
Chen Zhongjin (2):
ASoC: core: Fix use-after-free in snd_soc_exit()
ASoC: soc-utils: Remove __exit for snd_soc_util_exit()
Chevron Li (1):
mmc: sdhci-pci-o2micro: fix card detect fail issue caused by CD# debounce timeout
Chuang Wang (1):
net: macvlan: Use built-in RCU list checking
Colin Ian King (1):
ASoC: codecs: jz4725b: Fix spelling mistake "Sourc" -> "Source", "Routee" -> "Route"
Cong Wang (1):
kcm: close race conditions on sk_receive_queue
D Scott Phillips (1):
arm64: Fix bit-shifting UB in the MIDR_CPU_MODEL() macro
Dan Carpenter (1):
drbd: use after free in drbd_create_device()
Daniil Tatianin (1):
ring_buffer: Do not deactivate non-existant pages
Davide Tronchin (3):
USB: serial: option: remove old LARA-R6 PID
USB: serial: option: add u-blox LARA-R6 00B modem
USB: serial: option: add u-blox LARA-L6 modem
Dominique Martinet (1):
9p: trans_fd/p9_conn_cancel: drop client lock earlier
Duoming Zhou (2):
tty: n_gsm: fix sleep-in-atomic-context bug in gsm_control_send
usb: chipidea: fix deadlock in ci_otg_del_timer
Emil Flink (1):
ALSA: hda/realtek: fix speakers for Samsung Galaxy Book Pro
Eric Dumazet (3):
macvlan: enforce a consistent minimal mtu
tcp: cdg: allow tcp_cdg_release() to be called multiple times
kcm: avoid potential race in kcm_tx_work
Evan Quan (1):
drm/amd/pm: support power source switch on Sienna Cichlid
Filipe Manana (1):
btrfs: remove pointless and double ulist frees in error paths of qgroup tests
Gaosheng Cui (1):
bnxt_en: Remove debugfs when pci_register_driver failed
Gong, Sishuai (1):
net: fix a concurrency bug in l2tp_tunnel_register()
Greg Kroah-Hartman (2):
Revert "net: broadcom: Fix BCMGENET Kconfig" Linux 5.10.156
Guchun Chen (2):
drm/amd/pm: disable BACO entry/exit completely on several sienna cichlid cards drm/amdgpu: disable BACO on special BEIGE_GOBY card
Haibo Chen (1):
mmc: sdhci-esdhc-imx: use the correct host caps for MMC_CAP_8_BIT_DATA
Hangbin Liu (1):
net: use struct_group to copy ip/ipv6 header addresses
Hawkins Jiawei (3):
ntfs: fix use-after-free in ntfs_attr_find()
ntfs: fix out-of-bounds read in ntfs_attr_find()
ntfs: check overflow when iterating ATTR_RECORDs
Ilpo Järvinen (4):
serial: 8250: Remove serial_rs485 sanitization from em485
serial: 8250: Fall back to non-DMA Rx if IIR_RDI occurs
serial: 8250: Flush DMA Rx on RLSI
serial: 8250_lpss: Configure DMA also w/o DMA filter
Johan Hovold (1):
Revert "usb: dwc3: disable USB core PHY management"
Kees Cook (1):
stddef: Introduce struct_group() helper macro
Keith Busch (2):
nvme: restrict management ioctls to admin
nvme: ensure subsystem reset is single threaded
Krzysztof Kozlowski (1):
slimbus: stream: correct presence rate frequencies
Li Huafei (1):
kprobes: Skip clearing aggrprobe's post_handler in kprobe-on-ftrace case
Lijo Lazar (1):
drm/amd/pm: Read BIF STRAP also for BACO check
Linus Walleij (1):
USB: bcma: Make GPIO explicitly optional
Liu Jian (1):
net: ag71xx: call phylink_disconnect_phy if ag71xx_hw_enable() fail in ag71xx_open()
Luiz Augusto von Dentz (1):
Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm
Lukas Wunner (1):
usbnet: smsc95xx: Fix deadlock on runtime resume
Maciej W. Rozycki (1):
parport_pc: Avoid FIFO port location truncation
Marek Vasut (4):
spi: stm32: Print summary 'callbacks suppressed' message
ARM: dts: imx7: Fix NAND controller size-cells
arm64: dts: imx8mm: Fix NAND controller size-cells
arm64: dts: imx8mn: Fix NAND controller size-cells
Martin Povišer (2):
ASoC: tas2770: Fix set_tdm_slot in case of single slot
ASoC: tas2764: Fix set_tdm_slot in case of single slot
Matthias Schiffer (1):
serial: 8250_omap: remove wait loop from Errata i202 workaround
Mauro Lima (1):
spi: intel: Fix the offset to get the 64K erase opcode
Mika Westerberg (2):
mtd: spi-nor: intel-spi: Disable write protection only if asked
spi: intel: Use correct mask for flash and protected regions
Mikulas Patocka (1):
dm ioctl: fix misbehavior if list_versions races with module loading
Mitja Spes (1):
iio: pressure: ms5611: changed hardcoded SPI speed to value limited
Mushahid Hussain (1):
speakup: fix a segfault caused by switching consoles
Nam Cao (1):
i2c: i801: add lis3lv02d's I2C address for Vostro 5568
Nathan Huckleberry (1):
drm/imx: imx-tve: Fix return type of imx_tve_connector_mode_valid
Nicolas Dumazet (1):
usb: add NO_LPM quirk for Realforce 87U Keyboard
Rajat Khandelwal (1):
usb: typec: mux: Enter safe mode only when pins need to be reconfigured
Reinhard Speyerer (1):
USB: serial: option: add Fibocom FM160 0x0111 composition
Ricardo Cañuelo (2):
selftests/futex: fix build for clang selftests/intel_pstate: fix build for ARCH=x86_64
Rodrigo Siqueira (1):
drm/amd/display: Remove wrong pipe control lock
Roger Pau Monné (1):
platform/x86/intel: pmc: Don't unconditionally attach Intel PMC when virtualized
Saravanan Sekar (2):
iio: adc: mp2629: fix wrong comparison of channel
iio: adc: mp2629: fix potential array out of bound access
Serge Semin (1):
block: sed-opal: kmalloc the cmd/resp buffers
Shang XiaoJing (6):
drm/drv: Fix potential memory leak in drm_dev_init()
drm: Fix potential null-ptr-deref in drm_vblank_destroy_worker()
tracing: Fix memory leak in test_gen_synth_cmd() and test_empty_synth_event()
tracing: Fix wild-memory-access in register_synth_event()
tracing: kprobe: Fix potential null-ptr-deref on trace_event_file in kprobe_event_gen_test_exit()
tracing: kprobe: Fix potential null-ptr-deref on trace_array in kprobe_event_gen_test_exit()
Shawn Guo (1):
serial: imx: Add missing .thaw_noirq hook
Shuah Khan (1):
docs: update mediator contact information in CoC doc
Shuming Fan (1):
ASoC: rt1308-sdw: add the default value of some registers
Siarhei Volkau (4):
ASoC: codecs: jz4725b: add missed Line In power control bit
ASoC: codecs: jz4725b: fix reported volume for Master ctl
ASoC: codecs: jz4725b: use right control for Capture Volume
ASoC: codecs: jz4725b: fix capture selector naming
Steven Rostedt (Google) (2):
tracing/ring-buffer: Have polling block on watermark
ring-buffer: Include dropped pages in counting dirty patches
Tadeusz Struk (1):
uapi/linux/stddef.h: Add include guards
Takashi Iwai (2):
ALSA: usb-audio: Drop snd_BUG_ON() from snd_usbmidi_output_open()
ALSA: hda/realtek: Fix the speaker output on Samsung Galaxy Book Pro 360
Tetsuo Handa (2):
Input: iforce - invert valid length check when fetching device IDs 9p/trans_fd: always use O_NONBLOCK read/write
Thierry Reding (1):
i2c: tegra: Allocate DMA memory for DMA engine
Tina Zhang (1):
iommu/vt-d: Set SRE bit only when hardware has SRS cap
Tony Lindgren (3):
serial: 8250: omap: Fix missing PM runtime calls for omap8250_set_mctrl()
serial: 8250: omap: Fix unpaired pm_runtime_put_sync() in omap8250_remove()
serial: 8250: omap: Flush PM QOS work on remove
Wang ShaoBo (1):
mISDN: fix misuse of put_device() in mISDN_register_device()
Wang Wensheng (2):
ftrace: Fix the possible incorrect kernel message
ftrace: Optimize the allocation for mcount entries
Wei Yongjun (2):
net: bgmac: Drop free_netdev() from bgmac_enet_remove() net/x25: Fix skb leak in x25_lapb_receive_frame()
Xiaolei Wang (1):
ASoC: wm8962: Add an event handler for TEMP_HP and TEMP_SPK
Xin Long (2):
sctp: remove the unnecessary sinfo_stream check in sctp_prsctp_prune_unsent
sctp: clear out_curr if all frag chunks of current msg are pruned
Xiongfeng Wang (1):
mmc: sdhci-pci: Fix possible memory leak caused by missing pci_dev_put()
Xiu Jianfeng (1):
ftrace: Fix null pointer dereference in ftrace_add_mod()
Xu Kuohai (1):
bpf: Initialize same number of free nodes for each pcpu_freelist
Yang Yingliang (10):
siox: fix possible memory leak in siox_device_add()
ata: libata-transport: fix double ata_host_put() in ata_tport_add()
ata: libata-transport: fix error handling in ata_tport_add()
ata: libata-transport: fix error handling in ata_tlink_add()
ata: libata-transport: fix error handling in ata_tdev_add()
mISDN: fix possible memory leak in mISDN_dsp_element_register() xen/pcpu: fix possible memory leak in register_pcpu()
iio: adc: at91_adc: fix possible memory leak in at91_adc_allocate_trigger()
iio: trigger: sysfs: fix possible memory leak in iio_sysfs_trig_init()
scsi: target: tcm_loop: Fix possible name leak in tcm_loop_setup_hba_bus()
Yann Gautier (1):
mmc: core: properly select voltage range without power cycle
Yuan Can (5):
net: hinic: Fix error handling in hinic_module_init()
net: ionic: Fix error handling in ionic_init_module()
net: ena: Fix error handling in ena_init()
net: thunderbolt: Fix error handling in tbnet_init()
scsi: scsi_debug: Fix possible UAF in sdebug_add_host_helper()
Zeng Heng (1):
pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map
Zhang Qilong (4):
ASoC: wm5102: Revert "ASoC: wm5102: Fix PM disable depth imbalance in wm5102_probe"
ASoC: wm5110: Revert "ASoC: wm5110: Fix PM disable depth imbalance in wm5110_probe"
ASoC: wm8997: Revert "ASoC: wm8997: Fix PM disable depth imbalance in wm8997_probe"
ASoC: mt6660: Keep the pm_runtime enables before component stuff in mt6660_i2c_probe
Zhang Xiaoxu (1):
cifs: Fix wrong return value checking when GETFLAGS
Zhengchao Shao (2):
net: liquidio: release resources when liquidio driver open failed
net: caif: fix double disconnect client in chnl_net_open()
Greg Kroah-Hartman
maintainerDocumentation/process/code-of-conduct-interpretation.rst +1 -1
@@ -51,7 +51,7 @@ the Technical Advisory Board (TAB) or other maintainers if you're uncertain how to handle situations that come up. It will not be considered a violation report unless you want it to be. If you are uncertain about approaching the TAB or any other maintainers, please -reach out to our conflict mediator, Joanna Lee <[email protected]>. +reach out to our conflict mediator, Joanna Lee <[email protected]>. In the end, "be kind to each other" is really what the end goal is for everybody. We know everyone is human and we all fail at times, but the
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 155 +SUBLEVEL = 156 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/imx7s.dtsi +2 -2
@@ -1221,10 +1221,10 @@ dma_apbh: dma-apbh@33000000 { clocks = <&clks IMX7D_NAND_USDHC_BUS_RAWNAND_CLK>; }; - gpmi: nand-controller@33002000{ + gpmi: nand-controller@33002000 { compatible = "fsl,imx7d-gpmi-nand"; #address-cells = <1>; - #size-cells = <1>; + #size-cells = <0>; reg = <0x33002000 0x2000>, <0x33004000 0x4000>; reg-names = "gpmi-nand", "bch"; interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
arch/arm64/boot/dts/freescale/imx8mm.dtsi +2 -2
@@ -939,10 +939,10 @@ dma_apbh: dma-controller@33000000 { clocks = <&clk IMX8MM_CLK_NAND_USDHC_BUS_RAWNAND_CLK>; }; - gpmi: nand-controller@33002000{ + gpmi: nand-controller@33002000 { compatible = "fsl,imx8mm-gpmi-nand", "fsl,imx7d-gpmi-nand"; #address-cells = <1>; - #size-cells = <1>; + #size-cells = <0>; reg = <0x33002000 0x2000>, <0x33004000 0x4000>; reg-names = "gpmi-nand", "bch"; interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
arch/arm64/boot/dts/freescale/imx8mn.dtsi +1 -1
@@ -809,7 +809,7 @@ dma_apbh: dma-controller@33000000 { gpmi: nand-controller@33002000 { compatible = "fsl,imx8mn-gpmi-nand", "fsl,imx7d-gpmi-nand"; #address-cells = <1>; - #size-cells = <1>; + #size-cells = <0>; reg = <0x33002000 0x2000>, <0x33004000 0x4000>; reg-names = "gpmi-nand", "bch"; interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
arch/arm64/include/asm/cputype.h +1 -1
@@ -41,7 +41,7 @@ (((midr) & MIDR_IMPLEMENTOR_MASK) >> MIDR_IMPLEMENTOR_SHIFT)#define MIDR_CPU_MODEL (imp, partnum) \ - (((imp) << MIDR_IMPLEMENTOR_SHIFT) | \ + ((_AT(u32, imp) << MIDR_IMPLEMENTOR_SHIFT) | \ (0xf << MIDR_ARCHITECTURE_SHIFT) | \ ((partnum) << MIDR_PARTNUM_SHIFT))
arch/x86/events/intel/pt.c +9 -0
@@ -1247,6 +1247,15 @@ static int pt_buffer_try_single(struct pt_buffer *buf, int nr_pages)if (1 << order != nr_pages) goto out; +/* +* Some processors cannot always support single range for more than +* 4KB - refer errata TGL052, ADL037 and RPL017. Future processors might +* also be affected, so for now rather than trying to keep track of +* which ones, just disable it for all. +*/ +if (nr_pages >1 ) + goto out; + buf->single = true; buf->nr_pages = nr_pages; ret =0 ;
block/sed-opal.c +28 -4
@@ -88,8 +88,8 @@ struct opal_dev {u64 lowest_lba;size_t pos; -u8 cmd[IO_BUFFER_LENGTH ]; -u8 resp[IO_BUFFER_LENGTH ]; +u8 *cmd; +u8 *resp;struct parsed_resp parsed;size_t prev_d_len;
@@ -2134,6 +2134,8 @@ void free_opal_dev(struct opal_dev *dev)return ;clean_opal_dev (dev); +kfree (dev->resp); +kfree (dev->cmd);kfree (dev); }EXPORT_SYMBOL (free_opal_dev);
@@ -2146,17 +2148,39 @@ struct opal_dev *init_opal_dev(void *data, sec_send_recv *send_recv)if (!dev)return NULL ; +/* +* Presumably DMA-able buffers must be cache-aligned. Kmalloc makes +* sure the allocated buffer is DMA-safe in that regard. +*/ + dev->cmd =kmalloc (IO_BUFFER_LENGTH ,GFP_KERNEL ); +if (!dev->cmd) + goto err_free_dev; + + dev->resp =kmalloc (IO_BUFFER_LENGTH ,GFP_KERNEL ); +if (!dev->resp) + goto err_free_cmd; +INIT_LIST_HEAD (&dev->unlk_lst);mutex_init (&dev->dev_lock); dev->data = data; dev->send_recv = send_recv;if (check_opal_support (dev) !=0 ) {pr_debug ("Opal is not supported on this device\n" ); -kfree (dev); -return NULL ; + goto err_free_resp; }return dev; + +err_free_resp: +kfree (dev->resp); + +err_free_cmd: +kfree (dev->cmd); + +err_free_dev: +kfree (dev); + +return NULL ; }EXPORT_SYMBOL (init_opal_dev);
drivers/accessibility/speakup/main.c +1 -1
@@ -1780,7 +1780,7 @@ static void speakup_con_update(struct vc_data *vc) {unsigned long flags; -if (!speakup_console[vc->vc_num] || spk_parked) +if (!speakup_console[vc->vc_num] || spk_parked || !synth)return ;if (!spin_trylock_irqsave (&speakup_info.spinlock, flags))/* Speakup output, discard */
drivers/ata/libata-transport.c +15 -4
@@ -301,7 +301,9 @@ int ata_tport_add(struct device *parent,pm_runtime_enable (dev);pm_runtime_forbid (dev); -transport_add_device (dev); + error =transport_add_device (dev); +if (error) + goto tport_transport_add_err;transport_configure_device (dev); error =ata_tlink_add (&ap->link);
@@ -312,12 +314,12 @@ int ata_tport_add(struct device *parent, tport_link_err:transport_remove_device (dev); + tport_transport_add_err:device_del (dev); tport_err:transport_destroy_device (dev);put_device (dev); -ata_host_put (ap->host);return error; }
@@ -426,7 +428,9 @@ int ata_tlink_add(struct ata_link *link) goto tlink_err; } -transport_add_device (dev); + error =transport_add_device (dev); +if (error) + goto tlink_transport_err;transport_configure_device (dev);ata_for_each_dev (ata_dev, link,ALL ) {
@@ -441,6 +445,7 @@ int ata_tlink_add(struct ata_link *link)ata_tdev_delete (ata_dev); }transport_remove_device (dev); + tlink_transport_err:device_del (dev); tlink_err:transport_destroy_device (dev);
@@ -678,7 +683,13 @@ static int ata_tdev_add(struct ata_device *ata_dev)return error; } -transport_add_device (dev); + error =transport_add_device (dev); +if (error) { +device_del (dev); +ata_tdev_free (ata_dev); +return error; + } +transport_configure_device (dev);return 0 ; }
drivers/block/drbd/drbd_main.c +2 -2
@@ -2720,7 +2720,7 @@ static int init_submitter(struct drbd_device *device)enum drbd_ret_code drbd_create_device (struct drbd_config_context *adm_ctx,unsigned int minor) {struct drbd_resource *resource = adm_ctx->resource; -struct drbd_connection *connection; +struct drbd_connection *connection, *n;struct drbd_device *device;struct drbd_peer_device *peer_device, *tmp_peer_device;struct gendisk *disk;
@@ -2839,7 +2839,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig out_idr_remove_vol:idr_remove (&connection->peer_devices, vnr); out_idr_remove_from_resource: -for_each_connection (connection, resource) { +for_each_connection_safe (connection, n, resource) { peer_device =idr_remove (&connection->peer_devices, vnr);if (peer_device)kref_put (&connection->kref, drbd_destroy_connection);
drivers/firmware/google/coreboot_table.c +29 -8
@@ -152,12 +152,8 @@ static int coreboot_table_probe(struct platform_device *pdev)if (!ptr)return -ENOMEM ; - ret =bus_register (&coreboot_bus_type); -if (!ret) { - ret =coreboot_table_populate (dev, ptr); -if (ret) -bus_unregister (&coreboot_bus_type); - } + ret =coreboot_table_populate (dev, ptr); +memunmap (ptr);return ret;
@@ -172,7 +168,6 @@ static int __cb_dev_unregister(struct device *dev, void *dummy)static int coreboot_table_remove (struct platform_device *pdev) {bus_for_each_dev (&coreboot_bus_type,NULL ,NULL , __cb_dev_unregister); -bus_unregister (&coreboot_bus_type);return 0 ; }
@@ -202,6 +197,32 @@ static struct platform_driver coreboot_table_driver = { .of_match_table = of_match_ptr(coreboot_of_match), }, }; -module_platform_driver (coreboot_table_driver); + +static int __init coreboot_table_driver_init (void ) +{ +int ret; + + ret =bus_register (&coreboot_bus_type); +if (ret) +return ret; + + ret =platform_driver_register (&coreboot_table_driver); +if (ret) { +bus_unregister (&coreboot_bus_type); +return ret; + } + +return 0 ; +} + +static void __exit coreboot_table_driver_exit(void) +{ +platform_driver_unregister (&coreboot_table_driver); +bus_unregister (&coreboot_bus_type); +} + +module_init (coreboot_table_driver_init); +module_exit (coreboot_table_driver_exit); +MODULE_AUTHOR ("Google, Inc." );MODULE_LICENSE ("GPL" );
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +1 -1
@@ -1746,7 +1746,7 @@ void dcn20_post_unlock_program_front_end(for (j =0 ; j <TIMEOUT_FOR_PIPE_ENABLE_MS *1000 && hubp->funcs->hubp_is_flip_pending (hubp); j++) -mdelay (1 ); +udelay (1 ); } }
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c +19 -6
@@ -379,16 +379,31 @@ static int arcturus_set_default_dpm_table(struct smu_context *smu)return 0 ; } -static int arcturus_check_powerplay_table (struct smu_context *smu) +static void arcturus_check_bxco_support (struct smu_context *smu) {struct smu_table_context *table_context = &smu->smu_table;struct smu_11_0_powerplay_table *powerplay_table = table_context->power_play_table;struct smu_baco_context *smu_baco = &smu->smu_baco; +struct amdgpu_device *adev = smu->adev; +uint32_t val;if (powerplay_table->platform_caps &SMU_11_0_PP_PLATFORM_CAP_BACO || - powerplay_table->platform_caps &SMU_11_0_PP_PLATFORM_CAP_MACO ) - smu_baco->platform_support = true; + powerplay_table->platform_caps &SMU_11_0_PP_PLATFORM_CAP_MACO ) { + val =RREG32_SOC15 (NBIO ,0 , mmRCC_BIF_STRAP0); + smu_baco->platform_support = + (val &RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK ) ? true : + false; + } +} + +static int arcturus_check_powerplay_table (struct smu_context *smu) +{ +struct smu_table_context *table_context = &smu->smu_table; +struct smu_11_0_powerplay_table *powerplay_table = + table_context->power_play_table; + +arcturus_check_bxco_support (smu); table_context->thermal_controller_type = powerplay_table->thermal_controller_type;
@@ -2131,13 +2146,11 @@ static void arcturus_get_unique_id(struct smu_context *smu)static bool arcturus_is_baco_supported (struct smu_context *smu) {struct amdgpu_device *adev = smu->adev; -uint32_t val;if (!smu_v11_0_baco_is_support (smu) ||amdgpu_sriov_vf (adev))return false; - val =RREG32_SOC15 (NBIO ,0 , mmRCC_BIF_STRAP0); -return (val &RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK ) ? true : false; +return true; } static int arcturus_set_df_cstate(struct smu_context *smu,
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c +20 -7
@@ -338,19 +338,34 @@ navi10_get_allowed_feature_mask(struct smu_context *smu,return 0 ; } -static int navi10_check_powerplay_table (struct smu_context *smu) +static void navi10_check_bxco_support (struct smu_context *smu) {struct smu_table_context *table_context = &smu->smu_table;struct smu_11_0_powerplay_table *powerplay_table = table_context->power_play_table;struct smu_baco_context *smu_baco = &smu->smu_baco; +struct amdgpu_device *adev = smu->adev; +uint32_t val; + +if (powerplay_table->platform_caps &SMU_11_0_PP_PLATFORM_CAP_BACO || + powerplay_table->platform_caps &SMU_11_0_PP_PLATFORM_CAP_MACO ) { + val =RREG32_SOC15 (NBIO ,0 , mmRCC_BIF_STRAP0); + smu_baco->platform_support = + (val &RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK ) ? true : + false; + } +} + +static int navi10_check_powerplay_table (struct smu_context *smu) +{ +struct smu_table_context *table_context = &smu->smu_table; +struct smu_11_0_powerplay_table *powerplay_table = + table_context->power_play_table;if (powerplay_table->platform_caps &SMU_11_0_PP_PLATFORM_CAP_HARDWAREDC ) smu->dc_controlled_by_gpio = true; -if (powerplay_table->platform_caps &SMU_11_0_PP_PLATFORM_CAP_BACO || - powerplay_table->platform_caps &SMU_11_0_PP_PLATFORM_CAP_MACO ) - smu_baco->platform_support = true; +navi10_check_bxco_support (smu); table_context->thermal_controller_type = powerplay_table->thermal_controller_type;
@@ -1948,13 +1963,11 @@ static int navi10_overdrive_get_gfx_clk_base_voltage(struct smu_context *smu,static bool navi10_is_baco_supported (struct smu_context *smu) {struct amdgpu_device *adev = smu->adev; -uint32_t val;if (amdgpu_sriov_vf (adev) || (!smu_v11_0_baco_is_support (smu)))return false; - val =RREG32_SOC15 (NBIO ,0 , mmRCC_BIF_STRAP0); -return (val &RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK ) ? true : false; +return true; }static int navi10_set_default_od_settings (struct smu_context *smu)
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +36 -6
71 lines not on this page · raw message
drivers/gpu/drm/drm_drv.c +1 -1
@@ -610,7 +610,7 @@ static int drm_dev_init(struct drm_device *dev,mutex_init (&dev->clientlist_mutex);mutex_init (&dev->master_mutex); - ret =drmm_add_action (dev, drm_dev_init_release,NULL ); + ret =drmm_add_action_or_reset (dev, drm_dev_init_release,NULL );if (ret)return ret;
drivers/gpu/drm/drm_internal.h +2 -1
@@ -116,7 +116,8 @@ static inline void drm_vblank_flush_worker(struct drm_vblank_crtc *vblank)static inline void drm_vblank_destroy_worker (struct drm_vblank_crtc *vblank) { -kthread_destroy_worker (vblank->worker); +if (vblank->worker) +kthread_destroy_worker (vblank->worker); }int drm_vblank_worker_init (struct drm_vblank_crtc *vblank);
drivers/gpu/drm/imx/imx-tve.c +3 -2
@@ -212,8 +212,9 @@ static int imx_tve_connector_get_modes(struct drm_connector *connector)return ret; } -static int imx_tve_connector_mode_valid (struct drm_connector *connector, -struct drm_display_mode *mode) +static enum drm_mode_status +imx_tve_connector_mode_valid (struct drm_connector *connector, +struct drm_display_mode *mode) {struct imx_tve *tve =con_to_tve (connector);unsigned long rate;
drivers/gpu/drm/panel/panel-simple.c +2 -0
@@ -2655,6 +2655,7 @@ static const struct display_timing logictechno_lt161010_2nh_timing = {static const struct panel_desc logictechno_lt161010_2nh = { .timings = &logictechno_lt161010_2nh_timing, .num_timings =1 , + .bpc =6 , .size = { .width =154 , .height =86 ,
@@ -2684,6 +2685,7 @@ static const struct display_timing logictechno_lt170410_2whc_timing = {static const struct panel_desc logictechno_lt170410_2whc = { .timings = &logictechno_lt170410_2whc_timing, .num_timings =1 , + .bpc =8 , .size = { .width =217 , .height =136 ,
drivers/i2c/busses/i2c-i801.c +1 -0
@@ -1275,6 +1275,7 @@ static const struct {*/ { "Latitude 5480", 0x29 }, { "Vostro V131", 0x1d }, + { "Vostro 5568", 0x29 }, };static void register_dell_lis3lv02d_i2c_device (struct i801_priv *priv)
drivers/i2c/busses/i2c-tegra.c +10 -6
@@ -283,6 +283,7 @@ struct tegra_i2c_dev {struct dma_chan *tx_dma_chan;struct dma_chan *rx_dma_chan;unsigned int dma_buf_size; +struct device *dma_dev;dma_addr_t dma_phys;void *dma_buf;
@@ -419,7 +420,7 @@ static int tegra_i2c_dma_submit(struct tegra_i2c_dev *i2c_dev, size_t len)static void tegra_i2c_release_dma (struct tegra_i2c_dev *i2c_dev) {if (i2c_dev->dma_buf) { -dma_free_coherent (i2c_dev->dev, i2c_dev->dma_buf_size, +dma_free_coherent (i2c_dev->dma_dev, i2c_dev->dma_buf_size, i2c_dev->dma_buf, i2c_dev->dma_phys); i2c_dev->dma_buf =NULL ; }
@@ -466,10 +467,13 @@ static int tegra_i2c_init_dma(struct tegra_i2c_dev *i2c_dev) i2c_dev->tx_dma_chan = chan; +WARN_ON (i2c_dev->tx_dma_chan->device != i2c_dev->rx_dma_chan->device); + i2c_dev->dma_dev = chan->device->dev; + i2c_dev->dma_buf_size = i2c_dev->hw->quirks->max_write_len +I2C_PACKET_HEADER_SIZE ; - dma_buf =dma_alloc_coherent (i2c_dev->dev, i2c_dev->dma_buf_size, + dma_buf =dma_alloc_coherent (i2c_dev->dma_dev, i2c_dev->dma_buf_size, &dma_phys,GFP_KERNEL | __GFP_NOWARN);if (!dma_buf) {dev_err (i2c_dev->dev,"failed to allocate DMA buffer\n" );
@@ -1255,7 +1259,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,if (i2c_dev->dma_mode) {if (i2c_dev->msg_read) { -dma_sync_single_for_device (i2c_dev->dev, +dma_sync_single_for_device (i2c_dev->dma_dev, i2c_dev->dma_phys, xfer_size,DMA_FROM_DEVICE );
@@ -1263,7 +1267,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,if (err)return err; }else { -dma_sync_single_for_cpu (i2c_dev->dev, +dma_sync_single_for_cpu (i2c_dev->dma_dev, i2c_dev->dma_phys, xfer_size,DMA_TO_DEVICE ); }
@@ -1276,7 +1280,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,memcpy (i2c_dev->dma_buf +I2C_PACKET_HEADER_SIZE , msg->buf, msg->len); -dma_sync_single_for_device (i2c_dev->dev, +dma_sync_single_for_device (i2c_dev->dma_dev, i2c_dev->dma_phys, xfer_size,DMA_TO_DEVICE );
@@ -1327,7 +1331,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, }if (i2c_dev->msg_read && i2c_dev->msg_err ==I2C_ERR_NONE ) { -dma_sync_single_for_cpu (i2c_dev->dev, +dma_sync_single_for_cpu (i2c_dev->dma_dev, i2c_dev->dma_phys, xfer_size,DMA_FROM_DEVICE );
drivers/iio/adc/at91_adc.c +3 -1
@@ -616,8 +616,10 @@ static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *idev, trig->ops = &at91_adc_trigger_ops; ret =iio_trigger_register (trig); -if (ret) +if (ret) { +iio_trigger_free (trig);return NULL ; + }return trig; }
drivers/iio/adc/mp2629_adc.c +3 -2
@@ -56,7 +56,8 @@ static struct iio_map mp2629_adc_maps[] = {MP2629_MAP (SYSTEM_VOLT ,"system-volt" ),MP2629_MAP (INPUT_VOLT ,"input-volt" ),MP2629_MAP (BATT_CURRENT ,"batt-current" ), -MP2629_MAP (INPUT_CURRENT ,"input-current" ) + MP2629_MAP(INPUT_CURRENT, "input-current"), + { } }; static int mp2629_read_raw(struct iio_dev *indio_dev,
@@ -73,7 +74,7 @@ static int mp2629_read_raw(struct iio_dev *indio_dev,if (ret)return ret; -if (chan->address ==MP2629_INPUT_VOLT ) +if (chan->channel ==MP2629_INPUT_VOLT ) rval &=GENMASK (6 ,0 ); *val = rval;return IIO_VAL_INT ;
drivers/iio/pressure/ms5611_spi.c +1 -1
@@ -94,7 +94,7 @@ static int ms5611_spi_probe(struct spi_device *spi)spi_set_drvdata (spi, indio_dev); spi->mode =SPI_MODE_0 ; - spi->max_speed_hz =20000000 ; + spi->max_speed_hz =min (spi->max_speed_hz,20000000U ); spi->bits_per_word =8 ; ret =spi_setup (spi);if (ret <0 )
drivers/iio/trigger/iio-trig-sysfs.c +5 -1
@@ -209,9 +209,13 @@ static int iio_sysfs_trigger_remove(int id)static int __init iio_sysfs_trig_init (void ) { +int ret;device_initialize (&iio_sysfs_trig_dev);dev_set_name (&iio_sysfs_trig_dev,"iio_sysfs_trigger" ); -return device_add (&iio_sysfs_trig_dev); + ret =device_add (&iio_sysfs_trig_dev); +if (ret) +put_device (&iio_sysfs_trig_dev); +return ret; }module_init (iio_sysfs_trig_init);
drivers/input/joystick/iforce/iforce-main.c +4 -4
@@ -273,22 +273,22 @@ int iforce_init_device(struct device *parent, u16 bustype,* Get device info. */ -if (!iforce_get_id_packet (iforce,'M' , buf, &len) || len <3 ) +if (!iforce_get_id_packet (iforce,'M' , buf, &len) && len >=3 ) input_dev->id.vendor =get_unaligned_le16 (buf +1 );else dev_warn (&iforce->dev->dev,"Device does not respond to id packet M\n" ); -if (!iforce_get_id_packet (iforce,'P' , buf, &len) || len <3 ) +if (!iforce_get_id_packet (iforce,'P' , buf, &len) && len >=3 ) input_dev->id.product =get_unaligned_le16 (buf +1 );else dev_warn (&iforce->dev->dev,"Device does not respond to id packet P\n" ); -if (!iforce_get_id_packet (iforce,'B' , buf, &len) || len <3 ) +if (!iforce_get_id_packet (iforce,'B' , buf, &len) && len >=3 ) iforce->device_memory.end =get_unaligned_le16 (buf +1 );else dev_warn (&iforce->dev->dev,"Device does not respond to id packet B\n" ); -if (!iforce_get_id_packet (iforce,'N' , buf, &len) || len <2 ) +if (!iforce_get_id_packet (iforce,'N' , buf, &len) && len >=2 ) ff_effects = buf[1 ];else dev_warn (&iforce->dev->dev,"Device does not respond to id packet N\n" );
drivers/input/serio/i8042.c +0 -4
@@ -1543,8 +1543,6 @@ static int i8042_probe(struct platform_device *dev) {int error; - i8042_platform_device = dev; -if (i8042_reset ==I8042_RESET_ALWAYS ) { error =i8042_controller_selftest ();if (error)
@@ -1582,7 +1580,6 @@ static int i8042_probe(struct platform_device *dev)i8042_free_aux_ports ();/* in case KBD failed but AUX not */ i8042_free_irqs ();i8042_controller_reset (false); - i8042_platform_device =NULL ;return error; }
@@ -1592,7 +1589,6 @@ static int i8042_remove(struct platform_device *dev)i8042_unregister_ports ();i8042_free_irqs ();i8042_controller_reset (false); - i8042_platform_device =NULL ;return 0 ; }
drivers/iommu/intel/pasid.c +3 -2
@@ -669,7 +669,7 @@ int intel_pasid_setup_second_level(struct intel_iommu *iommu,* Since it is a second level only translation setup, we should * set SRE bit as well (addresses are expected to be GPAs). */ -if (pasid !=PASID_RID2PASID ) +if (pasid !=PASID_RID2PASID &&ecap_srs (iommu->ecap))pasid_set_sre (pte);pasid_set_present (pte);pasid_flush_caches (iommu, pte, pasid, did);
@@ -704,7 +704,8 @@ int intel_pasid_setup_pass_through(struct intel_iommu *iommu,* We should set SRE bit as well since the addresses are expected * to be GPAs. */ -pasid_set_sre (pte); +if (ecap_srs (iommu->ecap)) +pasid_set_sre (pte);pasid_set_present (pte);pasid_flush_caches (iommu, pte, pasid, did);
drivers/isdn/mISDN/core.c +1 -1
@@ -222,7 +222,7 @@ mISDN_register_device(struct mISDNdevice *dev, err =get_free_devid ();if (err <0 ) - goto error1; +return err; dev->id = err;device_initialize (&dev->dev);
drivers/isdn/mISDN/dsp_pipeline.c +2 -1
@@ -77,6 +77,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem)if (!entry)return -ENOMEM ; +INIT_LIST_HEAD (&entry->list); entry->elem = elem; entry->dev.class = elements_class;
@@ -107,7 +108,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem)device_unregister (&entry->dev);return ret; err1: -kfree (entry); +put_device (&entry->dev);return ret; }EXPORT_SYMBOL (mISDN_dsp_element_register);
drivers/md/dm-ioctl.c +2 -2
@@ -573,7 +573,7 @@ static void list_version_get_needed(struct target_type *tt, void *needed_param)size_t *needed = needed_param; *needed +=sizeof (struct dm_target_versions ); - *needed +=strlen (tt->name); + *needed +=strlen (tt->name) +1 ; *needed +=ALIGN_MASK ; }
@@ -638,7 +638,7 @@ static int __list_versions(struct dm_ioctl *param, size_t param_size, const char iter_info.old_vers =NULL ; iter_info.vers = vers; iter_info.flags =0 ; - iter_info.end = (char *)vers+len; + iter_info.end = (char *)vers + needed;/* * Now loop through filling out the names & versions.
drivers/mfd/lpc_ich.c +54 -5
94 lines not on this page · raw message
drivers/misc/vmw_vmci/vmci_queue_pair.c +2 -0
@@ -852,6 +852,7 @@ static int qp_notify_peer_local(bool attach, struct vmci_handle handle)u32 context_id =vmci_get_context_id ();struct vmci_event_qp ev; +memset (&ev,0 ,sizeof (ev)); ev.msg.hdr.dst =vmci_make_handle (context_id,VMCI_EVENT_HANDLER ); ev.msg.hdr.src =vmci_make_handle (VMCI_HYPERVISOR_CONTEXT_ID ,VMCI_CONTEXT_RESOURCE_ID );
@@ -1465,6 +1466,7 @@ static int qp_notify_peer(bool attach,* kernel. */ +memset (&ev,0 ,sizeof (ev)); ev.msg.hdr.dst =vmci_make_handle (peer_id,VMCI_EVENT_HANDLER ); ev.msg.hdr.src =vmci_make_handle (VMCI_HYPERVISOR_CONTEXT_ID ,VMCI_CONTEXT_RESOURCE_ID );
drivers/mmc/core/core.c +7 -1
@@ -1128,7 +1128,13 @@ u32 mmc_select_voltage(struct mmc_host *host, u32 ocr)mmc_power_cycle (host, ocr); }else { bit =fls (ocr) -1 ; - ocr &=3 << bit; +/* +* The bit variable represents the highest voltage bit set in +* the OCR register. +* To keep a range of 2 values (e.g. 3.2V/3.3V and 3.3V/3.4V), +* we must shift the mask '3' with (bit - 1). +*/ + ocr &=3 << (bit -1 );if (bit != host->ios.vdd)dev_warn (mmc_dev (host),"exceeding card's volts\n" ); }
drivers/mmc/host/sdhci-esdhc-imx.c +2 -2
@@ -1621,14 +1621,14 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)if (imx_data->socdata->flags &ESDHC_FLAG_ERR004536 ) host->quirks |=SDHCI_QUIRK_BROKEN_ADMA ; -if (host->caps &MMC_CAP_8_BIT_DATA && +if (host->mmc->caps &MMC_CAP_8_BIT_DATA && imx_data->socdata->flags &ESDHC_FLAG_HS400 ) host->quirks2 |=SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 ;if (imx_data->socdata->flags &ESDHC_FLAG_BROKEN_AUTO_CMD23 ) host->quirks2 |=SDHCI_QUIRK2_ACMD23_BROKEN ; -if (host->caps &MMC_CAP_8_BIT_DATA && +if (host->mmc->caps &MMC_CAP_8_BIT_DATA && imx_data->socdata->flags &ESDHC_FLAG_HS400_ES ) { host->mmc->caps2 |=MMC_CAP2_HS400_ES ; host->mmc_host_ops.hs400_enhanced_strobe =
drivers/mmc/host/sdhci-pci-core.c +2 -0
@@ -1799,6 +1799,8 @@ static int amd_probe(struct sdhci_pci_chip *chip) } } +pci_dev_put (smbus_dev); +if (gen ==AMD_CHIPSET_BEFORE_ML || gen ==AMD_CHIPSET_CZ ) chip->quirks2 |=SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD ;
drivers/mmc/host/sdhci-pci-o2micro.c +7 -0
@@ -31,6 +31,7 @@#define O2_SD_CAPS 0xE0#define O2_SD_ADMA1 0xE2#define O2_SD_ADMA2 0xE7 +#define O2_SD_MISC_CTRL2 0xF0#define O2_SD_INF_MOD 0xF1#define O2_SD_MISC_CTRL4 0xFC#define O2_SD_MISC_CTRL 0x1C0
@@ -822,6 +823,12 @@ static int sdhci_pci_o2_probe(struct sdhci_pci_chip *chip)/* Set Tuning Windows to 5 */ pci_write_config_byte (chip->pdev,O2_SD_TUNING_CTRL ,0x55 ); +//Adjust 1st and 2nd CD debounce time +pci_read_config_dword (chip->pdev,O2_SD_MISC_CTRL2 , &scratch_32); + scratch_32 &=0xFFE7FFFF ; + scratch_32 |=0x00180000 ; +pci_write_config_dword (chip->pdev,O2_SD_MISC_CTRL2 , scratch_32); +pci_write_config_dword (chip->pdev,O2_SD_DETECT_SETTING ,1 );/* Lock WP */ ret =pci_read_config_byte (chip->pdev,O2_SD_LOCK_WP , &scratch);
drivers/mtd/spi-nor/controllers/intel-spi-pci.c +19 -10
@@ -16,12 +16,30 @@#define BCR 0xdc#define BCR_WPD BIT(0) +static bool intel_spi_pci_set_writeable (void __iomem *base,void *data) +{ +struct pci_dev *pdev = data; +u32 bcr; + +/* Try to make the chip read/write */ +pci_read_config_dword (pdev,BCR , &bcr); +if (!(bcr &BCR_WPD )) { + bcr |=BCR_WPD ; +pci_write_config_dword (pdev,BCR , bcr); +pci_read_config_dword (pdev,BCR , &bcr); + } + +return bcr &BCR_WPD ; +} +static const struct intel_spi_boardinfo bxt_info = { .type =INTEL_SPI_BXT , + .set_writeable = intel_spi_pci_set_writeable, };static const struct intel_spi_boardinfo cnl_info = { .type =INTEL_SPI_CNL , + .set_writeable = intel_spi_pci_set_writeable, }; static int intel_spi_pci_probe(struct pci_dev *pdev,
@@ -29,7 +47,6 @@ static int intel_spi_pci_probe(struct pci_dev *pdev, {struct intel_spi_boardinfo *info;struct intel_spi *ispi; -u32 bcr;int ret; ret =pcim_enable_device (pdev);
@@ -41,15 +58,7 @@ static int intel_spi_pci_probe(struct pci_dev *pdev,if (!info)return -ENOMEM ; -/* Try to make the chip read/write */ -pci_read_config_dword (pdev,BCR , &bcr); -if (!(bcr &BCR_WPD )) { - bcr |=BCR_WPD ; -pci_write_config_dword (pdev,BCR , bcr); -pci_read_config_dword (pdev,BCR , &bcr); - } - info->writeable = !!(bcr &BCR_WPD ); - + info->data = pdev; ispi =intel_spi_probe (&pdev->dev, &pdev->resource[0 ], info);if (IS_ERR (ispi))return PTR_ERR (ispi);
drivers/mtd/spi-nor/controllers/intel-spi.c +24 -27
119 lines not on this page · raw message
drivers/net/ethernet/amazon/ena/ena_netdev.c +7 -1
@@ -4488,13 +4488,19 @@ static struct pci_driver ena_pci_driver = {static int __init ena_init (void ) { +int ret; + ena_wq =create_singlethread_workqueue (DRV_MODULE_NAME );if (!ena_wq) {pr_err ("Failed to create workqueue\n" );return -ENOMEM ; } -return pci_register_driver (&ena_pci_driver); + ret =pci_register_driver (&ena_pci_driver); +if (ret) +destroy_workqueue (ena_wq); + +return ret; } static void __exit ena_cleanup(void)
drivers/net/ethernet/atheros/ag71xx.c +2 -1
@@ -1468,7 +1468,7 @@ static int ag71xx_open(struct net_device *ndev)if (ret) {netif_err (ag, link, ndev,"phylink_of_phy_connect filed with err: %i\n" , ret); - goto err; +return ret; } max_frame_len =ag71xx_max_frame_len (ndev->mtu);
@@ -1489,6 +1489,7 @@ static int ag71xx_open(struct net_device *ndev) err:ag71xx_rings_cleanup (ag); +phylink_disconnect_phy (ag->phylink);return ret; }
drivers/net/ethernet/broadcom/Kconfig +1 -1
@@ -69,7 +69,7 @@ config BCMGENET select BCM7XXX_PHY select MDIO_BCM_UNIMAC select DIMLIB - select BROADCOM_PHY if (ARCH_BCM2835 && PTP_1588_CLOCK_OPTIONAL) + select BROADCOM_PHY if ARCH_BCM2835 help This driver supports the built-in Ethernet MACs found in the Broadcom BCM7xxx Set Top Box family chipset.
drivers/net/ethernet/broadcom/bgmac.c +0 -1
@@ -1568,7 +1568,6 @@ void bgmac_enet_remove(struct bgmac *bgmac)phy_disconnect (bgmac->net_dev->phydev);netif_napi_del (&bgmac->napi);bgmac_dma_free (bgmac); -free_netdev (bgmac->net_dev); }EXPORT_SYMBOL_GPL (bgmac_enet_remove);
drivers/net/ethernet/broadcom/bnxt/bnxt.c +9 -1
@@ -13111,8 +13111,16 @@ static struct pci_driver bnxt_pci_driver = {static int __init bnxt_init (void ) { +int err; +bnxt_debug_init (); -return pci_register_driver (&bnxt_pci_driver); + err =pci_register_driver (&bnxt_pci_driver); +if (err) { +bnxt_debug_exit (); +return err; + } + +return 0 ; } static void __exit bnxt_exit(void)
drivers/net/ethernet/cavium/liquidio/lio_main.c +26 -8
@@ -1798,13 +1798,10 @@ static int liquidio_open(struct net_device *netdev)ifstate_set (lio,LIO_IFSTATE_RUNNING ); -if (OCTEON_CN23XX_PF (oct)) { -if (!oct->msix_on) -if (setup_tx_poll_fn (netdev)) -return -1 ; - }else { -if (setup_tx_poll_fn (netdev)) -return -1 ; +if (!OCTEON_CN23XX_PF (oct) || (OCTEON_CN23XX_PF (oct) && !oct->msix_on)) { + ret =setup_tx_poll_fn (netdev); +if (ret) + goto err_poll; }netif_tx_start_all_queues (netdev);
@@ -1817,7 +1814,7 @@ static int liquidio_open(struct net_device *netdev)/* tell Octeon to start forwarding packets to host */ ret =send_rx_ctrl_cmd (lio,1 );if (ret) -return ret; + goto err_rx_ctrl;/* start periodical statistics fetch */ INIT_DELAYED_WORK (&lio->stats_wk.work, lio_fetch_stats);
@@ -1828,6 +1825,27 @@ static int liquidio_open(struct net_device *netdev)dev_info (&oct->pci_dev->dev,"%s interface is opened\n" , netdev->name); +return 0 ; + +err_rx_ctrl: +if (!OCTEON_CN23XX_PF (oct) || (OCTEON_CN23XX_PF (oct) && !oct->msix_on)) +cleanup_tx_poll_fn (netdev); +err_poll: +if (lio->ptp_clock) { +ptp_clock_unregister (lio->ptp_clock); + lio->ptp_clock =NULL ; + } + +if (oct->props[lio->ifidx].napi_enabled ==1 ) { +list_for_each_entry_safe (napi, n, &netdev->napi_list, dev_list) +napi_disable (napi); + + oct->props[lio->ifidx].napi_enabled =0 ; + +if (OCTEON_CN23XX_PF (oct)) + oct->droq[0 ]->ops.poll_mode =0 ; + } +return ret; }
drivers/net/ethernet/huawei/hinic/hinic_main.c +8 -1
@@ -1502,8 +1502,15 @@ static struct pci_driver hinic_driver = {static int __init hinic_module_init (void ) { +int ret; +hinic_dbg_register_debugfs (HINIC_DRV_NAME ); -return pci_register_driver (&hinic_driver); + + ret =pci_register_driver (&hinic_driver); +if (ret) +hinic_dbg_unregister_debugfs (); + +return ret; } static void __exit hinic_module_exit(void)
drivers/net/ethernet/pensando/ionic/ionic_main.c +7 -1
@@ -569,8 +569,14 @@ int ionic_port_reset(struct ionic *ionic)static int __init ionic_init_module (void ) { +int ret; +ionic_debugfs_create (); -return ionic_bus_register_driver (); + ret =ionic_bus_register_driver (); +if (ret) +ionic_debugfs_destroy (); + +return ret; } static void __exit ionic_cleanup_module(void)
drivers/net/macvlan.c +3 -3
@@ -139,7 +139,7 @@ static struct macvlan_source_entry *macvlan_hash_lookup_source(u32 idx =macvlan_eth_hash (addr);struct hlist_head *h = &vlan->port->vlan_source_hash[idx]; -hlist_for_each_entry_rcu (entry, h, hlist) { +hlist_for_each_entry_rcu (entry, h, hlist,lockdep_rtnl_is_held ()) {if (ether_addr_equal_64bits (entry->addr, addr) && entry->vlan == vlan)return entry;
@@ -1176,7 +1176,7 @@ void macvlan_common_setup(struct net_device *dev) {ether_setup (dev); - dev->min_mtu =0 ; +/* ether_setup() has set dev->min_mtu to ETH_MIN_MTU. */ dev->max_mtu =ETH_MAX_MTU ; dev->priv_flags &= ~IFF_TX_SKB_SHARING ;netif_keep_dst (dev);
@@ -1614,7 +1614,7 @@ static int macvlan_fill_info_macaddr(struct sk_buff *skb,struct hlist_head *h = &vlan->port->vlan_source_hash[i];struct macvlan_source_entry *entry; -hlist_for_each_entry_rcu (entry, h, hlist) { +hlist_for_each_entry_rcu (entry, h, hlist,lockdep_rtnl_is_held ()) {if (entry->vlan != vlan)continue ;if (nla_put (skb,IFLA_MACVLAN_MACADDR ,ETH_ALEN , entry->addr))
drivers/net/thunderbolt.c +14 -5
@@ -1343,12 +1343,21 @@ static int __init tbnet_init(void) TBNET_MATCH_FRAGS_ID); ret =tb_register_property_dir ("network" , tbnet_dir); -if (ret) { -tb_property_free_dir (tbnet_dir); -return ret; - } +if (ret) + goto err_free_dir; + + ret =tb_register_service_driver (&tbnet_driver); +if (ret) + goto err_unregister; -return tb_register_service_driver (&tbnet_driver); +return 0 ; + +err_unregister: +tb_unregister_property_dir ("network" , tbnet_dir); +err_free_dir: +tb_property_free_dir (tbnet_dir); + +return ret; }module_init (tbnet_init);
drivers/net/usb/smsc95xx.c +21 -6
@@ -61,6 +61,7 @@ struct smsc95xx_priv {u8 suspend_flags;struct mii_bus *mdiobus;struct phy_device *phydev; +struct task_struct *pm_task; };static bool turbo_mode = true;
@@ -70,13 +71,14 @@ MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");static int __must_check __smsc95xx_read_reg (struct usbnet *dev,u32 index,u32 *data,int in_pm) { +struct smsc95xx_priv *pdata = dev->driver_priv;u32 buf;int ret;int (*fn)(struct usbnet *,u8 ,u8 ,u16 ,u16 ,void *,u16 );BUG_ON (!dev); -if (!in_pm) +if (current != pdata->pm_task) fn = usbnet_read_cmd;else fn = usbnet_read_cmd_nopm;
@@ -100,13 +102,14 @@ static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,static int __must_check __smsc95xx_write_reg (struct usbnet *dev,u32 index,u32 data,int in_pm) { +struct smsc95xx_priv *pdata = dev->driver_priv;u32 buf;int ret;int (*fn)(struct usbnet *,u8 ,u8 ,u16 ,u16 ,const void *,u16 );BUG_ON (!dev); -if (!in_pm) +if (current != pdata->pm_task) fn = usbnet_write_cmd;else fn = usbnet_write_cmd_nopm;
@@ -1468,9 +1471,12 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)u32 val, link_up;int ret; + pdata->pm_task = current; + ret =usbnet_suspend (intf, message);if (ret <0 ) {netdev_warn (dev->net,"usbnet_suspend error\n" ); + pdata->pm_task =NULL ;return ret; }
@@ -1717,6 +1723,7 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)if (ret &&PMSG_IS_AUTO (message))usbnet_resume (intf); + pdata->pm_task =NULL ;return ret; }
@@ -1737,29 +1744,31 @@ static int smsc95xx_resume(struct usb_interface *intf)/* do this first to ensure it's cleared even in error case */ pdata->suspend_flags =0 ; + pdata->pm_task = current; +if (suspend_flags &SUSPEND_ALLMODES ) {/* clear wake-up sources */ ret =smsc95xx_read_reg_nopm (dev,WUCSR , &val);if (ret <0 ) -return ret; + goto done; val &= ~(WUCSR_WAKE_EN_ |WUCSR_MPEN_ ); ret =smsc95xx_write_reg_nopm (dev,WUCSR , val);if (ret <0 ) -return ret; + goto done;/* clear wake-up status */ ret =smsc95xx_read_reg_nopm (dev,PM_CTRL , &val);if (ret <0 ) -return ret; + goto done; val &= ~PM_CTL_WOL_EN_ ; val |=PM_CTL_WUPS_ ; ret =smsc95xx_write_reg_nopm (dev,PM_CTRL , val);if (ret <0 ) -return ret; + goto done; } ret =usbnet_resume (intf);
@@ -1767,15 +1776,21 @@ static int smsc95xx_resume(struct usb_interface *intf)netdev_warn (dev->net,"usbnet_resume error\n" );phy_init_hw (pdata->phydev); + +done: + pdata->pm_task =NULL ;return ret; }static int smsc95xx_reset_resume (struct usb_interface *intf) {struct usbnet *dev =usb_get_intfdata (intf); +struct smsc95xx_priv *pdata = dev->driver_priv;int ret; + pdata->pm_task = current; ret =smsc95xx_reset (dev); + pdata->pm_task =NULL ;if (ret <0 )return ret;
drivers/nvme/host/core.c +6 -0
@@ -3330,11 +3330,17 @@ static long nvme_dev_ioctl(struct file *file, unsigned int cmd,case NVME_IOCTL_IO_CMD :return nvme_dev_user_cmd (ctrl, argp);case NVME_IOCTL_RESET : +if (!capable (CAP_SYS_ADMIN )) +return -EACCES ;dev_warn (ctrl->device,"resetting controller\n" );return nvme_reset_ctrl_sync (ctrl);case NVME_IOCTL_SUBSYS_RESET : +if (!capable (CAP_SYS_ADMIN )) +return -EACCES ;return nvme_reset_subsystem (ctrl);case NVME_IOCTL_RESCAN : +if (!capable (CAP_SYS_ADMIN )) +return -EACCES ;nvme_queue_scan (ctrl);return 0 ;default :
drivers/nvme/host/nvme.h +13 -3
@@ -544,11 +544,23 @@ static inline void nvme_fault_inject_fini(struct nvme_fault_inject *fault_inj)static inline void nvme_should_fail (struct request *req) {}#endif +bool nvme_wait_reset (struct nvme_ctrl *ctrl); +int nvme_try_sched_reset (struct nvme_ctrl *ctrl); +static inline int nvme_reset_subsystem (struct nvme_ctrl *ctrl) { +int ret; +if (!ctrl->subsystem)return -ENOTTY ; -return ctrl->ops->reg_write32 (ctrl,NVME_REG_NSSR ,0x4E564D65 ); +if (!nvme_wait_reset (ctrl)) +return -EBUSY ; + + ret = ctrl->ops->reg_write32 (ctrl,NVME_REG_NSSR ,0x4E564D65 ); +if (ret) +return ret; + +return nvme_try_sched_reset (ctrl); }/*
@@ -635,7 +647,6 @@ void nvme_cancel_tagset(struct nvme_ctrl *ctrl);void nvme_cancel_admin_tagset (struct nvme_ctrl *ctrl);bool nvme_change_ctrl_state (struct nvme_ctrl *ctrl,enum nvme_ctrl_state new_state); -bool nvme_wait_reset (struct nvme_ctrl *ctrl);int nvme_disable_ctrl (struct nvme_ctrl *ctrl);int nvme_enable_ctrl (struct nvme_ctrl *ctrl);int nvme_shutdown_ctrl (struct nvme_ctrl *ctrl);
@@ -688,7 +699,6 @@ int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count);void nvme_stop_keep_alive (struct nvme_ctrl *ctrl);int nvme_reset_ctrl (struct nvme_ctrl *ctrl);int nvme_reset_ctrl_sync (struct nvme_ctrl *ctrl); -int nvme_try_sched_reset (struct nvme_ctrl *ctrl);int nvme_delete_ctrl (struct nvme_ctrl *ctrl); int nvme_get_log(struct nvme_ctrl *ctrl, u32 nsid, u8 log_page, u8 lsp, u8 csi,
drivers/parport/parport_pc.c +1 -1
@@ -468,7 +468,7 @@ static size_t parport_pc_fifo_write_block_pio(struct parport *port,const unsigned char *bufp = buf;size_t left = length;unsigned long expire = jiffies + port->physport->cad->timeout; -const int fifo =FIFO (port); +const unsigned long fifo =FIFO (port);int poll_for =8 ;/* 80 usecs */ const struct parport_pc_private *priv = port->physport->private_data;const int fifo_depth = priv->fifo_depth;
drivers/pinctrl/devicetree.c +2 -0
@@ -220,6 +220,8 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev)for (state =0 ; ; state++) {/* Retrieve the pinctrl-* property */ propname =kasprintf (GFP_KERNEL ,"pinctrl-%d" , state); +if (!propname) +return -ENOMEM ; prop =of_find_property (np, propname, &size);kfree (propname);if (!prop) {
drivers/platform/x86/intel_pmc_core_pltdrv.c +9 -0
@@ -18,6 +18,8 @@#include <asm/cpu_device_id.h> #include <asm/intel-family.h> +#include <xen/xen.h> +static void intel_pmc_core_release (struct device *dev) {kfree (dev);
@@ -53,6 +55,13 @@ static int __init pmc_core_platform_init(void)if (acpi_dev_present ("INT33A1" ,NULL ,-1 ))return -ENODEV ; +/* +* Skip forcefully attaching the device for VMs. Make an exception for +* Xen dom0, which does have full hardware access. +*/ +if (cpu_feature_enabled (X86_FEATURE_HYPERVISOR ) && !xen_initial_domain ()) +return -ENODEV ; +if (!x86_match_cpu (intel_pmc_core_platform_ids))return -ENODEV ;
drivers/s390/scsi/zfcp_fsf.c +1 -1
@@ -866,7 +866,7 @@ static int zfcp_fsf_req_send(struct zfcp_fsf_req *req)const bool is_srb =zfcp_fsf_req_is_status_read_buffer (req);struct zfcp_adapter *adapter = req->adapter;struct zfcp_qdio *qdio = adapter->qdio; -int req_id = req->req_id; +unsigned long req_id = req->req_id;zfcp_reqlist_add (adapter->req_list, req);
drivers/scsi/scsi_debug.c +5 -1
@@ -7079,8 +7079,12 @@ static int sdebug_add_host_helper(int per_host_idx)dev_set_name (&sdbg_host->dev,"adapter%d" , sdebug_num_hosts); error =device_register (&sdbg_host->dev); -if (error) +if (error) { +spin_lock (&sdebug_host_list_lock); +list_del (&sdbg_host->host_list); +spin_unlock (&sdebug_host_list_lock); goto clean; + } ++sdebug_num_hosts;return 0 ;
drivers/siox/siox-core.c +2 -0
@@ -835,6 +835,8 @@ static struct siox_device *siox_device_add(struct siox_master *smaster, err_device_register:/* don't care to make the buffer smaller again */ +put_device (&sdevice->dev); + sdevice =NULL ; err_buf_alloc:siox_master_unlock (smaster);
drivers/slimbus/stream.c +4 -4
@@ -67,10 +67,10 @@ static const int slim_presence_rate_table[] = {384000 ,768000 ,0 ,/* Reserved */ -110250 , -220500 , -441000 , -882000 , +11025 , +22050 , +44100 , +88200 ,176400 ,352800 , 705600,
drivers/spi/spi-stm32.c +1 -0
@@ -941,6 +941,7 @@ static irqreturn_t stm32h7_spi_irq_thread(int irq, void *dev_id) static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL * 10, 1); +ratelimit_set_flags (&rs,RATELIMIT_MSG_ON_RELEASE );if (__ratelimit (&rs))dev_dbg_ratelimited (spi->dev,"Communication suspended\n" );if (!spi->cur_usedma && (spi->rx_buf && (spi->rx_len >0 )))
drivers/target/loopback/tcm_loop.c +2 -1
@@ -394,6 +394,7 @@ static int tcm_loop_setup_hba_bus(struct tcm_loop_hba *tl_hba, int tcm_loop_host ret =device_register (&tl_hba->dev);if (ret) {pr_err ("device_register() failed for tl_hba->dev: %d\n" , ret); +put_device (&tl_hba->dev);return -ENODEV ; }
@@ -1072,7 +1073,7 @@ static struct se_wwn *tcm_loop_make_scsi_hba(*/ ret =tcm_loop_setup_hba_bus (tl_hba, tcm_loop_hba_no_cnt);if (ret) - goto out; +return ERR_PTR (ret); sh = tl_hba->sh; tcm_loop_hba_no_cnt++;
drivers/tty/n_gsm.c +1 -1
@@ -1416,7 +1416,7 @@ static struct gsm_control *gsm_control_send(struct gsm_mux *gsm, unsigned int command, u8 *data, int clen) { struct gsm_control *ctrl = kzalloc(sizeof(struct gsm_control), -GFP_KERNEL ); +GFP_ATOMIC );unsigned long flags;if (ctrl ==NULL )return NULL ;
drivers/tty/serial/8250/8250_lpss.c +11 -4
@@ -268,8 +268,13 @@ static int lpss8250_dma_setup(struct lpss8250 *lpss, struct uart_8250_port *portstruct dw_dma_slave *rx_param, *tx_param;struct device *dev = port->port.dev; -if (!lpss->dma_param.dma_dev) +if (!lpss->dma_param.dma_dev) { + dma = port->dma; +if (dma) + goto out_configuration_only; +return 0 ; + } rx_param =devm_kzalloc (dev,sizeof (*rx_param),GFP_KERNEL );if (!rx_param)
@@ -280,16 +285,18 @@ static int lpss8250_dma_setup(struct lpss8250 *lpss, struct uart_8250_port *portreturn -ENOMEM ; *rx_param = lpss->dma_param; - dma->rxconf.src_maxburst = lpss->dma_maxburst; - *tx_param = lpss->dma_param; - dma->txconf.dst_maxburst = lpss->dma_maxburst; dma->fn = lpss8250_dma_filter; dma->rx_param = rx_param; dma->tx_param = tx_param; port->dma = dma; + +out_configuration_only: + dma->rxconf.src_maxburst = lpss->dma_maxburst; + dma->txconf.dst_maxburst = lpss->dma_maxburst; +return 0 ; }
drivers/tty/serial/8250/8250_omap.c +26 -19
82 lines not on this page · raw message
drivers/tty/serial/8250/8250_port.c +7 -18
@@ -661,13 +661,6 @@ int serial8250_em485_config(struct uart_port *port, struct serial_rs485 *rs485) rs485->flags &= ~SER_RS485_RTS_AFTER_SEND ; } -/* clamp the delays to [0, 100ms] */ - rs485->delay_rts_before_send =min (rs485->delay_rts_before_send,100U ); - rs485->delay_rts_after_send =min (rs485->delay_rts_after_send,100U ); - -memset (rs485->padding,0 ,sizeof (rs485->padding)); - port->rs485 = *rs485; -gpiod_set_value (port->rs485_term_gpio, rs485->flags &SER_RS485_TERMINATE_BUS );
@@ -675,15 +668,8 @@ int serial8250_em485_config(struct uart_port *port, struct serial_rs485 *rs485)* Both serial8250_em485_init() and serial8250_em485_destroy() * are idempotent. */ -if (rs485->flags &SER_RS485_ENABLED ) { -int ret =serial8250_em485_init (up); - -if (ret) { - rs485->flags &= ~SER_RS485_ENABLED ; - port->rs485.flags &= ~SER_RS485_ENABLED ; - } -return ret; - } +if (rs485->flags &SER_RS485_ENABLED ) +return serial8250_em485_init (up);serial8250_em485_destroy (up);return 0 ;
@@ -1883,10 +1869,13 @@ EXPORT_SYMBOL_GPL(serial8250_modem_status);static bool handle_rx_dma (struct uart_8250_port *up,unsigned int iir) {switch (iir &0x3f ) { -case UART_IIR_RX_TIMEOUT : -serial8250_rx_dma_flush (up); +case UART_IIR_RDI : +if (!up->dma->rx_running) +break ; fallthrough;case UART_IIR_RLSI : +case UART_IIR_RX_TIMEOUT : +serial8250_rx_dma_flush (up);return true; }return up->dma->rx_dma (up);
drivers/tty/serial/imx.c +1 -0
@@ -2626,6 +2626,7 @@ static const struct dev_pm_ops imx_uart_pm_ops = { .suspend_noirq = imx_uart_suspend_noirq, .resume_noirq = imx_uart_resume_noirq, .freeze_noirq = imx_uart_suspend_noirq, + .thaw_noirq = imx_uart_resume_noirq, .restore_noirq = imx_uart_resume_noirq, .suspend = imx_uart_suspend, .resume = imx_uart_resume,
drivers/usb/chipidea/otg_fsm.c +2 -0
@@ -256,8 +256,10 @@ static void ci_otg_del_timer(struct ci_hdrc *ci, enum otg_fsm_timer t) ci->enabled_otg_timer_bits &= ~(1 << t);if (ci->next_otg_timer == t) {if (ci->enabled_otg_timer_bits ==0 ) { +spin_unlock_irqrestore (&ci->lock, flags);/* No enabled timers after delete it */ hrtimer_cancel (&ci->otg_fsm_hrtimer); +spin_lock_irqsave (&ci->lock, flags); ci->next_otg_timer =NUM_OTG_FSM_TIMERS ; }else {/* Find the next timer */
drivers/usb/core/quirks.c +3 -0
@@ -362,6 +362,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x0781, 0x5583), .driver_info = USB_QUIRK_NO_LPM }, { USB_DEVICE(0x0781, 0x5591), .driver_info = USB_QUIRK_NO_LPM }, + /* Realforce 87U Keyboard */ + { USB_DEVICE(0x0853, 0x011b), .driver_info = USB_QUIRK_NO_LPM }, + /* M-Systems Flash Disk Pioneers */ { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
drivers/usb/dwc3/host.c +0 -10
@@ -10,13 +10,8 @@#include <linux/acpi.h> #include <linux/platform_device.h> -#include "../host/xhci-plat.h" #include "core.h" -static const struct xhci_plat_priv dwc3_xhci_plat_priv = { - .quirks =XHCI_SKIP_PHY_INIT , -}; -static int dwc3_host_get_irq (struct dwc3 *dwc) {struct platform_device *dwc3_pdev =to_platform_device (dwc->dev);
@@ -92,11 +87,6 @@ int dwc3_host_init(struct dwc3 *dwc) goto err; } - ret =platform_device_add_data (xhci, &dwc3_xhci_plat_priv, -sizeof (dwc3_xhci_plat_priv)); -if (ret) - goto err; -memset (props,0 ,sizeof (struct property_entry ) *ARRAY_SIZE (props));if (dwc->usb3_lpm_capable)
drivers/usb/host/bcma-hcd.c +6 -4
@@ -285,7 +285,7 @@ static void bcma_hci_platform_power_gpio(struct bcma_device *dev, bool val) {struct bcma_hcd_device *usb_dev =bcma_get_drvdata (dev); -if (IS_ERR_OR_NULL (usb_dev->gpio_desc)) +if (!usb_dev->gpio_desc)return ;gpiod_set_value (usb_dev->gpio_desc, val);
@@ -406,9 +406,11 @@ static int bcma_hcd_probe(struct bcma_device *core)return -ENOMEM ; usb_dev->core = core; -if (core->dev.of_node) - usb_dev->gpio_desc =devm_gpiod_get (&core->dev,"vcc" , -GPIOD_OUT_HIGH ); + usb_dev->gpio_desc =devm_gpiod_get_optional (&core->dev,"vcc" , +GPIOD_OUT_HIGH ); +if (IS_ERR (usb_dev->gpio_desc)) +return dev_err_probe (&core->dev,PTR_ERR (usb_dev->gpio_desc), +"error obtaining VCC GPIO" );switch (core->id.id) {case BCMA_CORE_USB20_HOST :
drivers/usb/serial/option.c +17 -2
@@ -162,6 +162,8 @@ static void option_instat_callback(struct urb *urb);#define NOVATELWIRELESS_PRODUCT_G2 0xA010#define NOVATELWIRELESS_PRODUCT_MC551 0xB001 +#define UBLOX_VENDOR_ID 0x1546 +/* AMOI PRODUCTS */ #define AMOI_VENDOR_ID 0x1614#define AMOI_PRODUCT_H01 0x0800
@@ -240,7 +242,6 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_PRODUCT_UC15 0x9090/* These u-blox products use Qualcomm's vendor ID */ #define UBLOX_PRODUCT_R410M 0x90b2 -#define UBLOX_PRODUCT_R6XX 0x90fa/* These Yuga products use Qualcomm's vendor ID */ #define YUGA_PRODUCT_CLM920_NC5 0x9625
@@ -581,6 +582,9 @@ static void option_instat_callback(struct urb *urb);#define OPPO_VENDOR_ID 0x22d9#define OPPO_PRODUCT_R11 0x276c +/* Sierra Wireless products */ +#define SIERRA_VENDOR_ID 0x1199 +#define SIERRA_PRODUCT_EM9191 0x90d3/* Device flags */
@@ -1124,8 +1128,16 @@ static const struct usb_device_id option_ids[] = {/* u-blox products using Qualcomm vendor ID */ { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M), .driver_info = RSVD(1) | RSVD(3) }, - { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R6XX), + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x908b), /* u-blox LARA-R6 00B */ + .driver_info = RSVD(4) }, + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x90fa), .driver_info = RSVD(3) }, +/* u-blox products */ + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1341) }, /* u-blox LARA-L6 */ + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1342), /* u-blox LARA-L6 (RMNET) */ + .driver_info = RSVD(4) }, + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1343), /* u-blox LARA-L6 (ECM) */ + .driver_info = RSVD(4) },/* Quectel products using Quectel vendor ID */ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0xff, 0xff), .driver_info = NUMEP2 },
@@ -2167,6 +2179,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x010a, 0xff) }, /* Fibocom MA510 (ECM mode) */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0111, 0xff) }, /* Fibocom FM160 (MBIM mode) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */
@@ -2176,6 +2189,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */ { USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
drivers/usb/typec/mux/intel_pmc_mux.c +13 -2
@@ -339,13 +339,24 @@ pmc_usb_mux_usb4(struct pmc_usb_port *port, struct typec_mux_state *state)return pmc_usb_command (port, (void *)&req,sizeof (req)); } -static int pmc_usb_mux_safe_state (struct pmc_usb_port *port) +static int pmc_usb_mux_safe_state (struct pmc_usb_port *port, +struct typec_mux_state *state) {u8 msg;if (IOM_PORT_ACTIVITY_IS (port->iom_status,SAFE_MODE ))return 0 ; +if ((IOM_PORT_ACTIVITY_IS (port->iom_status,DP ) || +IOM_PORT_ACTIVITY_IS (port->iom_status,DP_MFD )) && + state->alt && state->alt->svid ==USB_TYPEC_DP_SID ) +return 0 ; + +if ((IOM_PORT_ACTIVITY_IS (port->iom_status,TBT ) || +IOM_PORT_ACTIVITY_IS (port->iom_status,ALT_MODE_TBT_USB )) && + state->alt && state->alt->svid ==USB_TYPEC_TBT_SID ) +return 0 ; + msg =PMC_USB_SAFE_MODE ; msg |= port->usb3_port <<PMC_USB_MSG_USB3_PORT_SHIFT ;
@@ -413,7 +424,7 @@ pmc_usb_mux_set(struct typec_mux *mux, struct typec_mux_state *state)return 0 ;if (state->mode ==TYPEC_STATE_SAFE ) -return pmc_usb_mux_safe_state (port); +return pmc_usb_mux_safe_state (port, state);if (state->mode ==TYPEC_STATE_USB )return pmc_usb_connect (port, port->role);
drivers/xen/pcpu.c +1 -1
@@ -228,7 +228,7 @@ static int register_pcpu(struct pcpu *pcpu) err =device_register (dev);if (err) { -pcpu_release (dev); +put_device (dev);return err; }
fs/btrfs/tests/qgroup-tests.c +4 -12
@@ -230,7 +230,6 @@ static int test_no_shared_qgroup(struct btrfs_root *root, ret =btrfs_find_all_roots (&trans, fs_info, nodesize,0 , &old_roots, false);if (ret) { -ulist_free (old_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -246,7 +245,6 @@ static int test_no_shared_qgroup(struct btrfs_root *root, false);if (ret) {ulist_free (old_roots); -ulist_free (new_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -258,18 +256,19 @@ static int test_no_shared_qgroup(struct btrfs_root *root,return ret; } +/* btrfs_qgroup_account_extent() always frees the ulists passed to it. */ + old_roots =NULL ; + new_roots =NULL ; +if (btrfs_verify_qgroup_counts (fs_info,BTRFS_FS_TREE_OBJECTID , nodesize, nodesize)) {test_err ("qgroup counts didn't match expected values" );return -EINVAL ; } - old_roots =NULL ; - new_roots =NULL ; ret =btrfs_find_all_roots (&trans, fs_info, nodesize,0 , &old_roots, false);if (ret) { -ulist_free (old_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -284,7 +283,6 @@ static int test_no_shared_qgroup(struct btrfs_root *root, false);if (ret) {ulist_free (old_roots); -ulist_free (new_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -335,7 +333,6 @@ static int test_multiple_refs(struct btrfs_root *root, ret =btrfs_find_all_roots (&trans, fs_info, nodesize,0 , &old_roots, false);if (ret) { -ulist_free (old_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -351,7 +348,6 @@ static int test_multiple_refs(struct btrfs_root *root, false);if (ret) {ulist_free (old_roots); -ulist_free (new_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -372,7 +368,6 @@ static int test_multiple_refs(struct btrfs_root *root, ret =btrfs_find_all_roots (&trans, fs_info, nodesize,0 , &old_roots, false);if (ret) { -ulist_free (old_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -388,7 +383,6 @@ static int test_multiple_refs(struct btrfs_root *root, false);if (ret) {ulist_free (old_roots); -ulist_free (new_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -415,7 +409,6 @@ static int test_multiple_refs(struct btrfs_root *root, ret =btrfs_find_all_roots (&trans, fs_info, nodesize,0 , &old_roots, false);if (ret) { -ulist_free (old_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
@@ -431,7 +424,6 @@ static int test_multiple_refs(struct btrfs_root *root, false);if (ret) {ulist_free (old_roots); -ulist_free (new_roots);test_err ("couldn't find old roots: %d" , ret);return ret; }
fs/buffer.c +2 -2
@@ -2350,7 +2350,7 @@ int generic_cont_expand_simple(struct inode *inode, loff_t size) {struct address_space *mapping = inode->i_mapping;struct page *page; -void *fsdata; +void *fsdata =NULL ;int err; err =inode_newsize_ok (inode, size);
@@ -2376,7 +2376,7 @@ static int cont_expand_zero(struct file *file, struct address_space *mapping,struct inode *inode = mapping->host;unsigned int blocksize =i_blocksize (inode);struct page *page; -void *fsdata; +void *fsdata =NULL ;pgoff_t index, curidx;loff_t curpos;unsigned zerofrom, offset, len;
fs/cifs/ioctl.c +2 -2
@@ -193,7 +193,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) rc =put_user (ExtAttrBits &FS_FL_USER_VISIBLE , (int __user *)arg); -if (rc !=EOPNOTSUPP ) +if (rc != -EOPNOTSUPP ) break; }#endif /* CONFIG_CIFS_POSIX */
@@ -222,7 +222,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)* pSMBFile->fid.netfid, * extAttrBits, * &ExtAttrMask); -* if (rc != EOPNOTSUPP) +* if (rc != -EOPNOTSUPP) * break; */
fs/cifs/smb2ops.c +4 -0
@@ -1256,6 +1256,8 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,COMPOUND_FID , current->tgid,FILE_FULL_EA_INFORMATION , SMB2_O_INFO_FILE, 0, data, size); +if (rc) + goto sea_exit;smb2_set_next_command (tcon, &rqst[1 ]);smb2_set_related (&rqst[1 ]);
@@ -1266,6 +1268,8 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon, rqst[2 ].rq_nvec =1 ; rc =SMB2_close_init (tcon, server, &rqst[2 ],COMPOUND_FID ,COMPOUND_FID , false); +if (rc) + goto sea_exit;smb2_set_related (&rqst[2 ]); rc = compound_send_recv(xid, ses, server,
fs/gfs2/ops_fstype.c +11 -6
@@ -182,7 +182,10 @@ static int gfs2_check_sb(struct gfs2_sbd *sdp, int silent)pr_warn ("Invalid superblock size\n" );return -EINVAL ; } - +if (sb->sb_bsize_shift !=ffs (sb->sb_bsize) -1 ) { +pr_warn ("Invalid block size shift\n" ); +return -EINVAL ; + }return 0 ; }
@@ -381,8 +384,10 @@ static int init_names(struct gfs2_sbd *sdp, int silent)if (!table[0 ]) table = sdp->sd_vfs->s_id; -strlcpy (sdp->sd_proto_name, proto,GFS2_FSNAME_LEN ); -strlcpy (sdp->sd_table_name, table,GFS2_FSNAME_LEN ); +BUILD_BUG_ON (GFS2_LOCKNAME_LEN >GFS2_FSNAME_LEN ); + +strscpy (sdp->sd_proto_name, proto,GFS2_LOCKNAME_LEN ); +strscpy (sdp->sd_table_name, table,GFS2_LOCKNAME_LEN ); table = sdp->sd_table_name;while ((table =strchr (table,'/' )))
@@ -1414,13 +1419,13 @@ static int gfs2_parse_param(struct fs_context *fc, struct fs_parameter *param)switch (o) {case Opt_lockproto: -strlcpy (args->ar_lockproto, param->string,GFS2_LOCKNAME_LEN ); +strscpy (args->ar_lockproto, param->string,GFS2_LOCKNAME_LEN );break ;case Opt_locktable: -strlcpy (args->ar_locktable, param->string,GFS2_LOCKNAME_LEN ); +strscpy (args->ar_locktable, param->string,GFS2_LOCKNAME_LEN );break ;case Opt_hostdata: -strlcpy (args->ar_hostdata, param->string,GFS2_LOCKNAME_LEN ); +strscpy (args->ar_hostdata, param->string,GFS2_LOCKNAME_LEN );break ;case Opt_spectator: args->ar_spectator =1 ;
fs/namei.c +1 -1
@@ -4633,7 +4633,7 @@ int __page_symlink(struct inode *inode, const char *symname, int len, int nofs) {struct address_space *mapping = inode->i_mapping;struct page *page; -void *fsdata; +void *fsdata =NULL ;int err;unsigned int flags =0 ;if (nofs)
fs/nfs/nfs4proc.c +4 -2
@@ -7014,6 +7014,7 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata) {struct nfs4_lockdata *data = calldata;struct nfs4_lock_state *lsp = data->lsp; +struct nfs_server *server =NFS_SERVER (d_inode (data->ctx->dentry));dprintk ("%s: begin!\n" , __func__);
@@ -7023,8 +7024,7 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata) data->rpc_status = task->tk_status;switch (task->tk_status) {case 0 : -renew_lease (NFS_SERVER (d_inode (data->ctx->dentry)), - data->timestamp); +renew_lease (server, data->timestamp);if (data->arg.new_lock && !data->cancelled) { data->fl.fl_flags &= ~(FL_SLEEP |FL_ACCESS );if (locks_lock_inode_wait (lsp->ls_state->inode, &data->fl) <0 )
@@ -7045,6 +7045,8 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata)if (!nfs4_stateid_match (&data->arg.open_stateid, &lsp->ls_state->open_stateid)) goto out_restart; +else if (nfs4_async_handle_error (task, server, lsp->ls_state,NULL ) == -EAGAIN ) + goto out_restart; }else if (!nfs4_stateid_match (&data->arg.lock_stateid, &lsp->ls_stateid)) goto out_restart;
fs/ntfs/attrib.c +24 -4
@@ -594,17 +594,37 @@ static int ntfs_attr_find(const ATTR_TYPE type, const ntfschar *name,for (;; a = (ATTR_RECORD *)((u8 *)a +le32_to_cpu (a->length))) {u8 *mrec_end = (u8 *)ctx->mrec +le32_to_cpu (ctx->mrec->bytes_allocated); -u8 *name_end = (u8 *)a +le16_to_cpu (a->name_offset) + - a->name_length *sizeof (ntfschar); -if ((u8 *)a < (u8 *)ctx->mrec || (u8 *)a > mrec_end || - name_end > mrec_end) +u8 *name_end; + +/* check whether ATTR_RECORD wrap */ +if ((u8 *)a < (u8 *)ctx->mrec) +break ; + +/* check whether Attribute Record Header is within bounds */ +if ((u8 *)a > mrec_end || + (u8 *)a +sizeof (ATTR_RECORD ) > mrec_end) +break ; + +/* check whether ATTR_RECORD's name is within bounds */ + name_end = (u8 *)a +le16_to_cpu (a->name_offset) + + a->name_length *sizeof (ntfschar); +if (name_end > mrec_end)break ; + ctx->attr = a;if (unlikely (le32_to_cpu (a->type) >le32_to_cpu (type) || a->type ==AT_END ))return -ENOENT ;if (unlikely (!a->length))break ; + +/* check whether ATTR_RECORD's length wrap */ +if ((u8 *)a +le32_to_cpu (a->length) < (u8 *)a) +break ; +/* check whether ATTR_RECORD's length is within bounds */ +if ((u8 *)a +le32_to_cpu (a->length) > mrec_end) +break ; +if (a->type != type)continue ;/*
fs/ntfs/inode.c +7 -0
@@ -1829,6 +1829,13 @@ int ntfs_read_inode_mount(struct inode *vi) goto err_out; } +/* Sanity check offset to the first attribute */ +if (le16_to_cpu (m->attrs_offset) >=le32_to_cpu (m->bytes_allocated)) { +ntfs_error (sb,"Incorrect mft offset to the first attribute %u in superblock." , +le16_to_cpu (m->attrs_offset)); + goto err_out; + } +/* Need this to sanity check attribute list references to $MFT. */ vi->i_generation = ni->seq_no =le16_to_cpu (m->sequence_number);
include/linux/platform_data/intel-spi.h +4 -2
@@ -19,11 +19,13 @@ enum intel_spi_type {/** * struct intel_spi_boardinfo - Board specific data for Intel SPI driver * @type: Type which this controller is compatible with -* @writeable: The chip is writeable +* @set_writeable: Try to make the chip writeable (optional) +* @data: Data to be passed to @set_writeable can be %NULL */ struct intel_spi_boardinfo {enum intel_spi_type type; -bool writeable; +bool (*set_writeable)(void __iomem *base,void *data); +void *data; };#endif /* INTEL_SPI_PDATA_H */
include/linux/ring_buffer.h +1 -1
@@ -99,7 +99,7 @@ __ring_buffer_alloc(unsigned long size, unsigned flags, struct lock_class_key *kint ring_buffer_wait (struct trace_buffer *buffer,int cpu,int full);__poll_t ring_buffer_poll_wait (struct trace_buffer *buffer,int cpu, -struct file *filp,poll_table *poll_table); +struct file *filp,poll_table *poll_table,int full);void ring_buffer_wake_waiters (struct trace_buffer *buffer,int cpu);#define RING_BUFFER_ALL_CPUS -1
include/linux/stddef.h +48 -0
52 lines not on this page · raw message
include/net/ip.h +1 -1
@@ -545,7 +545,7 @@ static inline void iph_to_flow_copy_v4addrs(struct flow_keys *flow, BUILD_BUG_ON(offsetof(typeof(flow->addrs), v4addrs.dst) != offsetof(typeof(flow->addrs), v4addrs.src) + sizeof(flow->addrs.v4addrs.src)); -memcpy (&flow->addrs.v4addrs, &iph->saddr,sizeof (flow->addrs.v4addrs)); +memcpy (&flow->addrs.v4addrs, &iph->addrs,sizeof (flow->addrs.v4addrs)); flow->control.addr_type =FLOW_DISSECTOR_KEY_IPV4_ADDRS ; }
include/net/ipv6.h +1 -1
@@ -842,7 +842,7 @@ static inline void iph_to_flow_copy_v6addrs(struct flow_keys *flow, BUILD_BUG_ON(offsetof(typeof(flow->addrs), v6addrs.dst) != offsetof(typeof(flow->addrs), v6addrs.src) + sizeof(flow->addrs.v6addrs.src)); -memcpy (&flow->addrs.v6addrs, &iph->saddr,sizeof (flow->addrs.v6addrs)); +memcpy (&flow->addrs.v6addrs, &iph->addrs,sizeof (flow->addrs.v6addrs)); flow->control.addr_type =FLOW_DISSECTOR_KEY_IPV6_ADDRS ; }
include/uapi/linux/ip.h +4 -2
@@ -100,8 +100,10 @@ struct iphdr {__u8 ttl;__u8 protocol;__sum16 check; -__be32 saddr; -__be32 daddr; + __struct_group(/* no tag */, addrs, /* no attrs */, + __be32 saddr; +__be32 daddr; + );/*The options start here. */ };
include/uapi/linux/ipv6.h +4 -2
@@ -130,8 +130,10 @@ struct ipv6hdr {__u8 nexthdr;__u8 hop_limit; -struct in6_addr saddr; -struct in6_addr daddr; + __struct_group(/* no tag */, addrs, /* no attrs */, +struct in6_addr saddr; +struct in6_addr daddr; + ); };
include/uapi/linux/stddef.h +25 -0
@@ -1,6 +1,31 @@/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _UAPI_LINUX_STDDEF_H +#define _UAPI_LINUX_STDDEF_H +#include <linux/compiler_types.h> #ifndef __always_inline#define __always_inline inline#endif + +/** +* __struct_group() - Create a mirrored named and anonyomous struct +* +* @TAG: The tag name for the named sub-struct (usually empty) +* @NAME: The identifier name of the mirrored sub-struct +* @ATTRS: Any struct attributes (usually empty) +* @MEMBERS: The member declarations for the mirrored structs +* +* Used to create an anonymous union of two structs with identical layout +* and size: one anonymous and one named. The former's members can be used +* normally without sub-struct naming, and the latter can be used to +* reason about the start, end, and size of the group of struct members. +* The named struct can also be explicitly tagged for layer reuse, as well +* as both having struct attributes appended. +*/ +#define __struct_group(TAG, NAME, ATTRS, MEMBERS...) \ + union { \ + struct { MEMBERS } ATTRS; \ + struct TAG { MEMBERS } ATTRS NAME; \ + } +#endif
kernel/bpf/percpu_freelist.c +11 -12
@@ -102,22 +102,21 @@ void pcpu_freelist_populate(struct pcpu_freelist *s, void *buf, u32 elem_size, u32 nr_elems) {struct pcpu_freelist_head *head; -int i, cpu, pcpu_entries; +unsigned int cpu, cpu_idx, i, j, n, m; - pcpu_entries = nr_elems /num_possible_cpus () +1 ; - i =0 ; + n = nr_elems /num_possible_cpus (); + m = nr_elems %num_possible_cpus (); + cpu_idx =0 ;for_each_possible_cpu (cpu) { -again: head =per_cpu_ptr (s->freelist, cpu); -/* No locking required as this is not visible yet. */ -pcpu_freelist_push_node (head, buf); - i++; - buf += elem_size; -if (i == nr_elems) -break ; -if (i % pcpu_entries) - goto again; + j = n + (cpu_idx < m ?1 :0 ); +for (i =0 ; i < j; i++) { +/* No locking required as this is not visible yet. */ +pcpu_freelist_push_node (head, buf); + buf += elem_size; + } + cpu_idx++; } }
kernel/kprobes.c +7 -1
@@ -1841,7 +1841,13 @@ static int __unregister_kprobe_top(struct kprobe *p)if ((list_p != p) && (list_p->post_handler)) goto noclean; } - ap->post_handler =NULL ; +/* +* For the kprobe-on-ftrace case, we keep the +* post_handler setting to identify this aggrprobe +* armed with kprobe_ipmodify_ops. +*/ +if (!kprobe_ftrace (ap)) + ap->post_handler =NULL ; } noclean:/*
kernel/trace/ftrace.c +3 -2
@@ -1295,6 +1295,7 @@ static int ftrace_add_mod(struct trace_array *tr,if (!ftrace_mod)return -ENOMEM ; +INIT_LIST_HEAD (&ftrace_mod->list); ftrace_mod->func =kstrdup (func,GFP_KERNEL ); ftrace_mod->module =kstrdup (module,GFP_KERNEL ); ftrace_mod->enable = enable;
@@ -3178,7 +3179,7 @@ static int ftrace_allocate_records(struct ftrace_page *pg, int count)/* if we can't allocate this size, try something smaller */ if (!order)return -ENOMEM ; - order >>=1 ; + order--; goto again; }
@@ -6877,7 +6878,7 @@ void __init ftrace_init(void) }pr_info ("ftrace: allocating %ld entries in %ld pages\n" , - count, count /ENTRIES_PER_PAGE +1 ); + count,DIV_ROUND_UP (count,ENTRIES_PER_PAGE )); last_ftrace_enabled = ftrace_enabled =1 ;
kernel/trace/kprobe_event_gen_test.c +32 -16
84 lines not on this page · raw message
kernel/trace/ring_buffer.c +50 -21
175 lines not on this page · raw message
kernel/trace/synth_event_gen_test.c +6 -10
@@ -120,15 +120,13 @@ static int __init test_gen_synth_cmd(void)/* Now generate a gen_synth_test event */ ret =synth_event_trace_array (gen_synth_test, vals,ARRAY_SIZE (vals)); - out: + free: +kfree (buf);return ret; delete:/* We got an error after creating the event, delete it */ synth_event_delete ("gen_synth_test" ); - free: -kfree (buf); - - goto out; + goto free; }/*
@@ -227,15 +225,13 @@ static int __init test_empty_synth_event(void)/* Now trace an empty_synth_test event */ ret =synth_event_trace_array (empty_synth_test, vals,ARRAY_SIZE (vals)); - out: + free: +kfree (buf);return ret; delete:/* We got an error after creating the event, delete it */ synth_event_delete ("empty_synth_test" ); - free: -kfree (buf); - - goto out; + goto free; }static struct synth_field_desc create_synth_test_fields[] = {
kernel/trace/trace.c +1 -1
@@ -6263,7 +6263,7 @@ trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_tablreturn EPOLLIN |EPOLLRDNORM ; else return ring_buffer_poll_wait(iter->array_buffer->buffer, iter->cpu_file, - filp, poll_table); + filp, poll_table, iter->tr->buffer_percent); } static __poll_t
kernel/trace/trace_events_synth.c +2 -3
@@ -791,10 +791,9 @@ static int register_synth_event(struct synth_event *event) } ret =set_synth_event_print_fmt (call); -if (ret <0 ) { +/* unregister_trace_event() will be called inside */ +if (ret <0 )trace_remove_event_call (call); - goto err; - } out:return ret; err:
mm/filemap.c +1 -1
@@ -3303,7 +3303,7 @@ ssize_t generic_perform_write(struct file *file,unsigned long offset;/* Offset into pagecache page */ unsigned long bytes;/* Bytes to write to page */ size_t copied;/* Bytes copied from user */ -void *fsdata; +void *fsdata =NULL ; offset = (pos & (PAGE_SIZE -1 )); bytes = min_t(unsigned long, PAGE_SIZE - offset,
mm/maccess.c +1 -1
@@ -83,7 +83,7 @@ long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr, long count)return src - unsafe_addr; Efault:pagefault_enable (); - dst[-1 ] ='\0' ; + dst[0 ] ='\0' ; return -EFAULT; }#else /* HAVE_GET_KERNEL_NOFAULT */
net/9p/trans_fd.c +5 -1
@@ -205,6 +205,8 @@ static void p9_conn_cancel(struct p9_conn *m, int err)list_move (&req->req_list, &cancel_list); } +spin_unlock (&m->client->lock); +list_for_each_entry_safe (req, rtmp, &cancel_list, req_list) {p9_debug (P9_DEBUG_ERROR ,"call back req %p\n" , req);list_del (&req->req_list);
@@ -212,7 +214,6 @@ static void p9_conn_cancel(struct p9_conn *m, int err) req->t_err = err;p9_client_cb (m->client, req,REQ_STATUS_ERROR ); } -spin_unlock (&m->client->lock); } static __poll_t
@@ -820,11 +821,14 @@ static int p9_fd_open(struct p9_client *client, int rfd, int wfd) goto out_free_ts;if (!(ts->rd->f_mode &FMODE_READ )) goto out_put_rd; +/* prevent workers from hanging on IO when fd is a pipe */ + ts->rd->f_flags |=O_NONBLOCK ; ts->wr =fget (wfd);if (!ts->wr) goto out_put_rd;if (!(ts->wr->f_mode &FMODE_WRITE )) goto out_put_wr; + ts->wr->f_flags |=O_NONBLOCK ; client->trans = ts; client->status = Connected;
net/bluetooth/l2cap_core.c +1 -1
@@ -1986,7 +1986,7 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,if (link_type ==LE_LINK && c->src_type ==BDADDR_BREDR )continue ; -if (c->psm == psm) { +if (c->chan_type !=L2CAP_CHAN_FIXED && c->psm == psm) {int src_match, dst_match;int src_any, dst_any;
net/bpf/test_run.c +1 -0
@@ -231,6 +231,7 @@ static void *bpf_test_init(const union bpf_attr *kattr, u32 size,if (user_size > size)return ERR_PTR (-EMSGSIZE ); + size =SKB_DATA_ALIGN (size); data =kzalloc (size + headroom + tailroom,GFP_USER );if (!data)return ERR_PTR (-ENOMEM );
net/caif/chnl_net.c +0 -3
@@ -315,9 +315,6 @@ static int chnl_net_open(struct net_device *dev)if (result ==0 ) {pr_debug ("connect timeout\n" ); -caif_disconnect_client (dev_net (dev), &priv->chnl); - priv->state =CAIF_DISCONNECTED ; -pr_debug ("state disconnected\n" ); result = -ETIMEDOUT ; goto error; }
net/ipv4/tcp_cdg.c +2 -0
@@ -375,6 +375,7 @@ static void tcp_cdg_init(struct sock *sk)struct cdg *ca =inet_csk_ca (sk);struct tcp_sock *tp =tcp_sk (sk); + ca->gradients =NULL ;/* We silently fall back to window = 1 if allocation fails. */ if (window >1 ) ca->gradients = kcalloc(window, sizeof(ca->gradients[0]),
@@ -388,6 +389,7 @@ static void tcp_cdg_release(struct sock *sk)struct cdg *ca =inet_csk_ca (sk);kfree (ca->gradients); + ca->gradients =NULL ; }static struct tcp_congestion_ops tcp_cdg__read_mostly = {
net/kcm/kcmsock.c +9 -53
126 lines not on this page · raw message
net/l2tp/l2tp_core.c +5 -5
@@ -1480,11 +1480,15 @@ int l2tp_tunnel_register(struct l2tp_tunnel *tunnel, struct net *net, tunnel->l2tp_net = net; pn =l2tp_pernet (net); + sk = sock->sk; +sock_hold (sk); + tunnel->sock = sk; +spin_lock_bh (&pn->l2tp_tunnel_list_lock);list_for_each_entry (tunnel_walk, &pn->l2tp_tunnel_list, list) {if (tunnel_walk->tunnel_id == tunnel->tunnel_id) {spin_unlock_bh (&pn->l2tp_tunnel_list_lock); - +sock_put (sk); ret = -EEXIST ; goto err_sock; }
@@ -1492,10 +1496,6 @@ int l2tp_tunnel_register(struct l2tp_tunnel *tunnel, struct net *net,list_add_rcu (&tunnel->list, &pn->l2tp_tunnel_list);spin_unlock_bh (&pn->l2tp_tunnel_list_lock); - sk = sock->sk; -sock_hold (sk); - tunnel->sock = sk; -if (tunnel->encap ==L2TP_ENCAPTYPE_UDP ) {struct udp_tunnel_sock_cfg udp_cfg = { .sk_user_data = tunnel,
net/sctp/outqueue.c +8 -5
@@ -384,6 +384,7 @@ static int sctp_prsctp_prune_unsent(struct sctp_association *asoc, {struct sctp_outq *q = &asoc->outqueue;struct sctp_chunk *chk, *temp; +struct sctp_stream_out *sout; q->sched->unsched_all (&asoc->stream);
@@ -398,12 +399,14 @@ static int sctp_prsctp_prune_unsent(struct sctp_association *asoc,sctp_sched_dequeue_common (q, chk); asoc->sent_cnt_removable--; asoc->abandoned_unsent[SCTP_PR_INDEX (PRIO )]++; -if (chk->sinfo.sinfo_stream < asoc->stream.outcnt) { -struct sctp_stream_out *streamout = -SCTP_SO (&asoc->stream, chk->sinfo.sinfo_stream); - streamout->ext->abandoned_unsent[SCTP_PR_INDEX (PRIO )]++; - } + sout =SCTP_SO (&asoc->stream, chk->sinfo.sinfo_stream); + sout->ext->abandoned_unsent[SCTP_PR_INDEX (PRIO )]++; + +/* clear out_curr if all frag chunks are pruned */ +if (asoc->stream.out_curr == sout && +list_is_last (&chk->frag_list, &chk->msg->chunks)) + asoc->stream.out_curr =NULL ; msg_len -= chk->skb->truesize +sizeof (struct sctp_chunk );sctp_chunk_free (chk);
net/x25/x25_dev.c +1 -1
@@ -117,7 +117,7 @@ int x25_lapb_receive_frame(struct sk_buff *skb, struct net_device *dev,if (!pskb_may_pull (skb,1 )) {x25_neigh_put (nb); -return 0 ; + goto drop; }switch (skb->data[0 ]) {
scripts/kernel-doc +7 -0
@@ -1215,6 +1215,13 @@ sub dump_struct($$) { $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos; $members =~ s/\s*____cacheline_aligned_in_smp/ /gos; $members =~ s/\s*____cacheline_aligned/ /gos; + # unwrap struct_group(): + # - first eat non-declaration parameters and rewrite for final match + # - then remove macro, outer parens, and trailing semicolon + $members =~ s/\bstruct_group\s*\(([^,]*,)/STRUCT_GROUP(/gos; + $members =~ s/\bstruct_group_(attr|tagged)\s*\(([^,]*,){2}/STRUCT_GROUP(/gos; + $members =~ s/\b__struct_group\s*\(([^,]*,){3}/STRUCT_GROUP(/gos; + $members =~ s/\bSTRUCT_GROUP(\(((?:(?>[^)(]+)|(?1))*)\))[^;]*;/$2/gos; # replace DECLARE_BITMAP $members =~ s/__ETHTOOL_DECLARE_LINK_MODE_MASK\s*\(([^\)]+)\)/DECLARE_BITMAP($1, __ETHTOOL_LINK_MODE_MASK_NBITS)/gos;
sound/pci/hda/patch_realtek.c +14 -0
@@ -6883,6 +6883,7 @@ enum {ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME ,ALC285_FIXUP_LEGION_Y9000X_SPEAKERS ,ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE , + ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED, };/* A special fixup for Lenovo C940 and Yoga Duet 7;
@@ -8693,6 +8694,16 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id =ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC }, + [ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED] = { + .type = HDA_FIXUP_VERBS, + .v.verbs = (const struct hda_verb []) { + {0x20 ,AC_VERB_SET_COEF_INDEX ,0x19 }, + {0x20 ,AC_VERB_SET_PROC_COEF ,0x8e11 }, + { } + }, + .chained = true, + .chain_id = ALC285_FIXUP_HP_MUTE_LED, + }, };static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -8915,6 +8926,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x8870 ,"HP ZBook Fury 15.6 Inch G8 Mobile Workstation PC" ,ALC285_FIXUP_HP_GPIO_AMP_INIT ),SND_PCI_QUIRK (0x103c ,0x8873 ,"HP ZBook Studio 15.6 Inch G8 Mobile Workstation PC" ,ALC285_FIXUP_HP_GPIO_AMP_INIT ),SND_PCI_QUIRK (0x103c ,0x888d ,"HP ZBook Power 15.6 inch G8 Mobile Workstation PC" ,ALC236_FIXUP_HP_GPIO_LED ), +SND_PCI_QUIRK (0x103c ,0x8895 ,"HP EliteBook 855 G8 Notebook PC" ,ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED ),SND_PCI_QUIRK (0x103c ,0x8896 ,"HP EliteBook 855 G8 Notebook PC" ,ALC285_FIXUP_HP_MUTE_LED ),SND_PCI_QUIRK (0x103c ,0x89aa ,"HP EliteBook 630 G9" ,ALC236_FIXUP_HP_GPIO_LED ), SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
@@ -8995,6 +9007,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x144d ,0xc176 ,"Samsung Notebook 9 Pro (NP930MBE-K04US)" ,ALC298_FIXUP_SAMSUNG_AMP ),SND_PCI_QUIRK (0x144d ,0xc189 ,"Samsung Galaxy Flex Book (NT950QCG-X716)" ,ALC298_FIXUP_SAMSUNG_AMP ),SND_PCI_QUIRK (0x144d ,0xc18a ,"Samsung Galaxy Book Ion (NP930XCJ-K01US)" ,ALC298_FIXUP_SAMSUNG_AMP ), +SND_PCI_QUIRK (0x144d ,0xc1a3 ,"Samsung Galaxy Book Pro (NP935XDB-KC1SE)" ,ALC298_FIXUP_SAMSUNG_AMP ), +SND_PCI_QUIRK (0x144d ,0xc1a6 ,"Samsung Galaxy Book Pro 360 (NP930QBD)" ,ALC298_FIXUP_SAMSUNG_AMP ),SND_PCI_QUIRK (0x144d ,0xc740 ,"Samsung Ativ book 8 (NP870Z5G)" ,ALC269_FIXUP_ATIV_BOOK_8 ),SND_PCI_QUIRK (0x144d ,0xc812 ,"Samsung Notebook Pen S (NT950SBE-X58)" ,ALC298_FIXUP_SAMSUNG_AMP ), SND_PCI_QUIRK(0x144d, 0xc830, "Samsung Galaxy Book Ion (NT950XCJ-X716A)", ALC298_FIXUP_SAMSUNG_AMP),
sound/soc/codecs/jz4725b.c +19 -15
@@ -136,14 +136,17 @@ enum {#define REG_CGR3_GO1L_OFFSET 0#define REG_CGR3_GO1L_MASK (0x1f << REG_CGR3_GO1L_OFFSET) +#define REG_CGR10_GIL_OFFSET 0 +#define REG_CGR10_GIR_OFFSET 4 +struct jz_icdc {struct regmap *regmap;void __iomem *base;struct clk *clk; }; -static const SNDRV_CTL_TLVD_DECLARE_DB_LINEAR(jz4725b_dac_tlv, -2250, 0); -static const SNDRV_CTL_TLVD_DECLARE_DB_LINEAR(jz4725b_line_tlv, -1500, 600); +static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(jz4725b_adc_tlv, 0, 150, 0); +static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(jz4725b_dac_tlv, -2250, 150, 0);static const struct snd_kcontrol_new jz4725b_codec_controls[] = { SOC_DOUBLE_TLV("Master Playback Volume",
@@ -151,11 +154,11 @@ static const struct snd_kcontrol_new jz4725b_codec_controls[] = { REG_CGR1_GODL_OFFSET, REG_CGR1_GODR_OFFSET, 0xf, 1, jz4725b_dac_tlv), -SOC_DOUBLE_R_TLV ("Master Capture Volume" , -JZ4725B_CODEC_REG_CGR3 , -JZ4725B_CODEC_REG_CGR2 , -REG_CGR2_GO1R_OFFSET , -0x1f ,1 , jz4725b_line_tlv), +SOC_DOUBLE_TLV ("Master Capture Volume" , +JZ4725B_CODEC_REG_CGR10 , +REG_CGR10_GIL_OFFSET , +REG_CGR10_GIR_OFFSET , +0xf ,0 , jz4725b_adc_tlv),SOC_SINGLE ("Master Playback Switch" ,JZ4725B_CODEC_REG_CR1 , REG_CR1_DAC_MUTE_OFFSET, 1, 1),
@@ -180,7 +183,7 @@ static SOC_VALUE_ENUM_SINGLE_DECL(jz4725b_codec_adc_src_enum, jz4725b_codec_adc_src_texts, jz4725b_codec_adc_src_values);static const struct snd_kcontrol_new jz4725b_codec_adc_src_ctrl = -SOC_DAPM_ENUM ("Route" , jz4725b_codec_adc_src_enum); +SOC_DAPM_ENUM ("ADC Source Capture Route" , jz4725b_codec_adc_src_enum);
Lines of this file are not shown. View the raw message.
sound/soc/codecs/wm8962.c +52 -2
54 lines not on this page · raw message
tools/testing/selftests/futex/functional/Makefile +2 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/intel_pstate/Makefile +3 -3
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.