Linux 4.19.146
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.146 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/boot/dts/hsdk.dts | 6 arch/arc/plat-eznps/include/plat/ctop.h | 1 arch/arm/boot/dts/bcm-hr2.dtsi | 2 arch/arm/boot/dts/bcm-nsp.dtsi | 2 arch/arm/boot/dts/bcm5301x.dtsi | 2 arch/arm/boot/dts/logicpd-som-lv-baseboard.dtsi | 2 arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi | 2 arch/arm/boot/dts/ls1021a.dtsi | 2 arch/arm/boot/dts/socfpga_arria10.dtsi | 2 arch/arm/boot/dts/vfxxx.dtsi | 2 arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi | 2 arch/powerpc/configs/pasemi_defconfig | 1 arch/powerpc/configs/ppc6xx_defconfig | 1 arch/x86/configs/i386_defconfig | 1 arch/x86/configs/x86_64_defconfig | 1 arch/x86/kvm/vmx.c | 1 drivers/atm/firestream.c | 1 drivers/block/rbd.c | 12 drivers/cpufreq/intel_pstate.c | 14 drivers/dma/acpi-dma.c | 4 drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 3 drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 3 drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 4 drivers/gpu/drm/tve200/tve200_display.c | 22 + drivers/hid/hid-elan.c | 2 drivers/hid/hid-ids.h | 2 drivers/hid/hid-quirks.c | 2 drivers/iio/accel/bmc150-accel-core.c | 15 - drivers/iio/accel/kxsd9.c | 16 - drivers/iio/accel/mma7455_core.c | 16 - drivers/iio/accel/mma8452.c | 11 drivers/iio/adc/ina2xx-adc.c | 11 drivers/iio/adc/max1118.c | 10 drivers/iio/adc/mcp3422.c | 16 - drivers/iio/adc/ti-adc081c.c | 11 drivers/iio/adc/ti-adc084s021.c | 10 drivers/iio/adc/ti-ads1015.c | 10 drivers/iio/chemical/ccs811.c | 13 drivers/iio/light/ltr501.c | 15 - drivers/iio/light/max44000.c | 12 drivers/iio/magnetometer/ak8975.c | 16 - drivers/infiniband/core/verbs.c | 2 drivers/infiniband/hw/bnxt_re/ib_verbs.c | 21 + drivers/infiniband/sw/rxe/rxe.c | 3 drivers/infiniband/sw/rxe/rxe_mr.c | 1 drivers/infiniband/sw/rxe/rxe_verbs.c | 2 drivers/iommu/amd_iommu_v2.c | 7 drivers/mmc/host/sdhci-msm.c | 18 + drivers/net/wan/hdlc_cisco.c | 1 drivers/net/wan/lapbether.c | 3 drivers/nfc/st95hf/core.c | 2 drivers/nvme/host/fabrics.c | 1 drivers/nvme/host/rdma.c | 6 drivers/phy/qualcomm/phy-qcom-qmp.c | 16 - drivers/phy/qualcomm/phy-qcom-qmp.h | 2 drivers/regulator/core.c | 46 +-- drivers/scsi/libsas/sas_ata.c | 5 drivers/staging/greybus/audio_topology.c | 29 + drivers/staging/wlan-ng/hfa384x_usb.c | 5 drivers/staging/wlan-ng/prism2usb.c | 19 - drivers/target/iscsi/iscsi_target.c | 17 + drivers/target/iscsi/iscsi_target_login.c | 6 drivers/target/iscsi/iscsi_target_login.h | 3 drivers/target/iscsi/iscsi_target_nego.c | 3 drivers/usb/core/message.c | 91 ++---- drivers/usb/core/sysfs.c | 5 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 1 drivers/usb/serial/option.c | 22 - drivers/usb/typec/ucsi/ucsi_acpi.c | 4 drivers/video/console/Kconfig | 46 --- drivers/video/console/vgacon.c | 221 --------------- drivers/video/fbdev/core/bitblit.c | 11 drivers/video/fbdev/core/fbcon.c | 334 ----------------------- drivers/video/fbdev/core/fbcon.h | 2 drivers/video/fbdev/core/fbcon_ccw.c | 11 drivers/video/fbdev/core/fbcon_cw.c | 11 drivers/video/fbdev/core/fbcon_ud.c | 11 drivers/video/fbdev/core/tileblit.c | 2 drivers/video/fbdev/vga16fb.c | 2 fs/btrfs/extent-tree.c | 19 - fs/btrfs/ioctl.c | 3 fs/btrfs/print-tree.c | 12 fs/btrfs/volumes.c | 10 fs/xfs/libxfs/xfs_attr_leaf.c | 4 include/linux/netfilter/nf_conntrack_sctp.h | 2 include/soc/nps/common.h | 6 kernel/gcov/gcc_4_7.c | 4 net/netfilter/nf_conntrack_proto_sctp.c | 39 ++ sound/hda/hdac_device.c | 2 sound/pci/hda/patch_hdmi.c | 5 92 files changed, 505 insertions(+), 877 deletions(-)
Adam Ford (2):
ARM: dts: logicpd-torpedo-baseboard: Fix broken audio
ARM: dts: logicpd-som-lv-baseboard: Fix broken audio
Aleksander Morgado (1):
USB: serial: option: add support for SIM7070/SIM7080/SIM7090 modules
Angelo Compagnucci (2):
iio: adc: mcp3422: fix locking scope
iio: adc: mcp3422: fix locking on error path
Bjørn Mork (1):
USB: serial: option: support dynamic Quectel USB compositions
Chris Healy (1):
ARM: dts: vfxxx: Add syscon compatible with OCOTP
Darrick J. Wong (1):
xfs: initialize the shortform attr header padding entry
Dinghao Liu (4):
RDMA/rxe: Fix memleak in rxe_mem_init_user
NFC: st95hf: Fix memleak in st95hf_in_send_cmd
firestream: Fix memleak in fs_open
HID: elan: Fix memleak in elan_input_configured
Dinh Nguyen (1):
ARM: dts: socfpga: fix register entry for timer3 on Arria10
Douglas Anderson (1):
mmc: sdhci-msm: Add retries when all tuning phases are found valid
Evgeniy Didin (1):
ARC: [plat-hsdk]: Switch ethernet phy-mode to rgmii-id
Filipe Manana (1):
btrfs: fix wrong address when faulting in pages in the search ioctl
Florian Fainelli (4):
ARM: dts: bcm: HR2: Fixed QSPI compatible string
ARM: dts: NSP: Fixed QSPI compatible string
ARM: dts: BCM5301X: Fixed QSPI compatible string
arm64: dts: ns2: Fixed QSPI compatible string
Florian Westphal (1):
netfilter: conntrack: allow sctp hearbeat after connection re-use
Francisco Jerez (1):
cpufreq: intel_pstate: Fix intel_pstate_get_hwp_max() for turbo disabled
Greg Kroah-Hartman (1):
Linux 4.19.146
Hanjun Guo (1):
dmaengine: acpi: Put the CSRT table after using it
Heikki Krogerus (1):
usb: typec: ucsi: acpi: Check the _DEP dependencies
Hou Pu (1):
scsi: target: iscsi: Fix hang in iscsit_access_np() when getting tpg->np_login_sem
Ilya Dryomov (1):
rbd: require global CAP_SYS_ADMIN for mapping and unmapping
Joerg Roedel (1):
iommu/amd: Do not use IOMMUv2 functionality when SME is active
Jonathan Cameron (12):
iio:light:ltr501 Fix timestamp alignment issue. iio:accel:bmc150-accel: Fix timestamp alignment and prevent data leak. iio:adc:ti-adc084s021 Fix alignment and data leak issues. iio:adc:ina2xx Fix timestamp alignment issue. iio:adc:max1118 Fix alignment of timestamp and data leak issues iio:adc:ti-adc081c Fix alignment and data leak issues iio:magnetometer:ak8975 Fix alignment and data leak issues. iio:light:max44000 Fix timestamp alignment and prevent data leak. iio:chemical:ccs811: Fix timestamp alignment and prevent data leak.
iio: accel: kxsd9: Fix alignment of local buffer. iio:accel:mma7455: Fix timestamp alignment and prevent data leak. iio:accel:mma8452: Fix timestamp alignment and prevent data leak.
Jordan Crouse (1):
drm/msm: Disable preemption on all 5xx targets
Josef Bacik (1):
btrfs: fix lockdep splat in add_missing_dev
Kamal Heib (2):
RDMA/rxe: Drop pointless checks in rxe_init_ports RDMA/core: Fix reported speed and width
Leon Romanovsky (1):
gcov: Disable gcov build with GCC 10
Linus Torvalds (3):
vgacon: remove software scrollback support
fbcon: remove soft scrollback code
fbcon: remove now unusued 'softback_lines' cursor() argument
Linus Walleij (1):
drm/tve200: Stabilize enable/disable
Luo Jiaxing (1):
scsi: libsas: Set data_dir as DMA_NONE if libata marks qc as NODATA
Mathias Nyman (1):
usb: Fix out of sync data toggle if a configured device is reconfigured
Matthias Schiffer (1):
ARM: dts: ls1021a: fix QuadSPI-memory reg range
Maxim Kochetkov (1):
iio: adc: ti-ads1015: fix conversion when CONFIG_PM is not set
Michał Mirosław (1):
regulator: push allocation in set_consumer_device_supply() out of lock
Mohan Kumar (1):
ALSA: hda: Fix 2 channel swapping for Tegra
Nirenjan Krishnan (1):
HID: quirks: Set INCREMENT_USAGE_ON_DUPLICATE for all Saitek X52 devices
Ondrej Jirman (1):
drm/sun4i: Fix dsi dcs long write function
Patrick Riphagen (1):
USB: serial: ftdi_sio: add IDs for Xsens Mti USB converter
Peter Oberparleiter (1):
gcov: add support for GCC 10.1
Qu Wenruo (1):
btrfs: require only sector size alignment for parent eb bytenr
Rafael J. Wysocki (1):
cpufreq: intel_pstate: Refuse to turn off with HWP enabled
Rander Wang (1):
ALSA: hda: fix a runtime pm issue in SOF when integrated GPU is disabled
Rustam Kovhaev (1):
staging: wlan-ng: fix out of bounds read in prism2sta_probe_usb()
Sagi Grimberg (2):
nvme-fabrics: don't check state NVME_CTRL_NEW for request acceptance
nvme-rdma: serialize controller teardown sequences
Sandeep Raghuraman (1):
drm/amdgpu: Fix bug in reporting voltage for CIK
Selvin Xavier (1):
RDMA/bnxt_re: Do not report transparent vlan from QP1
Sivaprakash Murugesan (1):
phy: qcom-qmp: Use correct values for ipq8074 PCIe Gen2 PHY init
Tetsuo Handa (1):
video: fbdev: fix OOB read in vga_8planes_imageblit()
Vaibhav Agarwal (1):
staging: greybus: audio: fix uninitialized value issue
Varun Prakash (1):
scsi: target: iscsi: Fix data digest calculation
Vineet Gupta (2):
ARC: HSDK: wireup perf irq irqchip/eznps: Fix build error for !ARC700 builds
Wanpeng Li (1):
KVM: VMX: Don't freeze guest when event delivery causes an APIC-access exit
Xie He (3):
drivers/net/wan/lapbether: Added needed_tailroom drivers/net/wan/lapbether: Set network_header before transmitting drivers/net/wan/hdlc_cisco: Add hard_header_len
Yi Zhang (1):
RDMA/rxe: Fix the parent sysfs read when the interface has 15 chars
Zeng Tao (1):
usb: core: fix slab-out-of-bounds Read in read_descriptors
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 145 +SUBLEVEL = 146 EXTRAVERSION = NAME = "People's Front"
arch/arc/boot/dts/hsdk.dts +4 -2
@@ -83,6 +83,8 @@ arcpct: pct { compatible = "snps,archs-pct"; + interrupt-parent = <&cpu_intc>; + interrupts = <20>; }; /* TIMER0 with interrupt for clockevent */
@@ -173,7 +175,7 @@ reg = <0x8000 0x2000>; interrupts = <10>; interrupt-names = "macirq"; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; snps,pbl = <32>; snps,multicast-filter-bins = <256>; clocks = <&gmacclk>;
@@ -191,7 +193,7 @@ #address-cells = <1>; #size-cells = <0>; compatible = "snps,dwmac-mdio"; - phy0: ethernet-phy@0 { + phy0: ethernet-phy@0 { /* Micrel KSZ9031 */ reg = <0>; ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>; ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
arch/arc/plat-eznps/include/plat/ctop.h +0 -1
@@ -43,7 +43,6 @@#define CTOP_AUX_DPC (CTOP_AUX_BASE + 0x02C)#define CTOP_AUX_LPC (CTOP_AUX_BASE + 0x030)#define CTOP_AUX_EFLAGS (CTOP_AUX_BASE + 0x080) -#define CTOP_AUX_IACK (CTOP_AUX_BASE + 0x088)#define CTOP_AUX_GPA1 (CTOP_AUX_BASE + 0x08C)#define CTOP_AUX_UDMC (CTOP_AUX_BASE + 0x300)
arch/arm/boot/dts/bcm-hr2.dtsi +1 -1
@@ -217,7 +217,7 @@ }; qspi: spi@27200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi"; + compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi"; reg = <0x027200 0x184>, <0x027000 0x124>, <0x11c408 0x004>,
arch/arm/boot/dts/bcm-nsp.dtsi +1 -1
@@ -274,7 +274,7 @@ }; qspi: spi@27200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi"; + compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi"; reg = <0x027200 0x184>, <0x027000 0x124>, <0x11c408 0x004>,
arch/arm/boot/dts/bcm5301x.dtsi +1 -1
@@ -445,7 +445,7 @@ }; spi@18029200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi"; + compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi"; reg = <0x18029200 0x184>, <0x18029000 0x124>, <0x1811b408 0x004>,
arch/arm/boot/dts/logicpd-som-lv-baseboard.dtsi +2 -0
@@ -55,6 +55,8 @@ &mcbsp2 { status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&mcbsp2_pins>; }; &charger {
arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi +2 -0
@@ -84,6 +84,8 @@ }; &mcbsp2 { + pinctrl-names = "default"; + pinctrl-0 = <&mcbsp2_pins>; status = "okay"; };
arch/arm/boot/dts/ls1021a.dtsi +1 -1
@@ -168,7 +168,7 @@ #address-cells = <1>; #size-cells = <0>; reg = <0x0 0x1550000 0x0 0x10000>, - <0x0 0x40000000 0x0 0x40000000>; + <0x0 0x40000000 0x0 0x20000000>; reg-names = "QuadSPI", "QuadSPI-memory"; interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>; clock-names = "qspi_en", "qspi";
arch/arm/boot/dts/socfpga_arria10.dtsi +1 -1
@@ -791,7 +791,7 @@ timer3: timer3@ffd00100 { compatible = "snps,dw-apb-timer"; interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>; - reg = <0xffd01000 0x100>; + reg = <0xffd00100 0x100>; clocks = <&l4_sys_free_clk>; clock-names = "timer"; };
arch/arm/boot/dts/vfxxx.dtsi +1 -1
@@ -532,7 +532,7 @@ }; ocotp: ocotp@400a5000 { - compatible = "fsl,vf610-ocotp"; + compatible = "fsl,vf610-ocotp", "syscon"; reg = <0x400a5000 0x1000>; clocks = <&clks VF610_CLK_OCOTP>; };
arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi +1 -1
@@ -745,7 +745,7 @@ }; qspi: spi@66470200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-ns2-qspi"; + compatible = "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi"; reg = <0x66470200 0x184>, <0x66470000 0x124>, <0x67017408 0x004>,
arch/powerpc/configs/pasemi_defconfig +0 -1
@@ -110,7 +110,6 @@ CONFIG_FB_NVIDIA=y CONFIG_FB_NVIDIA_I2C=y CONFIG_FB_RADEON=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y CONFIG_SOUND=y CONFIG_SND=y
arch/powerpc/configs/ppc6xx_defconfig +0 -1
@@ -779,7 +779,6 @@ CONFIG_FB_TRIDENT=m CONFIG_FB_SM501=m CONFIG_FB_IBM_GXT4500=y CONFIG_LCD_PLATFORM=m -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y CONFIG_LOGO=y
arch/x86/configs/i386_defconfig +0 -1
@@ -216,7 +216,6 @@ CONFIG_FB_MODE_HELPERS=y CONFIG_FB_TILEBLITTING=y CONFIG_FB_EFI=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set
arch/x86/configs/x86_64_defconfig +0 -1
@@ -212,7 +212,6 @@ CONFIG_FB_MODE_HELPERS=y CONFIG_FB_TILEBLITTING=y CONFIG_FB_EFI=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set
arch/x86/kvm/vmx.c +1 -0
@@ -10128,6 +10128,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu) (exit_reason !=EXIT_REASON_EXCEPTION_NMI && exit_reason !=EXIT_REASON_EPT_VIOLATION && exit_reason !=EXIT_REASON_PML_FULL && + exit_reason !=EXIT_REASON_APIC_ACCESS && exit_reason != EXIT_REASON_TASK_SWITCH)) { vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; vcpu->run->internal.suberror =KVM_INTERNAL_ERROR_DELIVERY_EV ;
drivers/atm/firestream.c +1 -0
@@ -1013,6 +1013,7 @@ static int fs_open(struct atm_vcc *atm_vcc) error =make_rate (pcr, r, &tmc0,NULL );if (error) {kfree (tc); +kfree (vcc);return error; } }
drivers/block/rbd.c +12 -0
@@ -4124,6 +4124,9 @@ static ssize_t rbd_config_info_show(struct device *dev, {struct rbd_device *rbd_dev =dev_to_rbd_dev (dev); +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; +return sprintf (buf,"%s\n" , rbd_dev->config_info); }
@@ -4235,6 +4238,9 @@ static ssize_t rbd_image_refresh(struct device *dev,struct rbd_device *rbd_dev =dev_to_rbd_dev (dev);int ret; +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; + ret =rbd_dev_refresh (rbd_dev);if (ret)return ret;
@@ -5846,6 +5852,9 @@ static ssize_t do_rbd_add(struct bus_type *bus,struct rbd_client *rbdc;int rc; +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; +if (!try_module_get (THIS_MODULE ))return -ENODEV ;
@@ -5995,6 +6004,9 @@ static ssize_t do_rbd_remove(struct bus_type *bus,bool force = false;int ret; +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; + dev_id =-1 ; opt_buf[0 ] ='\0' ;sscanf (buf,"%d %5s" , &dev_id, opt_buf);
drivers/cpufreq/intel_pstate.c +10 -4
@@ -712,7 +712,7 @@ static void intel_pstate_get_hwp_max(unsigned int cpu, int *phy_max,rdmsrl_on_cpu (cpu,MSR_HWP_CAPABILITIES , &cap);WRITE_ONCE (all_cpu_data[cpu]->hwp_cap_cached, cap); -if (global.no_turbo) +if (global.no_turbo || global.turbo_disabled) *current_max =HWP_GUARANTEED_PERF (cap);else *current_max =HWP_HIGHEST_PERF (cap);
@@ -2325,9 +2325,15 @@ static int intel_pstate_update_status(const char *buf, size_t size) {int ret; -if (size ==3 && !strncmp (buf,"off" , size)) -return intel_pstate_driver ? -intel_pstate_unregister_driver () : -EINVAL ; +if (size ==3 && !strncmp (buf,"off" , size)) { +if (!intel_pstate_driver) +return -EINVAL ; + +if (hwp_active) +return -EBUSY ; + +return intel_pstate_unregister_driver (); + }if (size ==6 && !strncmp (buf,"active" , size)) {if (intel_pstate_driver) {
drivers/dma/acpi-dma.c +3 -1
@@ -131,11 +131,13 @@ static void acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma)if (ret <0 ) {dev_warn (&adev->dev,"error in parsing resource group\n" ); -return ; +break ; } grp = (struct acpi_csrt_group *)((void *)grp + grp->length); } + +acpi_put_table ((struct acpi_table_header *)csrt); }/**
drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c +2 -1
@@ -3566,7 +3566,8 @@ static int smu7_read_sensor(struct pp_hwmgr *hwmgr, int idx,case AMDGPU_PP_SENSOR_GPU_POWER :return smu7_get_gpu_power (hwmgr, (uint32_t *)value);case AMDGPU_PP_SENSOR_VDDGFX : -if ((data->vr_config &0xff ) ==0x2 ) +if ((data->vr_config &VRCONF_VDDGFX_MASK ) == + (VR_SVI2_PLANE_2 <<VRCONF_VDDGFX_SHIFT )) val_vid =PHM_READ_INDIRECT_FIELD (hwmgr->device,CGS_IND_REG__SMC ,PWR_SVI2_STATUS ,PLANE2_VID );else
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +2 -1
@@ -1518,7 +1518,8 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)check_speed_bin (&pdev->dev); - ret =adreno_gpu_init (dev, pdev, adreno_gpu, &funcs,4 ); +/* Restricting nr_rings to 1 to temporarily disable preemption */ + ret =adreno_gpu_init (dev, pdev, adreno_gpu, &funcs,1 );if (ret) {a5xx_destroy (&(a5xx_gpu->base.base));return ERR_PTR (ret);
drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +2 -2
@@ -761,7 +761,7 @@ static int sun6i_dsi_dcs_write_long(struct sun6i_dsi *dsi,regmap_write (dsi->regs,SUN6I_DSI_CMD_TX_REG (0 ),sun6i_dsi_dcs_build_pkt_hdr (dsi, msg)); - bounce =kzalloc (msg->tx_len +sizeof (crc),GFP_KERNEL ); + bounce =kzalloc (ALIGN (msg->tx_len +sizeof (crc),4 ),GFP_KERNEL );if (!bounce)return -ENOMEM ;
@@ -772,7 +772,7 @@ static int sun6i_dsi_dcs_write_long(struct sun6i_dsi *dsi,memcpy ((u8 *)bounce + msg->tx_len, &crc,sizeof (crc)); len +=sizeof (crc); -regmap_bulk_write (dsi->regs,SUN6I_DSI_CMD_TX_REG (1 ), bounce, len); +regmap_bulk_write (dsi->regs,SUN6I_DSI_CMD_TX_REG (1 ), bounce,DIV_ROUND_UP (len,4 ));regmap_write (dsi->regs,SUN6I_DSI_CMD_CTL_REG , len +4 -1 );kfree (bounce);
drivers/gpu/drm/tve200/tve200_display.c +21 -1
@@ -17,6 +17,7 @@#include <linux/version.h> #include <linux/dma-buf.h> #include <linux/of_graph.h> +#include <linux/delay.h> #include <drm/drmP.h> #include <drm/drm_panel.h>
@@ -132,9 +133,25 @@ static void tve200_display_enable(struct drm_simple_display_pipe *pipe,struct drm_connector *connector = priv->connector;u32 format = fb->format->format;u32 ctrl1 =0 ; +int retries;clk_prepare_enable (priv->clk); +/* Reset the TVE200 and wait for it to come back online */ +writel (TVE200_CTRL_4_RESET , priv->regs +TVE200_CTRL_4 ); +for (retries =0 ; retries <5 ; retries++) { +usleep_range (30000 ,50000 ); +if (readl (priv->regs +TVE200_CTRL_4 ) &TVE200_CTRL_4_RESET ) +continue ; +else +break ; + } +if (retries ==5 && +readl (priv->regs +TVE200_CTRL_4 ) &TVE200_CTRL_4_RESET ) { +dev_err (drm->dev,"can't get hardware out of reset\n" ); +return ; + } +/* Function 1 */ ctrl1 |=TVE200_CTRL_CSMODE ;/* Interlace mode for CCIR656: parameterize? */
@@ -231,8 +248,9 @@ static void tve200_display_disable(struct drm_simple_display_pipe *pipe)drm_crtc_vblank_off (crtc); -/* Disable and Power Down */ +/* Disable put into reset and Power Down */ writel (0 , priv->regs +TVE200_CTRL ); +writel (TVE200_CTRL_4_RESET , priv->regs +TVE200_CTRL_4 );clk_disable_unprepare (priv->clk); }
@@ -280,6 +298,8 @@ static int tve200_display_enable_vblank(struct drm_simple_display_pipe *pipe)struct drm_device *drm = crtc->dev;struct tve200_drm_dev_private *priv = drm->dev_private; +/* Clear any IRQs and enable */ +writel (0xFF , priv->regs +TVE200_INT_CLR );writel (TVE200_INT_V_STATUS , priv->regs +TVE200_INT_EN );return 0 ; }
drivers/hid/hid-elan.c +2 -0
@@ -192,6 +192,7 @@ static int elan_input_configured(struct hid_device *hdev, struct hid_input *hi) ret =input_mt_init_slots (input,ELAN_MAX_FINGERS ,INPUT_MT_POINTER );if (ret) {hid_err (hdev,"Failed to init elan MT slots: %d\n" , ret); +input_free_device (input);return ret; }
@@ -202,6 +203,7 @@ static int elan_input_configured(struct hid_device *hdev, struct hid_input *hi)if (ret) {hid_err (hdev,"Failed to register elan input device: %d\n" , ret); +input_mt_destroy_slots (input);input_free_device (input);return ret; }
drivers/hid/hid-ids.h +2 -0
@@ -985,6 +985,8 @@#define USB_DEVICE_ID_SAITEK_RAT9 0x0cfa#define USB_DEVICE_ID_SAITEK_MMO7 0x0cd0#define USB_DEVICE_ID_SAITEK_X52 0x075c +#define USB_DEVICE_ID_SAITEK_X52_2 0x0255 +#define USB_DEVICE_ID_SAITEK_X52_PRO 0x0762#define USB_VENDOR_ID_SAMSUNG 0x0419#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
drivers/hid/hid-quirks.c +2 -0
@@ -147,6 +147,8 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_RETROUSB, USB_DEVICE_ID_RETROUSB_SNES_RETROPORT), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD), HID_QUIRK_BADPAD }, { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52_2), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52_PRO), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD2), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB), HID_QUIRK_NOGET },
drivers/iio/accel/bmc150-accel-core.c +12 -3
@@ -197,6 +197,14 @@ struct bmc150_accel_data {struct mutex mutex;u8 fifo_mode, watermark;s16 buffer[8 ]; +/* +* Ensure there is sufficient space and correct alignment for +* the timestamp if enabled +*/ +struct { +__le16 channels[3 ]; +s64 ts__aligned(8) ; + } scan;u8 bw_bits;u32 slope_dur;u32 slope_thres;
@@ -915,15 +923,16 @@ static int __bmc150_accel_fifo_flush(struct iio_dev *indio_dev,* now. */ for (i =0 ; i < count; i++) { -u16 sample[8 ];int j, bit; j =0 ;for_each_set_bit (bit, indio_dev->active_scan_mask, indio_dev->masklength) -memcpy (&sample[j++], &buffer[i *3 + bit],2 ); +memcpy (&data->scan.channels[j++], &buffer[i *3 + bit], +sizeof (data->scan.channels[0 ])); -iio_push_to_buffers_with_timestamp (indio_dev, sample, tstamp); +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan, + tstamp); tstamp += sample_period; }
drivers/iio/accel/kxsd9.c +11 -5
@@ -212,14 +212,20 @@ static irqreturn_t kxsd9_trigger_handler(int irq, void *p)const struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct kxsd9_state *st =iio_priv (indio_dev); +/* +* Ensure correct positioning and alignment of timestamp. +* No need to zero initialize as all elements written. +*/ +struct { +__be16 chan[4 ]; +s64 ts__aligned(8) ; + } hw_values;int ret; -/* 4 * 16bit values AND timestamp */ -__be16 hw_values[8 ]; ret =regmap_bulk_read (st->map,KXSD9_REG_X , - &hw_values, -8 ); + hw_values.chan, +sizeof (hw_values.chan));if (ret) {dev_err (st->dev,"error reading data\n" );
@@ -227,7 +233,7 @@ static irqreturn_t kxsd9_trigger_handler(int irq, void *p) }iio_push_to_buffers_with_timestamp (indio_dev, - hw_values, + &hw_values,iio_get_time_ns (indio_dev));iio_trigger_notify_done (indio_dev->trig);
drivers/iio/accel/mma7455_core.c +12 -4
@@ -55,6 +55,14 @@struct mma7455_data {struct regmap *regmap; +/* +* Used to reorganize data. Will ensure correct alignment of +* the timestamp if present +*/ +struct { +__le16 channels[3 ]; +s64 ts__aligned(8) ; + } scan; };static int mma7455_drdy (struct mma7455_data *mma7455)
@@ -85,19 +93,19 @@ static irqreturn_t mma7455_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct mma7455_data *mma7455 =iio_priv (indio_dev); -u8 buf[16 ];/* 3 x 16-bit channels + padding + ts */ int ret; ret =mma7455_drdy (mma7455);if (ret) goto done; - ret =regmap_bulk_read (mma7455->regmap,MMA7455_REG_XOUTL , buf, -sizeof (__le16) *3 ); + ret =regmap_bulk_read (mma7455->regmap,MMA7455_REG_XOUTL , + mma7455->scan.channels, +sizeof (mma7455->scan.channels));if (ret) goto done; -iio_push_to_buffers_with_timestamp (indio_dev, buf, +iio_push_to_buffers_with_timestamp (indio_dev, &mma7455->scan,iio_get_time_ns (indio_dev)); done:
drivers/iio/accel/mma8452.c +8 -3
@@ -107,6 +107,12 @@ struct mma8452_data {u8 data_cfg;const struct mma_chip_info *chip_info;int sleep_val; + +/* Ensure correct alignment of time stamp when present */ +struct { +__be16 channels[3 ]; +s64 ts__aligned(8) ; + } buffer; };/**
@@ -1088,14 +1094,13 @@ static irqreturn_t mma8452_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct mma8452_data *data =iio_priv (indio_dev); -u8 buffer[16 ];/* 3 16-bit channels + padding + ts */ int ret; - ret =mma8452_read (data, (__be16 *)buffer); + ret =mma8452_read (data, data->buffer.channels);if (ret <0 ) goto done; -iio_push_to_buffers_with_timestamp (indio_dev, buffer, +iio_push_to_buffers_with_timestamp (indio_dev, &data->buffer,iio_get_time_ns (indio_dev)); done:
drivers/iio/adc/ina2xx-adc.c +7 -4
@@ -146,6 +146,11 @@ struct ina2xx_chip_info {int range_vbus;/* Bus voltage maximum in V */ int pga_gain_vshunt;/* Shunt voltage PGA gain */ bool allow_async_readout; +/* data buffer needs space for channel data and timestamp */ +struct { +u16 chan[4 ]; +u64 ts__aligned(8) ; + } scan; };static const struct ina2xx_config ina2xx_config[] = {
@@ -736,8 +741,6 @@ static int ina2xx_conversion_ready(struct iio_dev *indio_dev)static int ina2xx_work_buffer (struct iio_dev *indio_dev) {struct ina2xx_chip_info *chip =iio_priv (indio_dev); -/* data buffer needs space for channel data and timestap */ -unsigned short data[4 +sizeof (s64)/sizeof (short )];int bit, ret, i =0 ;s64 time;
@@ -756,10 +759,10 @@ static int ina2xx_work_buffer(struct iio_dev *indio_dev)if (ret <0 )return ret; - data[i++] = val; + chip->scan.chan[i++] = val; } -iio_push_to_buffers_with_timestamp (indio_dev, data, time); +iio_push_to_buffers_with_timestamp (indio_dev, &chip->scan, time);return 0 ; };
drivers/iio/adc/max1118.c +7 -3
@@ -38,6 +38,11 @@ struct max1118 {struct spi_device *spi;struct mutex lock;struct regulator *reg; +/* Ensure natural alignment of buffer elements */ +struct { +u8 channels[2 ]; +s64 ts__aligned(8) ; + } scan;u8 data____cacheline_aligned ; };
@@ -162,7 +167,6 @@ static irqreturn_t max1118_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct max1118 *adc =iio_priv (indio_dev); -u8 data[16 ] = { };/* 2x 8-bit ADC data + padding + 8 bytes timestamp */ int scan_index;int i =0 ;
@@ -180,10 +184,10 @@ static irqreturn_t max1118_trigger_handler(int irq, void *p) goto out; } - data[i] = ret; + adc->scan.channels[i] = ret; i++; } -iio_push_to_buffers_with_timestamp (indio_dev, data, +iio_push_to_buffers_with_timestamp (indio_dev, &adc->scan,iio_get_time_ns (indio_dev)); out:mutex_unlock (&adc->lock);
drivers/iio/adc/mcp3422.c +10 -6
@@ -99,16 +99,12 @@ static int mcp3422_update_config(struct mcp3422 *adc, u8 newconfig) {int ret; -mutex_lock (&adc->lock); - ret =i2c_master_send (adc->i2c, &newconfig,1 );if (ret >0 ) { adc->config = newconfig; ret =0 ; } -mutex_unlock (&adc->lock); -return ret; }
@@ -141,6 +137,8 @@ static int mcp3422_read_channel(struct mcp3422 *adc,u8 config;u8 req_channel = channel->channel; +mutex_lock (&adc->lock); +if (req_channel !=MCP3422_CHANNEL (adc->config)) { config = adc->config; config &= ~MCP3422_CHANNEL_MASK ;
@@ -148,12 +146,18 @@ static int mcp3422_read_channel(struct mcp3422 *adc, config &= ~MCP3422_PGA_MASK ; config |=MCP3422_PGA_VALUE (adc->pga[req_channel]); ret =mcp3422_update_config (adc, config); -if (ret <0 ) +if (ret <0 ) { +mutex_unlock (&adc->lock);return ret; + }msleep (mcp3422_read_times[MCP3422_SAMPLE_RATE (adc->config)]); } -return mcp3422_read (adc, value, &config); + ret =mcp3422_read (adc, value, &config); + +mutex_unlock (&adc->lock); + +return ret; } static int mcp3422_read_raw(struct iio_dev *iio,
drivers/iio/adc/ti-adc081c.c +8 -3
@@ -36,6 +36,12 @@ struct adc081c {/* 8, 10 or 12 */ int bits; + +/* Ensure natural alignment of buffer elements */ +struct { +u16 channel; +s64 ts__aligned(8) ; + } scan; };#define REG_CONV_RES 0x00
@@ -131,14 +137,13 @@ static irqreturn_t adc081c_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct adc081c *data =iio_priv (indio_dev); -u16 buf[8 ];/* 2 bytes data + 6 bytes padding + 8 bytes timestamp */ int ret; ret =i2c_smbus_read_word_swapped (data->i2c,REG_CONV_RES );if (ret <0 ) goto out; - buf[0 ] = ret; -iio_push_to_buffers_with_timestamp (indio_dev, buf, + data->scan.channel = ret; +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan,iio_get_time_ns (indio_dev)); out:iio_trigger_notify_done (indio_dev->trig);
drivers/iio/adc/ti-adc084s021.c +7 -3
@@ -28,6 +28,11 @@ struct adc084s021 {struct spi_transfer spi_trans;struct regulator *reg;struct mutex lock; +/* Buffer used to align data */ +struct { +__be16 channels[4 ]; +s64 ts__aligned(8) ; + } scan;/* * DMA (thus cache coherency maintenance) requires the * transfer buffers to live in their own cache line.
@@ -143,14 +148,13 @@ static irqreturn_t adc084s021_buffer_trigger_handler(int irq, void *pollfunc)struct iio_poll_func *pf = pollfunc;struct iio_dev *indio_dev = pf->indio_dev;struct adc084s021 *adc =iio_priv (indio_dev); -__be16 data[8 ] = {0 };/* 4 * 16-bit words of data + 8 bytes timestamp */ mutex_lock (&adc->lock); -if (adc084s021_adc_conversion (adc, &data) <0 ) +if (adc084s021_adc_conversion (adc, adc->scan.channels) <0 )dev_err (&adc->spi->dev,"Failed to read data\n" ); -iio_push_to_buffers_with_timestamp (indio_dev, data, +iio_push_to_buffers_with_timestamp (indio_dev, &adc->scan,iio_get_time_ns (indio_dev));mutex_unlock (&adc->lock);iio_trigger_notify_done (indio_dev->trig);
drivers/iio/adc/ti-ads1015.c +10 -0
@@ -312,6 +312,7 @@ static const struct iio_chan_spec ads1115_channels[] = { IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP), }; +#ifdef CONFIG_PM static int ads1015_set_power_state (struct ads1015_data *data,bool on) {int ret;
@@ -329,6 +330,15 @@ static int ads1015_set_power_state(struct ads1015_data *data, bool on) return ret < 0 ? ret : 0; } +#else /* !CONFIG_PM */ + +static int ads1015_set_power_state (struct ads1015_data *data,bool on) +{ +return 0 ; +} + +#endif /* !CONFIG_PM */ +static int ads1015_get_adc_result (struct ads1015_data *data,int chan,int *val) {
drivers/iio/chemical/ccs811.c +9 -4
@@ -78,6 +78,11 @@ struct ccs811_data {struct ccs811_reading buffer;struct iio_trigger *drdy_trig;bool drdy_trig_on; +/* Ensures correct alignment of timestamp if present */ +struct { +s16 channels[2 ]; +s64 ts__aligned(8) ; + } scan; };static const struct iio_chan_spec ccs811_channels[] = {
@@ -309,17 +314,17 @@ static irqreturn_t ccs811_trigger_handler(int irq, void *p)struct iio_dev *indio_dev = pf->indio_dev;struct ccs811_data *data =iio_priv (indio_dev);struct i2c_client *client = data->client; -s16 buf[8 ];/* s16 eCO2 + s16 TVOC + padding + 8 byte timestamp */ int ret; - ret =i2c_smbus_read_i2c_block_data (client,CCS811_ALG_RESULT_DATA ,4 , - (u8 *)&buf); + ret =i2c_smbus_read_i2c_block_data (client,CCS811_ALG_RESULT_DATA , +sizeof (data->scan.channels), + (u8 *)data->scan.channels);if (ret !=4 ) {dev_err (&client->dev,"cannot read sensor data\n" ); goto err; } -iio_push_to_buffers_with_timestamp (indio_dev, buf, +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan,iio_get_time_ns (indio_dev)); err:
drivers/iio/light/ltr501.c +9 -6
@@ -1245,13 +1245,16 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct ltr501_data *data =iio_priv (indio_dev); -u16 buf[8 ]; +struct { +u16 channels[3 ]; +s64 ts__aligned(8) ; + } scan;__le16 als_buf[2 ];u8 mask =0 ;int j =0 ;int ret, psdata; -memset (buf,0 ,sizeof (buf)); +memset (&scan,0 ,sizeof (scan));/* figure out which data needs to be ready */ if (test_bit(0, indio_dev->active_scan_mask) ||
@@ -1270,9 +1273,9 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p)if (ret <0 )return ret;if (test_bit (0 , indio_dev->active_scan_mask)) - buf[j++] =le16_to_cpu (als_buf[1 ]); + scan.channels[j++] =le16_to_cpu (als_buf[1 ]);if (test_bit (1 , indio_dev->active_scan_mask)) - buf[j++] =le16_to_cpu (als_buf[0 ]); + scan.channels[j++] =le16_to_cpu (als_buf[0 ]); }if (mask <R501_STATUS_PS_RDY ) {
@@ -1280,10 +1283,10 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p) &psdata, 2);if (ret <0 ) goto done; - buf[j++] = psdata <R501_PS_DATA_MASK ; + scan.channels[j++] = psdata <R501_PS_DATA_MASK ; } -iio_push_to_buffers_with_timestamp (indio_dev, buf, +iio_push_to_buffers_with_timestamp (indio_dev, &scan,iio_get_time_ns (indio_dev)); done:
drivers/iio/light/max44000.c +8 -4
@@ -78,6 +78,11 @@struct max44000_data {struct mutex lock;struct regmap *regmap; +/* Ensure naturally aligned timestamp */ +struct { +u16 channels[2 ]; +s64 ts__aligned(8) ; + } scan; };/* Default scale is set to the minimum of 0.03125 or 1 / (1 << 5) lux */
@@ -491,7 +496,6 @@ static irqreturn_t max44000_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct max44000_data *data =iio_priv (indio_dev); -u16 buf[8 ];/* 2x u16 + padding + 8 bytes timestamp */ int index =0 ;unsigned int regval;int ret;
@@ -501,17 +505,17 @@ static irqreturn_t max44000_trigger_handler(int irq, void *p) ret =max44000_read_alsval (data);if (ret <0 ) goto out_unlock; - buf[index++] = ret; + data->scan.channels[index++] = ret; }if (test_bit (MAX44000_SCAN_INDEX_PRX , indio_dev->active_scan_mask)) { ret =regmap_read (data->regmap,MAX44000_REG_PRX_DATA , ®val);if (ret <0 ) goto out_unlock; - buf[index] = regval; + data->scan.channels[index] = regval; }mutex_unlock (&data->lock); -iio_push_to_buffers_with_timestamp (indio_dev, buf, +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan,iio_get_time_ns (indio_dev));iio_trigger_notify_done (indio_dev->trig);return IRQ_HANDLED ;
drivers/iio/magnetometer/ak8975.c +11 -5
@@ -381,6 +381,12 @@ struct ak8975_data {struct iio_mount_matrix orientation;struct regulator *vdd;struct regulator *vid; + +/* Ensure natural alignment of timestamp */ +struct { +s16 channels[3 ]; +s64 ts__aligned(8) ; + } scan; };/* Enable attached power regulator if any. */
@@ -815,7 +821,6 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)const struct i2c_client *client = data->client;const struct ak_def *def = data->def;int ret; -s16 buff[8 ];/* 3 x 16 bits axis values + 1 aligned 64 bits timestamp */ __le16 fval[3 ];mutex_lock (&data->lock);
@@ -838,12 +843,13 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)mutex_unlock (&data->lock);/* Clamp to valid range. */ - buff[0 ] =clamp_t (s16,le16_to_cpu (fval[0 ]), -def->range, def->range); - buff[1 ] =clamp_t (s16,le16_to_cpu (fval[1 ]), -def->range, def->range); - buff[2 ] =clamp_t (s16,le16_to_cpu (fval[2 ]), -def->range, def->range); + data->scan.channels[0 ] =clamp_t (s16,le16_to_cpu (fval[0 ]), -def->range, def->range); + data->scan.channels[1 ] =clamp_t (s16,le16_to_cpu (fval[1 ]), -def->range, def->range); + data->scan.channels[2 ] =clamp_t (s16,le16_to_cpu (fval[2 ]), -def->range, def->range); -iio_push_to_buffers_with_timestamp (indio_dev, buff, +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan,iio_get_time_ns (indio_dev)); +return ; unlock:
drivers/infiniband/core/verbs.c +1 -1
@@ -1711,7 +1711,7 @@ int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u8 *speed, u8 *width)dev_put (netdev); -if (!rc) { +if (!rc && lksettings.base.speed != (u32 )SPEED_UNKNOWN ) { netdev_speed = lksettings.base.speed; }else { netdev_speed =SPEED_1000 ;
drivers/infiniband/hw/bnxt_re/ib_verbs.c +18 -3
@@ -3033,6 +3033,19 @@ static void bnxt_re_process_res_rawqp1_wc(struct ib_wc *wc, wc->wc_flags |=IB_WC_GRH ; } +static bool bnxt_re_check_if_vlan_valid (struct bnxt_re_dev *rdev, +u16 vlan_id) +{ +/* +* Check if the vlan is configured in the host. If not configured, it +* can be a transparent VLAN. So dont report the vlan id. +*/ +if (!__vlan_find_dev_deep_rcu (rdev->netdev, +htons (ETH_P_8021Q ), vlan_id)) +return false; +return true; +} +static bool bnxt_re_is_vlan_pkt (struct bnxt_qplib_cqe *orig_cqe,u16 *vid,u8 *sl) {
@@ -3101,9 +3114,11 @@ static void bnxt_re_process_res_shadow_qp_wc(struct bnxt_re_qp *qp, wc->src_qp = orig_cqe->src_qp;memcpy (wc->smac, orig_cqe->smac,ETH_ALEN );if (bnxt_re_is_vlan_pkt (orig_cqe, &vlan_id, &sl)) { - wc->vlan_id = vlan_id; - wc->sl = sl; - wc->wc_flags |=IB_WC_WITH_VLAN ; +if (bnxt_re_check_if_vlan_valid (rdev, vlan_id)) { + wc->vlan_id = vlan_id; + wc->sl = sl; + wc->wc_flags |=IB_WC_WITH_VLAN ; + } } wc->port_num =1 ; wc->vendor_err = orig_cqe->status;
drivers/infiniband/sw/rxe/rxe.c +0 -3
@@ -163,9 +163,6 @@ static int rxe_init_ports(struct rxe_dev *rxe)rxe_init_port_param (port); -if (!port->attr.pkey_tbl_len || !port->attr.gid_tbl_len) -return -EINVAL ; - port->pkey_tbl =kcalloc (port->attr.pkey_tbl_len,sizeof (*port->pkey_tbl),GFP_KERNEL );
drivers/infiniband/sw/rxe/rxe_mr.c +1 -0
@@ -203,6 +203,7 @@ int rxe_mem_init_user(struct rxe_pd *pd, u64 start, vaddr =page_address (sg_page (sg));if (!vaddr) {pr_warn ("null vaddr\n" ); +ib_umem_release (umem); err = -ENOMEM ; goto err1; }
drivers/infiniband/sw/rxe/rxe_verbs.c +1 -1
@@ -1146,7 +1146,7 @@ static ssize_t parent_show(struct device *device, struct rxe_dev *rxe = container_of(device, struct rxe_dev, ib_dev.dev); -return snprintf (buf,16 ,"%s\n" ,rxe_parent_name (rxe,1 )); +return scnprintf (buf,PAGE_SIZE ,"%s\n" ,rxe_parent_name (rxe,1 )); }static DEVICE_ATTR_RO (parent);
drivers/iommu/amd_iommu_v2.c +7 -0
@@ -776,6 +776,13 @@ int amd_iommu_init_device(struct pci_dev *pdev, int pasids)might_sleep (); +/* +* When memory encryption is active the device is likely not in a +* direct-mapped domain. Forbid using IOMMUv2 functionality for now. +*/ +if (mem_encrypt_active ()) +return -ENODEV ; +if (!amd_iommu_v2_supported ())return -ENODEV ;
drivers/mmc/host/sdhci-msm.c +17 -1
@@ -1060,7 +1060,7 @@ static void sdhci_msm_set_cdr(struct sdhci_host *host, bool enable)static int sdhci_msm_execute_tuning (struct mmc_host *mmc,u32 opcode) {struct sdhci_host *host =mmc_priv (mmc); -int tuning_seq_cnt =3 ; +int tuning_seq_cnt =10 ;u8 phase, tuned_phases[16 ], tuned_phase_cnt =0 ;int rc;struct mmc_ios ios = host->mmc->ios;
@@ -1124,6 +1124,22 @@ static int sdhci_msm_execute_tuning(struct mmc_host *mmc, u32 opcode) }while (++phase <ARRAY_SIZE (tuned_phases));if (tuned_phase_cnt) { +if (tuned_phase_cnt ==ARRAY_SIZE (tuned_phases)) { +/* +* All phases valid is _almost_ as bad as no phases +* valid. Probably all phases are not really reliable +* but we didn't detect where the unreliable place is. +* That means we'll essentially be guessing and hoping +* we get a good phase. Better to try a few times. +*/ +dev_dbg (mmc_dev (mmc),"%s: All phases valid; try again\n" , +mmc_hostname (mmc)); +if (--tuning_seq_cnt) { + tuned_phase_cnt =0 ; + goto retry; + } + } + rc =msm_find_most_appropriate_phase (host, tuned_phases, tuned_phase_cnt);if (rc <0 )
drivers/net/wan/hdlc_cisco.c +1 -0
@@ -374,6 +374,7 @@ static int cisco_ioctl(struct net_device *dev, struct ifreq *ifr)memcpy (&state (hdlc)->settings, &new_settings, size);spin_lock_init (&state (hdlc)->lock); dev->header_ops = &cisco_header_ops; + dev->hard_header_len =sizeof (struct hdlc_header ); dev->type =ARPHRD_CISCO ;call_netdevice_notifiers (NETDEV_POST_TYPE_CHANGE , dev);netif_dormant_on (dev);
drivers/net/wan/lapbether.c +3 -0
@@ -213,6 +213,8 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb) skb->dev = dev = lapbeth->ethdev; +skb_reset_network_header (skb); +dev_hard_header (skb, dev,ETH_P_DEC , bcast_addr,NULL ,0 );dev_queue_xmit (skb);
@@ -343,6 +345,7 @@ static int lapbeth_new_device(struct net_device *dev)*/ ndev->needed_headroom =-1 +3 +2 + dev->hard_header_len + dev->needed_headroom; + ndev->needed_tailroom = dev->needed_tailroom; lapbeth =netdev_priv (ndev); lapbeth->axdev = ndev;
drivers/nfc/st95hf/core.c +1 -1
@@ -981,7 +981,7 @@ static int st95hf_in_send_cmd(struct nfc_digital_dev *ddev, rc =down_killable (&stcontext->exchange_lock);if (rc) {WARN (1 ,"Semaphore is not found up in st95hf_in_send_cmd\n" ); -return rc; + goto free_skb_resp; } rc = st95hf_spi_send(&stcontext->spicontext, skb->data,
drivers/nvme/host/fabrics.c +0 -1
@@ -577,7 +577,6 @@ bool __nvmf_check_ready(struct nvme_ctrl *ctrl, struct request *rq,* which is require to set the queue live in the appropinquate states. */ switch (ctrl->state) { -case NVME_CTRL_NEW :case NVME_CTRL_CONNECTING :if (req->cmd->common.opcode == nvme_fabrics_command && req->cmd->fabrics.fctype == nvme_fabrics_type_connect)
drivers/nvme/host/rdma.c +6 -0
@@ -118,6 +118,7 @@ struct nvme_rdma_ctrl {struct sockaddr_storage src_addr;struct nvme_ctrl ctrl; +struct mutex teardown_lock;bool use_inline_data; };
@@ -880,6 +881,7 @@ static int nvme_rdma_configure_io_queues(struct nvme_rdma_ctrl *ctrl, bool new)static void nvme_rdma_teardown_admin_queue (struct nvme_rdma_ctrl *ctrl,bool remove) { +mutex_lock (&ctrl->teardown_lock);blk_mq_quiesce_queue (ctrl->ctrl.admin_q);nvme_rdma_stop_queue (&ctrl->queues[0 ]);if (ctrl->ctrl.admin_tagset)
@@ -887,11 +889,13 @@ static void nvme_rdma_teardown_admin_queue(struct nvme_rdma_ctrl *ctrl, nvme_cancel_request, &ctrl->ctrl);blk_mq_unquiesce_queue (ctrl->ctrl.admin_q);nvme_rdma_destroy_admin_queue (ctrl, remove); +mutex_unlock (&ctrl->teardown_lock); }static void nvme_rdma_teardown_io_queues (struct nvme_rdma_ctrl *ctrl,bool remove) { +mutex_lock (&ctrl->teardown_lock);if (ctrl->ctrl.queue_count >1 ) {nvme_stop_queues (&ctrl->ctrl);nvme_rdma_stop_io_queues (ctrl);
@@ -902,6 +906,7 @@ static void nvme_rdma_teardown_io_queues(struct nvme_rdma_ctrl *ctrl,nvme_start_queues (&ctrl->ctrl);nvme_rdma_destroy_io_queues (ctrl, remove); } +mutex_unlock (&ctrl->teardown_lock); }static void nvme_rdma_stop_ctrl (struct nvme_ctrl *nctrl)
@@ -1955,6 +1960,7 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,return ERR_PTR (-ENOMEM ); ctrl->ctrl.opts = opts;INIT_LIST_HEAD (&ctrl->list); +mutex_init (&ctrl->teardown_lock);if (opts->mask &NVMF_OPT_TRSVCID ) port = opts->trsvcid;
drivers/phy/qualcomm/phy-qcom-qmp.c +9 -7
@@ -311,8 +311,8 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_COM_BG_TRIM ,0xf ),QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP_EN ,0x1 ),QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_MAP ,0x0 ), -QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER1 ,0x1f ), -QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER2 ,0x3f ), +QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER1 ,0xff ), +QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER2 ,0x1f ),QMP_PHY_INIT_CFG (QSERDES_COM_CMN_CONFIG ,0x6 ),QMP_PHY_INIT_CFG (QSERDES_COM_PLL_IVCO ,0xf ), QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x0),
@@ -338,7 +338,6 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_COM_INTEGLOOP_GAIN1_MODE0 ,0x0 ),QMP_PHY_INIT_CFG (QSERDES_COM_INTEGLOOP_GAIN0_MODE0 ,0x80 ),QMP_PHY_INIT_CFG (QSERDES_COM_BIAS_EN_CTRL_BY_PSM ,0x1 ), -QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_CTRL ,0xa ),QMP_PHY_INIT_CFG (QSERDES_COM_SSC_EN_CENTER ,0x1 ),QMP_PHY_INIT_CFG (QSERDES_COM_SSC_PER1 ,0x31 ), QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x1),
@@ -347,7 +346,6 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_COM_SSC_STEP_SIZE1 ,0x2f ),QMP_PHY_INIT_CFG (QSERDES_COM_SSC_STEP_SIZE2 ,0x19 ), QMP_PHY_INIT_CFG(QSERDES_COM_CLK_EP_DIV, 0x19), - QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_CNTRL, 0x7), }; static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = {
@@ -355,6 +353,8 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_TX_LANE_MODE ,0x6 ),QMP_PHY_INIT_CFG (QSERDES_TX_RES_CODE_LANE_OFFSET ,0x2 ),QMP_PHY_INIT_CFG (QSERDES_TX_RCV_DETECT_LVL_2 ,0x12 ), +QMP_PHY_INIT_CFG (QSERDES_TX_EMP_POST1_LVL ,0x36 ), + QMP_PHY_INIT_CFG(QSERDES_TX_SLEW_CNTL, 0x0a), }; static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = {
@@ -365,7 +365,6 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4 ,0xdb ),QMP_PHY_INIT_CFG (QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE ,0x4b ), QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x4), - QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN_HALF, 0x4), }; static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = {
@@ -818,6 +817,9 @@ static const struct qmp_phy_cfg msm8996_usb3phy_cfg = { .mask_pcs_ready = PHYSTATUS, }; +static const char *const ipq8074_pciephy_clk_l[] = { +"aux" ,"cfg_ahb" , +};/* list of resets */ static const char *const ipq8074_pciephy_reset_l[] = {"phy" ,"common" ,
@@ -835,8 +837,8 @@ static const struct qmp_phy_cfg ipq8074_pciephy_cfg = { .rx_tbl_num = ARRAY_SIZE(ipq8074_pcie_rx_tbl), .pcs_tbl = ipq8074_pcie_pcs_tbl, .pcs_tbl_num = ARRAY_SIZE(ipq8074_pcie_pcs_tbl), - .clk_list = NULL, - .num_clks = 0, + .clk_list = ipq8074_pciephy_clk_l, + .num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l), .reset_list = ipq8074_pciephy_reset_l, .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l), .vreg_list = NULL,
drivers/phy/qualcomm/phy-qcom-qmp.h +2 -0
@@ -77,6 +77,8 @@#define QSERDES_COM_CORECLK_DIV_MODE1 0x1bc/* Only for QMP V2 PHY - TX registers */ +#define QSERDES_TX_EMP_POST1_LVL 0x018 +#define QSERDES_TX_SLEW_CNTL 0x040#define QSERDES_TX_RES_CODE_LANE_OFFSET 0x054#define QSERDES_TX_DEBUG_BUS_SEL 0x064#define QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN 0x068
drivers/regulator/core.c +26 -20
84 lines not on this page · raw message
drivers/scsi/libsas/sas_ata.c +4 -1
@@ -223,7 +223,10 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc) task->num_scatter = si; } - task->data_dir = qc->dma_dir; +if (qc->tf.protocol ==ATA_PROT_NODATA ) + task->data_dir =DMA_NONE ; +else + task->data_dir = qc->dma_dir; task->scatter = qc->sg; task->ata_task.retry_count =1 ; task->task_state_flags =SAS_TASK_STATE_PENDING ;
drivers/staging/greybus/audio_topology.c +15 -14
@@ -460,6 +460,15 @@ static int gbcodec_mixer_dapm_ctl_put(struct snd_kcontrol *kcontrol, val = ucontrol->value.integer.value[0 ] & mask; connect = !!val; + ret =gb_pm_runtime_get_sync (bundle); +if (ret) +return ret; + + ret =gb_audio_gb_get_control (module->mgmt_connection, data->ctl_id, +GB_AUDIO_INVALID_INDEX , &gbvalue); +if (ret) + goto exit; +/* update ucontrol */ if (gbvalue.value.integer_value[0 ] != val) {for (wi =0 ; wi < wlist->num_widgets; wi++) {
@@ -473,25 +482,17 @@ static int gbcodec_mixer_dapm_ctl_put(struct snd_kcontrol *kcontrol, gbvalue.value.integer_value[0 ] =cpu_to_le32 (ucontrol->value.integer.value[0 ]); - ret =gb_pm_runtime_get_sync (bundle); -if (ret) -return ret; - ret =gb_audio_gb_set_control (module->mgmt_connection, data->ctl_id,GB_AUDIO_INVALID_INDEX , &gbvalue); - -gb_pm_runtime_put_autosuspend (bundle); - -if (ret) { -dev_err_ratelimited (codec->dev, -"%d:Error in %s for %s\n" , ret, - __func__, kcontrol->id.name); -return ret; - } } -return 0 ; +exit: +gb_pm_runtime_put_autosuspend (bundle); +if (ret) +dev_err_ratelimited (codec_dev,"%d:Error in %s for %s\n" , ret, + __func__, kcontrol->id.name); +return ret; }#define SOC_DAPM_MIXER_GB (xname, kcount, data) \
drivers/staging/wlan-ng/hfa384x_usb.c +0 -5
@@ -532,13 +532,8 @@ static void hfa384x_usb_defer(struct work_struct *data)*/ void hfa384x_create (struct hfa384x *hw,struct usb_device *usb) { -memset (hw,0 ,sizeof (*hw)); hw->usb = usb; -/* set up the endpoints */ - hw->endp_in =usb_rcvbulkpipe (usb,1 ); - hw->endp_out =usb_sndbulkpipe (usb,2 ); -/* Set up the waitq */ init_waitqueue_head (&hw->cmdq);
drivers/staging/wlan-ng/prism2usb.c +6 -13
@@ -61,23 +61,14 @@ static int prism2sta_probe_usb(struct usb_interface *interface, const struct usb_device_id *id) {struct usb_device *dev; -const struct usb_endpoint_descriptor *epd; -const struct usb_host_interface *iface_desc = interface->cur_altsetting; +struct usb_endpoint_descriptor *bulk_in, *bulk_out; +struct usb_host_interface *iface_desc = interface->cur_altsetting;struct wlandevice *wlandev =NULL ;struct hfa384x *hw =NULL ;int result =0 ; -if (iface_desc->desc.bNumEndpoints !=2 ) { - result = -ENODEV ; - goto failed; - } - - result = -EINVAL ; - epd = &iface_desc->endpoint[1 ].desc; -if (!usb_endpoint_is_bulk_in (epd)) - goto failed; - epd = &iface_desc->endpoint[2 ].desc; -if (!usb_endpoint_is_bulk_out (epd)) + result =usb_find_common_endpoints (iface_desc, &bulk_in, &bulk_out,NULL ,NULL ); +if (result) goto failed; dev =interface_to_usbdev (interface);
@@ -96,6 +87,8 @@ static int prism2sta_probe_usb(struct usb_interface *interface, }/* Initialize the hw data */ + hw->endp_in =usb_rcvbulkpipe (dev, bulk_in->bEndpointAddress); + hw->endp_out =usb_sndbulkpipe (dev, bulk_out->bEndpointAddress);hfa384x_create (hw, dev); hw->wlandev = wlandev;
drivers/target/iscsi/iscsi_target.c +15 -2
@@ -1381,14 +1381,27 @@ static u32 iscsit_do_crypto_hash_sg( sg = cmd->first_data_sg; page_off = cmd->first_data_sg_off; +if (data_length && page_off) { +struct scatterlist first_sg; +u32 len =min_t (u32, data_length, sg->length - page_off); + +sg_init_table (&first_sg,1 ); +sg_set_page (&first_sg,sg_page (sg), len, sg->offset + page_off); + +ahash_request_set_crypt (hash, &first_sg,NULL , len); +crypto_ahash_update (hash); + + data_length -= len; + sg =sg_next (sg); + } +while (data_length) { -u32 cur_len =min_t (u32, data_length, (sg->length - page_off)); +u32 cur_len =min_t (u32, data_length, sg->length);ahash_request_set_crypt (hash, sg,NULL , cur_len);crypto_ahash_update (hash); data_length -= cur_len; - page_off =0 ;/* iscsit_map_iovec has already checked for invalid sg pointers */ sg =sg_next (sg); }
drivers/target/iscsi/iscsi_target_login.c +3 -3
@@ -1183,7 +1183,7 @@ void iscsit_free_conn(struct iscsi_conn *conn) }void iscsi_target_login_sess_out (struct iscsi_conn *conn, -struct iscsi_np *np,bool zero_tsih,bool new_sess) +bool zero_tsih,bool new_sess) {if (!new_sess) goto old_sess_out;
@@ -1201,7 +1201,6 @@ void iscsi_target_login_sess_out(struct iscsi_conn *conn, conn->sess =NULL ; old_sess_out: -iscsi_stop_login_thread_timer (np);/* * If login negotiation fails check if the Time2Retain timer * needs to be restarted.
@@ -1441,8 +1440,9 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) new_sess_out: new_sess = true; old_sess_out: +iscsi_stop_login_thread_timer (np); tpg_np = conn->tpg_np; -iscsi_target_login_sess_out (conn, np, zero_tsih, new_sess); +iscsi_target_login_sess_out (conn, zero_tsih, new_sess); new_sess = false;if (tpg) {
drivers/target/iscsi/iscsi_target_login.h +1 -2
@@ -22,8 +22,7 @@ extern int iscsit_put_login_tx(struct iscsi_conn *, struct iscsi_login *, u32);extern void iscsit_free_conn (struct iscsi_conn *);extern int iscsit_start_kthreads (struct iscsi_conn *);extern void iscsi_post_login_handler (struct iscsi_np *,struct iscsi_conn *,u8 ); -extern void iscsi_target_login_sess_out (struct iscsi_conn *,struct iscsi_np *, -bool ,bool ); +extern void iscsi_target_login_sess_out (struct iscsi_conn *,bool ,bool );extern int iscsi_target_login_thread (void *);extern void iscsi_handle_login_thread_timeout (struct timer_list *t);
drivers/target/iscsi/iscsi_target_nego.c +1 -2
@@ -554,12 +554,11 @@ static bool iscsi_target_sk_check_and_clear(struct iscsi_conn *conn, unsigned instatic void iscsi_target_login_drop (struct iscsi_conn *conn,struct iscsi_login *login) { -struct iscsi_np *np = login->np;bool zero_tsih = login->zero_tsih;iscsi_remove_failed_auth_entry (conn);iscsi_target_nego_release (conn); -iscsi_target_login_sess_out (conn, np, zero_tsih, true); +iscsi_target_login_sess_out (conn, zero_tsih, true); }struct conn_timeout {
drivers/usb/core/message.c +42 -49
135 lines not on this page · raw message
drivers/usb/core/sysfs.c +5 -0
@@ -888,7 +888,11 @@ read_descriptors(struct file *filp, struct kobject *kobj,size_t srclen, n;int cfgno;void *src; +int retval; + retval =usb_lock_device_interruptible (udev); +if (retval <0 ) +return -EINTR ;/* The binary attribute begins with the device descriptor. * Following that are the raw descriptor entries for all the * configurations (config plus subsidiary descriptors).
@@ -913,6 +917,7 @@ read_descriptors(struct file *filp, struct kobject *kobj, off -= srclen; } } +usb_unlock_device (udev);return count - nleft; }
drivers/usb/serial/ftdi_sio.c +1 -0
@@ -703,6 +703,7 @@ static const struct usb_device_id id_table_combined[] = { { USB_DEVICE(XSENS_VID, XSENS_AWINDA_STATION_PID) }, { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) }, { USB_DEVICE(XSENS_VID, XSENS_MTDEVBOARD_PID) }, + { USB_DEVICE(XSENS_VID, XSENS_MTIUSBCONVERTER_PID) }, { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) }, { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) }, { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
drivers/usb/serial/ftdi_sio_ids.h +1 -0
@@ -160,6 +160,7 @@#define XSENS_AWINDA_DONGLE_PID 0x0102#define XSENS_MTW_PID 0x0200/* Xsens MTw */ #define XSENS_MTDEVBOARD_PID 0x0300/* Motion Tracker Development Board */ +#define XSENS_MTIUSBCONVERTER_PID 0x0301/* MTi USB converter */ #define XSENS_CONVERTER_PID 0xD00D/* Xsens USB-serial converter */ /* Xsens devices using FTDI VID */
drivers/usb/serial/option.c +14 -8
@@ -1094,14 +1094,18 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M), .driver_info = RSVD(1) | RSVD(3) }, /* Quectel products using Quectel vendor ID */ - { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21), - .driver_info = RSVD(4) }, - { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25), - .driver_info = RSVD(4) }, - { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95), - .driver_info = RSVD(4) }, - { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96), - .driver_info = RSVD(4) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0xff, 0xff), + .driver_info = NUMEP2 }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0xff, 0xff), + .driver_info = NUMEP2 }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff), + .driver_info = NUMEP2 }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96, 0xff, 0xff, 0xff), + .driver_info = NUMEP2 }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff), .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) },
@@ -1819,6 +1823,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */ { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */ .driver_info = RSVD(7) }, + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9205, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT+ECM mode */ + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9206, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT-only mode */ { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200), .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) }, { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),
drivers/usb/typec/ucsi/ucsi_acpi.c +4 -0
@@ -64,11 +64,15 @@ static void ucsi_acpi_notify(acpi_handle handle, u32 event, void *data)static int ucsi_acpi_probe (struct platform_device *pdev) { +struct acpi_device *adev =ACPI_COMPANION (&pdev->dev);struct ucsi_acpi *ua;struct resource *res;acpi_status status;int ret; +if (adev->dep_unmet) +return -EPROBE_DEFER ; + ua =devm_kzalloc (&pdev->dev,sizeof (*ua),GFP_KERNEL );if (!ua)return -ENOMEM ;
drivers/video/console/Kconfig +0 -46
52 lines not on this page · raw message
drivers/video/console/vgacon.c +1 -220
257 lines not on this page · raw message
drivers/video/fbdev/core/bitblit.c +1 -10
@@ -234,7 +234,7 @@ static void bit_clear_margins(struct vc_data *vc, struct fb_info *info, }static void bit_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = info->fbcon_par;
@@ -247,15 +247,6 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, int mode, cursor.set =0 ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; -return ; - }else - y += softback_lines; - } - c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c); src = vc->vc_font.data + ((c & charmask) * (w * vc->vc_font.height));
drivers/video/fbdev/core/fbcon.c +4 -330
473 lines not on this page · raw message
drivers/video/fbdev/core/fbcon.h +1 -1
@@ -62,7 +62,7 @@ struct fbcon_ops {void (*clear_margins)(struct vc_data *vc,struct fb_info *info,int color,int bottom_only);void (*cursor)(struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg); +int fg,int bg);int (*update_start)(struct fb_info *info);int (*rotate_font)(struct fb_info *info,struct vc_data *vc);struct fb_var_screeninfo var;/* copy of the current fb_var_screeninfo */
drivers/video/fbdev/core/fbcon_ccw.c +1 -10
@@ -219,7 +219,7 @@ static void ccw_clear_margins(struct vc_data *vc, struct fb_info *info, }static void ccw_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = info->fbcon_par;
@@ -236,15 +236,6 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, int mode, cursor.set =0 ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; -return ; - }else - y += softback_lines; - } - c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c); src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.width));
drivers/video/fbdev/core/fbcon_cw.c +1 -10
@@ -202,7 +202,7 @@ static void cw_clear_margins(struct vc_data *vc, struct fb_info *info, }static void cw_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = info->fbcon_par;
@@ -219,15 +219,6 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, int mode, cursor.set =0 ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; -return ; - }else - y += softback_lines; - } - c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c); src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.width));
drivers/video/fbdev/core/fbcon_ud.c +1 -10
@@ -249,7 +249,7 @@ static void ud_clear_margins(struct vc_data *vc, struct fb_info *info, }static void ud_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = info->fbcon_par;
@@ -267,15 +267,6 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, int mode, cursor.set =0 ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; -return ; - }else - y += softback_lines; - } - c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c); src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.height));
drivers/video/fbdev/core/tileblit.c +1 -1
@@ -80,7 +80,7 @@ static void tile_clear_margins(struct vc_data *vc, struct fb_info *info, }static void tile_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_tilecursor cursor;int use_sw = (vc->vc_cursor_type &0x10 );
drivers/video/fbdev/vga16fb.c +1 -1
@@ -1121,7 +1121,7 @@ static void vga_8planes_imageblit(struct fb_info *info, const struct fb_image *ichar oldop =setop (0 );char oldsr =setsr (0 );char oldmask =selectmask (); -const char *cdat = image->data; +const unsigned char *cdat = image->data;u32 dx = image->dx;char __iomem *where;int y;
fs/btrfs/extent-tree.c +9 -10
@@ -1057,12 +1057,11 @@ int btrfs_get_extent_inline_ref_type(const struct extent_buffer *eb,if (type ==BTRFS_SHARED_BLOCK_REF_KEY ) {ASSERT (eb->fs_info);/* -* Every shared one has parent tree -* block, which must be aligned to -* nodesize. +* Every shared one has parent tree block, +* which must be aligned to sector size. */ if (offset && -IS_ALIGNED (offset, eb->fs_info->nodesize)) +IS_ALIGNED (offset, eb->fs_info->sectorsize))return type; } }else if (is_data ==BTRFS_REF_TYPE_DATA ) {
@@ -1071,12 +1070,11 @@ int btrfs_get_extent_inline_ref_type(const struct extent_buffer *eb,if (type ==BTRFS_SHARED_DATA_REF_KEY ) {ASSERT (eb->fs_info);/* -* Every shared one has parent tree -* block, which must be aligned to -* nodesize. +* Every shared one has parent tree block, +* which must be aligned to sector size. */ if (offset && -IS_ALIGNED (offset, eb->fs_info->nodesize)) +IS_ALIGNED (offset, eb->fs_info->sectorsize))return type; } }else {
@@ -1086,8 +1084,9 @@ int btrfs_get_extent_inline_ref_type(const struct extent_buffer *eb, }btrfs_print_leaf ((struct extent_buffer *)eb); -btrfs_err (eb->fs_info,"eb %llu invalid extent inline ref type %d" , - eb->start, type); +btrfs_err (eb->fs_info, +"eb %llu iref 0x%lx invalid extent inline ref type %d" , + eb->start, (unsigned long )iref, type);WARN_ON (1 );return BTRFS_REF_TYPE_INVALID ;
fs/btrfs/ioctl.c +2 -1
@@ -2189,7 +2189,8 @@ static noinline int search_ioctl(struct inode *inode, key.offset = sk->min_offset;while (1 ) { - ret =fault_in_pages_writeable (ubuf, *buf_size - sk_offset); + ret =fault_in_pages_writeable (ubuf + sk_offset, + *buf_size - sk_offset);if (ret)break ;
fs/btrfs/print-tree.c +7 -5
@@ -95,9 +95,10 @@ static void print_extent_item(struct extent_buffer *eb, int slot, int type)* offset is supposed to be a tree block which * must be aligned to nodesize. */ -if (!IS_ALIGNED (offset, eb->fs_info->nodesize)) -pr_info ("\t\t\t(parent %llu is NOT ALIGNED to nodesize %llu)\n" , - offset, (unsigned long long )eb->fs_info->nodesize); +if (!IS_ALIGNED (offset, eb->fs_info->sectorsize)) +pr_info ( +"\t\t\t(parent %llu not aligned to sectorsize %u)\n" , + offset, eb->fs_info->sectorsize);break ;case BTRFS_EXTENT_DATA_REF_KEY : dref = (struct btrfs_extent_data_ref *)(&iref->offset);
@@ -112,8 +113,9 @@ static void print_extent_item(struct extent_buffer *eb, int slot, int type)* must be aligned to nodesize. */ if (!IS_ALIGNED (offset, eb->fs_info->nodesize)) -pr_info ("\t\t\t(parent %llu is NOT ALIGNED to nodesize %llu)\n" , - offset, (unsigned long long )eb->fs_info->nodesize); +pr_info ( +"\t\t\t(parent %llu not aligned to sectorsize %u)\n" , + offset, eb->fs_info->sectorsize);break ;default : pr_cont("(extent %llu has INVALID ref type %d)\n",
fs/btrfs/volumes.c +10 -0
@@ -4,6 +4,7 @@*/ #include <linux/sched.h> +#include <linux/sched/mm.h> #include <linux/bio.h> #include <linux/slab.h> #include <linux/buffer_head.h>
@@ -6292,8 +6293,17 @@ static struct btrfs_device *add_missing_dev(struct btrfs_fs_devices *fs_devices, u64 devid, u8 *dev_uuid) { struct btrfs_device *device; +unsigned int nofs_flag; +/* +* We call this under the chunk_mutex, so we want to use NOFS for this +* allocation, however we don't want to change btrfs_alloc_device() to +* always do NOFS because we use it in a lot of other GFP_KERNEL safe +* places. +*/ + nofs_flag =memalloc_nofs_save (); device =btrfs_alloc_device (NULL , &devid, dev_uuid); +memalloc_nofs_restore (nofs_flag);if (IS_ERR (device))return device;
fs/xfs/libxfs/xfs_attr_leaf.c +2 -2
@@ -551,8 +551,8 @@ xfs_attr_shortform_create(xfs_da_args_t *args)ASSERT (ifp->if_flags &XFS_IFINLINE ); }xfs_idata_realloc (dp,sizeof (*hdr),XFS_ATTR_FORK ); - hdr = (xfs_attr_sf_hdr_t *)ifp->if_u1.if_data; - hdr->count =0 ; + hdr = (struct xfs_attr_sf_hdr *)ifp->if_u1.if_data; +memset (hdr,0 ,sizeof (*hdr)); hdr->totsize =cpu_to_be16 (sizeof (*hdr));xfs_trans_log_inode (args->trans, dp,XFS_ILOG_CORE |XFS_ILOG_ADATA ); }
include/linux/netfilter/nf_conntrack_sctp.h +2 -0
@@ -9,6 +9,8 @@ struct ip_ct_sctp {enum sctp_conntrack state;__be32 vtag[IP_CT_DIR_MAX ]; +u8 last_dir; + u8 flags; };#endif /* _NF_CONNTRACK_SCTP_H */
include/soc/nps/common.h +6 -0
@@ -45,6 +45,12 @@#define CTOP_INST_MOV2B_FLIP_R3_B1_B2_INST 0x5B60#define CTOP_INST_MOV2B_FLIP_R3_B1_B2_LIMM 0x00010422 +#ifndef AUX_IENABLE +#define AUX_IENABLE 0x40c +#endif + +#define CTOP_AUX_IACK (0xFFFFF800 + 0x088) +#ifndef __ASSEMBLY__/* In order to increase compilation test coverage */
kernel/gcov/gcc_4_7.c +3 -1
@@ -19,7 +19,9 @@#include <linux/vmalloc.h> #include "gcov.h" -#if (__GNUC__ >=7 ) +#if (__GNUC__ >=10 ) +#define GCOV_COUNTERS 8 +#elif (__GNUC__ >=7 )#define GCOV_COUNTERS 9#elif (__GNUC__ >5 ) || (__GNUC__ ==5 && __GNUC_MINOR__ >=1 )#define GCOV_COUNTERS 10
net/netfilter/nf_conntrack_proto_sctp.c +35 -4
@@ -65,6 +65,8 @@ static const unsigned int sctp_timeouts[SCTP_CONNTRACK_MAX] = { [SCTP_CONNTRACK_HEARTBEAT_ACKED] = 210 SECS, }; +#define SCTP_FLAG_HEARTBEAT_VTAG_FAILED 1 +#define sNO SCTP_CONNTRACK_NONE#define sCL SCTP_CONNTRACK_CLOSED#define sCW SCTP_CONNTRACK_COOKIE_WAIT
@@ -288,6 +290,7 @@ static int sctp_packet(struct nf_conn *ct,u_int32_t offset, count;unsigned int *timeouts;unsigned long map[256 /sizeof (unsigned long )] = {0 }; +bool ignore = false; sh =skb_header_pointer (skb, dataoff,sizeof (_sctph), &_sctph);if (sh ==NULL )
@@ -332,15 +335,39 @@ static int sctp_packet(struct nf_conn *ct,/* Sec 8.5.1 (D) */ if (sh->vtag != ct->proto.sctp.vtag[dir]) goto out_unlock; - }else if (sch->type ==SCTP_CID_HEARTBEAT || - sch->type ==SCTP_CID_HEARTBEAT_ACK ) { + }else if (sch->type ==SCTP_CID_HEARTBEAT ) { +if (ct->proto.sctp.vtag[dir] ==0 ) { +pr_debug ("Setting %d vtag %x for dir %d\n" , sch->type, sh->vtag, dir); + ct->proto.sctp.vtag[dir] = sh->vtag; + }else if (sh->vtag != ct->proto.sctp.vtag[dir]) { +if (test_bit (SCTP_CID_DATA , map) || ignore) + goto out_unlock; + + ct->proto.sctp.flags |=SCTP_FLAG_HEARTBEAT_VTAG_FAILED ; + ct->proto.sctp.last_dir = dir; + ignore = true; +continue ; + }else if (ct->proto.sctp.flags &SCTP_FLAG_HEARTBEAT_VTAG_FAILED ) { + ct->proto.sctp.flags &= ~SCTP_FLAG_HEARTBEAT_VTAG_FAILED ; + } + }else if (sch->type ==SCTP_CID_HEARTBEAT_ACK ) {if (ct->proto.sctp.vtag[dir] ==0 ) {pr_debug ("Setting vtag %x for dir %d\n" , sh->vtag, dir); ct->proto.sctp.vtag[dir] = sh->vtag; }else if (sh->vtag != ct->proto.sctp.vtag[dir]) { -pr_debug ("Verification tag check failed\n" ); - goto out_unlock; +if (test_bit (SCTP_CID_DATA , map) || ignore) + goto out_unlock; + +if ((ct->proto.sctp.flags &SCTP_FLAG_HEARTBEAT_VTAG_FAILED ) ==0 || + ct->proto.sctp.last_dir == dir) + goto out_unlock; + + ct->proto.sctp.flags &= ~SCTP_FLAG_HEARTBEAT_VTAG_FAILED ; + ct->proto.sctp.vtag[dir] = sh->vtag; + ct->proto.sctp.vtag[!dir] =0 ; + }else if (ct->proto.sctp.flags &SCTP_FLAG_HEARTBEAT_VTAG_FAILED ) { + ct->proto.sctp.flags &= ~SCTP_FLAG_HEARTBEAT_VTAG_FAILED ; } }
@@ -375,6 +402,10 @@ static int sctp_packet(struct nf_conn *ct, }spin_unlock_bh (&ct->lock); +/* allow but do not refresh timeout */ +if (ignore) +return NF_ACCEPT ; + timeouts =nf_ct_timeout_lookup (ct);if (!timeouts) timeouts =sctp_pernet (nf_ct_net (ct))->timeouts;
sound/hda/hdac_device.c +2 -0
@@ -124,6 +124,8 @@ EXPORT_SYMBOL_GPL(snd_hdac_device_init);void snd_hdac_device_exit (struct hdac_device *codec) {pm_runtime_put_noidle (&codec->dev); +/* keep balance of runtime PM child_count in parent device */ +pm_runtime_set_suspended (&codec->dev);snd_hdac_bus_remove_device (codec->bus, codec);kfree (codec->vendor_name);kfree (codec->chip_name);
sound/pci/hda/patch_hdmi.c +5 -0
@@ -3431,6 +3431,7 @@ static int tegra_hdmi_build_pcms(struct hda_codec *codec)static int patch_tegra_hdmi (struct hda_codec *codec) { +struct hdmi_spec *spec;int err; err =patch_generic_hdmi (codec);
@@ -3438,6 +3439,10 @@ static int patch_tegra_hdmi(struct hda_codec *codec)return err; codec->patch_ops.build_pcms = tegra_hdmi_build_pcms; + spec = codec->spec; + spec->chmap.ops.chmap_cea_alloc_validate_get_type = + nvhdmi_chmap_cea_alloc_validate_get_type; + spec->chmap.ops.chmap_validate = nvhdmi_chmap_validate;return 0 ; }