Linux 4.9.237
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.9.237 kernel.
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/plat-eznps/include/plat/ctop.h | 1 arch/arm/boot/dts/socfpga_arria10.dtsi | 2 arch/mips/Kconfig | 1 arch/mips/sni/a20r.c | 9 arch/powerpc/configs/pasemi_defconfig | 1 arch/powerpc/configs/ppc6xx_defconfig | 1 arch/powerpc/kernel/dma-iommu.c | 3 arch/x86/configs/i386_defconfig | 2 arch/x86/configs/x86_64_defconfig | 2 arch/x86/kvm/vmx.c | 1 drivers/atm/firestream.c | 1 drivers/block/rbd.c | 12 + drivers/clk/rockchip/clk-rk3228.c | 2 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 7 drivers/hv/channel_mgmt.c | 7 drivers/i2c/algos/i2c-algo-pca.c | 35 ++- 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/mcp3422.c | 16 - drivers/iio/adc/ti-adc081c.c | 11 drivers/iio/adc/ti-ads1015.c | 10 drivers/iio/light/ltr501.c | 15 - drivers/iio/light/max44000.c | 12 - drivers/iio/magnetometer/ak8975.c | 26 +- drivers/infiniband/sw/rxe/rxe.c | 5 drivers/infiniband/sw/rxe/rxe_loc.h | 20 + drivers/infiniband/sw/rxe/rxe_mcast.c | 4 drivers/infiniband/sw/rxe/rxe_mr.c | 1 drivers/infiniband/sw/rxe/rxe_net.c | 43 +-- drivers/infiniband/sw/rxe/rxe_req.c | 4 drivers/infiniband/sw/rxe/rxe_resp.c | 4 drivers/infiniband/sw/rxe/rxe_verbs.c | 10 drivers/infiniband/sw/rxe/rxe_verbs.h | 22 - drivers/input/serio/i8042-x86ia64io.h | 16 + drivers/net/wan/hdlc_cisco.c | 1 drivers/net/wan/lapbether.c | 3 drivers/nfc/st95hf/core.c | 2 drivers/rapidio/Kconfig | 2 drivers/regulator/core.c | 46 ++-- drivers/scsi/libsas/sas_ata.c | 5 drivers/scsi/lpfc/lpfc_els.c | 4 drivers/scsi/pm8001/pm8001_sas.c | 2 drivers/spi/spi-loopback-test.c | 2 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/tty/serial/8250/8250_pci.c | 11 drivers/usb/class/usblp.c | 5 drivers/usb/core/message.c | 91 +++----- drivers/usb/core/quirks.c | 4 drivers/usb/core/sysfs.c | 5 drivers/usb/core/usb.c | 83 +++++++ drivers/usb/host/ehci-hcd.c | 1 drivers/usb/host/ehci-hub.c | 1 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 1 drivers/usb/serial/option.c | 2 drivers/usb/storage/uas.c | 14 + drivers/video/console/Kconfig | 25 -- drivers/video/console/bitblit.c | 11 drivers/video/console/fbcon.c | 336 ------------------------------ drivers/video/console/fbcon.h | 2 drivers/video/console/fbcon_ccw.c | 11 drivers/video/console/fbcon_cw.c | 11 drivers/video/console/fbcon_ud.c | 11 drivers/video/console/tileblit.c | 2 drivers/video/console/vgacon.c | 159 -------------- drivers/video/fbdev/vga16fb.c | 2 fs/btrfs/ioctl.c | 3 fs/nfs/nfs4proc.c | 7 fs/xfs/libxfs/xfs_attr_leaf.c | 4 include/linux/i2c-algo-pca.h | 15 + include/linux/usb.h | 35 +++ include/soc/nps/common.h | 6 kernel/gcov/gcc_4_7.c | 4 net/core/skbuff.c | 10 net/sunrpc/rpcb_clnt.c | 4 sound/hda/hdac_device.c | 2 sound/pci/hda/patch_hdmi.c | 5 tools/perf/tests/pmu.c | 1 tools/perf/util/pmu.c | 11 tools/perf/util/pmu.h | 1 90 files changed, 594 insertions(+), 829 deletions(-)
Adam Borowski (1):
x86/defconfig: Enable CONFIG_USB_XHCI_HCD=y
Aleksander Morgado (1):
USB: serial: option: add support for SIM7070/SIM7080/SIM7090 modules
Alexey Kardashevskiy (1):
powerpc/dma: Fix dma_map_ops::get_required_mask
Angelo Compagnucci (2):
iio: adc: mcp3422: fix locking scope
iio: adc: mcp3422: fix locking on error path
Bart Van Assche (1):
IB/rxe: Remove a pointless indirection layer
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
scsi: pm8001: Fix memleak in pm8001_exec_internal_task_abort
Dinh Nguyen (1):
ARM: dts: socfpga: fix register entry for timer3 on Arria10
Evan Nimmo (1):
i2c: algo: pca: Reapply i2c bus settings after reset
Filipe Manana (1):
btrfs: fix wrong address when faulting in pages in the search ioctl
Greg Kroah-Hartman (1):
Linux 4.9.237
Hans de Goede (1):
Input: i8042 - add Entroware Proteus EL07R4 to nomux and reset lists
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
J. Bruce Fields (1):
SUNRPC: stop printk reading past end of string
James Smart (1):
scsi: lpfc: Fix FLOGI/PLOGI receive race condition in pt2pt discovery
Johan Hovold (1):
USB: core: add helpers to retrieve endpoints
Jonathan Cameron (9):
iio:light:ltr501 Fix timestamp alignment issue. iio:accel:bmc150-accel: Fix timestamp alignment and prevent data leak. iio:adc:ina2xx Fix timestamp alignment issue. 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: 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.
Kamal Heib (1):
RDMA/rxe: Drop pointless checks in rxe_init_ports
Laurent Pinchart (1):
rapidio: Replace 'select' DMAENGINES 'with depends on'
Leon Romanovsky (1):
gcov: Disable gcov build with GCC 10
Linus Torvalds (3):
fbcon: remove soft scrollback code
fbcon: remove now unusued 'softback_lines' cursor() argument
vgacon: remove software scrollback support
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
Maxim Kochetkov (1):
iio: adc: ti-ads1015: fix conversion when CONFIG_PM is not set
Miaohe Lin (1):
net: handle the return value of pskb_carve_frag_list() correctly
Michael Kelley (1):
Drivers: hv: vmbus: Add timeout to vmbus_wait_for_unload
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
Namhyung Kim (1):
perf test: Free formats for perf pmu parse test
Nathan Chancellor (1):
clk: rockchip: Fix initialization of mux_pll_src_4plls_p
Olga Kornievskaia (1):
NFSv4.1 handle ERR_DELAY error reclaiming locking state on delegation recall
Oliver Neukum (2):
USB: UAS: fix disconnect by unplugging a hub
usblp: fix race between disconnect() and read()
Patrick Riphagen (1):
USB: serial: ftdi_sio: add IDs for Xsens Mti USB converter
Penghao (1):
USB: quirks: Add USB_QUIRK_IGNORE_REMOTE_WAKEUP quirk for BYD zhaoxin notebook
Peter Oberparleiter (1):
gcov: add support for GCC 10.1
Quentin Perret (1):
ehci-hcd: Move include to keep CRC stable
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()
Sandhya Bankar (1):
drivers: iio: magnetometer: Fix sparse endianness warnings cast to restricted __be16
Tetsuo Handa (2):
video: fbdev: fix OOB read in vga_8planes_imageblit()
fbcon: Fix user font detection test at fbcon_resize().
Thomas Bogendoerfer (2):
MIPS: SNI: Fix MIPS_L1_CACHE_SHIFT
MIPS: SNI: Fix spurious interrupts
Tobias Diedrich (1):
serial: 8250_pci: Add Realtek 816a and 816b
Vaibhav Agarwal (1):
staging: greybus: audio: fix uninitialized value issue
Varun Prakash (1):
scsi: target: iscsi: Fix data digest calculation
Vincent Whitchurch (1):
spi: spi-loopback-test: Fix out-of-bounds read
Vineet Gupta (1):
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
Yu Kuai (1):
drm/mediatek: Add exception handing in mtk_drm_probe() if component init fail
Zeng Tao (1):
usb: core: fix slab-out-of-bounds Read in read_descriptors
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 236 +SUBLEVEL = 237 EXTRAVERSION = NAME = Roaring Lionus
arch/arc/plat-eznps/include/plat/ctop.h +0 -1
@@ -42,7 +42,6 @@#define CTOP_AUX_HW_COMPLY (CTOP_AUX_BASE + 0x024)#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/socfpga_arria10.dtsi +1 -1
@@ -710,7 +710,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/mips/Kconfig +1 -0
@@ -848,6 +848,7 @@ config SNI_RM select I8253 select I8259 select ISA + select MIPS_L1_CACHE_SHIFT_6 select SWAP_IO_SPACE if CPU_BIG_ENDIAN select SYS_HAS_CPU_R4X00 select SYS_HAS_CPU_R5000
arch/mips/sni/a20r.c +7 -2
@@ -143,7 +143,10 @@ static struct platform_device sc26xx_pdev = { }, }; -static u32 a20r_ack_hwint (void ) +/* +* Trigger chipset to update CPU's CAUSE IP field +*/ +static u32 a20r_update_cause_ip (void ) {u32 status =read_c0_status ();
@@ -205,12 +208,14 @@ static void a20r_hwint(void)int irq;clear_c0_status (IE_IRQ0 ); - status =a20r_ack_hwint (); + status =a20r_update_cause_ip (); cause =read_c0_cause (); irq =ffs (((cause & status) >>8 ) &0xf8 );if (likely (irq >0 ))do_IRQ (SNI_A20R_IRQ_BASE + irq -1 ); + +a20r_update_cause_ip ();set_c0_status (IE_IRQ0 ); }
arch/powerpc/configs/pasemi_defconfig +0 -1
@@ -115,7 +115,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
@@ -796,7 +796,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/powerpc/kernel/dma-iommu.c +2 -1
@@ -99,7 +99,8 @@ static u64 dma_iommu_get_required_mask(struct device *dev)if (!tbl)return 0 ; - mask =1ULL < (fls_long (tbl->it_offset + tbl->it_size) -1 ); + mask =1ULL << (fls_long (tbl->it_offset + tbl->it_size) + + tbl->it_page_shift -1 ); mask += mask -1 ;return mask;
arch/x86/configs/i386_defconfig +1 -1
@@ -217,7 +217,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
@@ -247,6 +246,7 @@ CONFIG_USB_HIDDEV=y CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_MON=y +CONFIG_USB_XHCI_HCD=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_TT_NEWSCHED=y CONFIG_USB_OHCI_HCD=y
arch/x86/configs/x86_64_defconfig +1 -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
@@ -242,6 +241,7 @@ CONFIG_USB_HIDDEV=y CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_MON=y +CONFIG_USB_XHCI_HCD=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_TT_NEWSCHED=y CONFIG_USB_OHCI_HCD=y
arch/x86/kvm/vmx.c +1 -0
@@ -8606,6 +8606,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
@@ -4614,6 +4614,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); }
@@ -4715,6 +4718,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;
@@ -6192,6 +6198,9 @@ static ssize_t do_rbd_add(struct bus_type *bus,bool read_only;int rc; +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; +if (!try_module_get (THIS_MODULE ))return -ENODEV ;
@@ -6340,6 +6349,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/clk/rockchip/clk-rk3228.c +1 -1
@@ -126,7 +126,7 @@ PNAME(mux_usb480m_p) = { "usb480m_phy", "xin24m" };PNAME (mux_hdmiphy_p) = {"hdmiphy_phy" ,"xin24m" };PNAME (mux_aclk_cpu_src_p) = {"cpll_aclk_cpu" ,"gpll_aclk_cpu" ,"hdmiphy_aclk_cpu" }; -PNAME (mux_pll_src_4plls_p) = {"cpll" ,"gpll" ,"hdmiphy" "usb480m" }; +PNAME (mux_pll_src_4plls_p) = {"cpll" ,"gpll" ,"hdmiphy" ,"usb480m" };PNAME (mux_pll_src_3plls_p) = {"cpll" ,"gpll" ,"hdmiphy" };PNAME (mux_pll_src_2plls_p) = {"cpll" ,"gpll" };PNAME (mux_sclk_hdmi_cec_p) = {"cpll" ,"gpll" ,"xin24m" };
drivers/gpu/drm/mediatek/mtk_drm_drv.c +6 -1
@@ -457,8 +457,13 @@ static int mtk_drm_probe(struct platform_device *pdev)pm_runtime_disable (dev); err_node:of_node_put (private->mutex_node); -for (i =0 ; i <DDP_COMPONENT_ID_MAX ; i++) +for (i =0 ; i <DDP_COMPONENT_ID_MAX ; i++) {of_node_put (private->comp_node[i]); +if (private->ddp_comp[i]) { +put_device (private->ddp_comp[i]->larb_dev); + private->ddp_comp[i] =NULL ; + } + }return ret; }
drivers/hv/channel_mgmt.c +5 -2
@@ -681,7 +681,7 @@ static void vmbus_wait_for_unload(void)void *page_addr;struct hv_message *msg;struct vmbus_channel_message_header *hdr; -u32 message_type; +u32 message_type, i;/* * CHANNELMSG_UNLOAD_RESPONSE is always delivered to the CPU which was
@@ -691,8 +691,11 @@ static void vmbus_wait_for_unload(void)* functional and vmbus_unload_response() will complete * vmbus_connection.unload_event. If not, the last thing we can do is * read message pages for all CPUs directly. +* +* Wait no more than 10 seconds so that the panic path can't get +* hung forever in case the response message isn't seen. */ -while (1 ) { +for (i =0 ; i <1000 ; i++) {if (completion_done (&vmbus_connection.unload_event))break ;
drivers/i2c/algos/i2c-algo-pca.c +23 -12
@@ -50,8 +50,22 @@ static void pca_reset(struct i2c_algo_pca_data *adap)pca_outw (adap,I2C_PCA_INDPTR ,I2C_PCA_IPRESET );pca_outw (adap,I2C_PCA_IND ,0xA5 );pca_outw (adap,I2C_PCA_IND ,0x5A ); + +/* +* After a reset we need to re-apply any configuration +* (calculated in pca_init) to get the bus in a working state. +*/ +pca_outw (adap,I2C_PCA_INDPTR ,I2C_PCA_IMODE ); +pca_outw (adap,I2C_PCA_IND , adap->bus_settings.mode); +pca_outw (adap,I2C_PCA_INDPTR ,I2C_PCA_ISCLL ); +pca_outw (adap,I2C_PCA_IND , adap->bus_settings.tlow); +pca_outw (adap,I2C_PCA_INDPTR ,I2C_PCA_ISCLH ); +pca_outw (adap,I2C_PCA_IND , adap->bus_settings.thi); + +pca_set_con (adap,I2C_PCA_CON_ENSIO ); }else { adap->reset_chip (adap->data); +pca_set_con (adap,I2C_PCA_CON_ENSIO | adap->bus_settings.clock_freq); } }
@@ -435,13 +449,14 @@ static int pca_init(struct i2c_adapter *adap) " Use the nominal frequency.\n", adap->name); } -pca_reset (pca_data); - clock =pca_clock (pca_data);printk (KERN_INFO "%s: Clock frequency is %dkHz\n" , adap->name, freqs[clock]); -pca_set_con (pca_data,I2C_PCA_CON_ENSIO | clock); +/* Store settings as these will be needed when the PCA chip is reset */ + pca_data->bus_settings.clock_freq = clock; + +pca_reset (pca_data); }else {int clock;int mode;
@@ -508,19 +523,15 @@ static int pca_init(struct i2c_adapter *adap) thi = tlow * min_thi / min_tlow; } +/* Store settings as these will be needed when the PCA chip is reset */ + pca_data->bus_settings.mode = mode; + pca_data->bus_settings.tlow = tlow; + pca_data->bus_settings.thi = thi; +pca_reset (pca_data);printk (KERN_INFO "%s: Clock frequency is %dHz\n" , adap->name, clock *100 ); - -pca_outw (pca_data,I2C_PCA_INDPTR ,I2C_PCA_IMODE ); -pca_outw (pca_data,I2C_PCA_IND , mode); -pca_outw (pca_data,I2C_PCA_INDPTR ,I2C_PCA_ISCLL ); -pca_outw (pca_data,I2C_PCA_IND , tlow); -pca_outw (pca_data,I2C_PCA_INDPTR ,I2C_PCA_ISCLH ); -pca_outw (pca_data,I2C_PCA_IND , thi); - -pca_set_con (pca_data,I2C_PCA_CON_ENSIO ); }udelay (500 );/* 500 us for oscillator to stabilise */
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;
@@ -933,15 +941,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
@@ -105,6 +105,12 @@ struct mma8452_data {u8 ctrl_reg1;u8 data_cfg;const struct mma_chip_info *chip_info; + +/* Ensure correct alignment of time stamp when present */ +struct { +__be16 channels[3 ]; +s64 ts__aligned(8) ; + } buffer; };/**
@@ -985,14 +991,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
@@ -117,6 +117,11 @@ struct ina2xx_chip_info {int int_time_vbus;/* Bus voltage integration time uS */ int int_time_vshunt;/* Shunt voltage integration time uS */ 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[] = {
@@ -459,7 +464,6 @@ static const struct iio_chan_spec ina2xx_channels[] = {static int ina2xx_work_buffer (struct iio_dev *indio_dev) {struct ina2xx_chip_info *chip =iio_priv (indio_dev); -unsigned short data[8 ];int bit, ret, i =0 ;s64 time_a, time_b;unsigned int alert;
@@ -500,13 +504,12 @@ static int ina2xx_work_buffer(struct iio_dev *indio_dev)if (ret <0 )return ret; - data[i++] = val; + chip->scan.chan[i++] = val; } time_b =iio_get_time_ns (indio_dev); -iio_push_to_buffers_with_timestamp (indio_dev, - (unsigned int *)data, time_a); +iio_push_to_buffers_with_timestamp (indio_dev, &chip->scan, time_a);return (unsigned long )(time_b - time_a) /1000 ; };
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
@@ -132,14 +138,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-ads1015.c +10 -0
@@ -220,6 +220,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;
@@ -237,6 +238,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/light/ltr501.c +9 -6
@@ -1218,13 +1218,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) ||
@@ -1243,9 +1246,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 ) {
@@ -1253,10 +1256,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 +17 -9
@@ -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. */
@@ -690,6 +696,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val)struct ak8975_data *data =iio_priv (indio_dev);const struct i2c_client *client = data->client;const struct ak_def *def = data->def; +__le16 rval;u16 buff;int ret;
@@ -703,7 +710,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val) ret =i2c_smbus_read_i2c_block_data_or_emulated ( client, def->data_regs[index], -sizeof (buff), (u8 *)&buff); +sizeof (rval), (u8 *)&rval);if (ret <0 ) goto exit;
@@ -713,7 +720,7 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val)pm_runtime_put_autosuspend (&data->client->dev);/* Swap bytes and convert to valid range. */ - buff =le16_to_cpu (buff); + buff =le16_to_cpu (rval); *val =clamp_t (s16, buff, -def->range, def->range);return IIO_VAL_INT ;
@@ -812,7 +819,7 @@ 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);
@@ -826,20 +833,21 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)*/ ret =i2c_smbus_read_i2c_block_data_or_emulated (client, def->data_regs[0 ], -3 *sizeof (buff[0 ]), - (u8 *)buff); +3 *sizeof (fval[0 ]), + (u8 *)fval);if (ret <0 ) goto unlock;mutex_unlock (&data->lock);/* Clamp to valid range. */ - buff[0 ] =clamp_t (s16,le16_to_cpu (buff[0 ]), -def->range, def->range); - buff[1 ] =clamp_t (s16,le16_to_cpu (buff[1 ]), -def->range, def->range); - buff[2 ] =clamp_t (s16,le16_to_cpu (buff[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/sw/rxe/rxe.c +1 -4
@@ -168,9 +168,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 );
@@ -178,7 +175,7 @@ static int rxe_init_ports(struct rxe_dev *rxe)return -ENOMEM ; port->pkey_tbl[0 ] =0xffff ; - port->port_guid = rxe->ifc_ops->port_guid (rxe); + port->port_guid =rxe_port_guid (rxe);spin_lock_init (&port->port_lock);
drivers/infiniband/sw/rxe/rxe_loc.h +18 -2
@@ -141,6 +141,22 @@ void rxe_mem_cleanup(void *arg);int advance_dma_data (struct rxe_dma_info *dma,unsigned int length); +/* rxe_net.c */ +int rxe_loopback (struct sk_buff *skb); +int rxe_send (struct rxe_dev *rxe,struct rxe_pkt_info *pkt, +struct sk_buff *skb); +__be64 rxe_port_guid (struct rxe_dev *rxe); +struct sk_buff *rxe_init_packet (struct rxe_dev *rxe,struct rxe_av *av, +int paylen,struct rxe_pkt_info *pkt); +int rxe_prepare (struct rxe_dev *rxe,struct rxe_pkt_info *pkt, +struct sk_buff *skb,u32 *crc); +enum rdma_link_layer rxe_link_layer (struct rxe_dev *rxe,unsigned int port_num); +const char *rxe_parent_name (struct rxe_dev *rxe,unsigned int port_num); +struct device *rxe_dma_device (struct rxe_dev *rxe); +__be64 rxe_node_guid (struct rxe_dev *rxe); +int rxe_mcast_add (struct rxe_dev *rxe,union ib_gid *mgid); +int rxe_mcast_delete (struct rxe_dev *rxe,union ib_gid *mgid); +/* rxe_qp.c */ int rxe_qp_chk_init (struct rxe_dev *rxe,struct ib_qp_init_attr *init);
@@ -256,9 +272,9 @@ static inline int rxe_xmit_packet(struct rxe_dev *rxe, struct rxe_qp *qp,if (pkt->mask &RXE_LOOPBACK_MASK ) {memcpy (SKB_TO_PKT (skb), pkt,sizeof (*pkt)); - err = rxe->ifc_ops->loopback (skb); + err =rxe_loopback (skb); }else { - err = rxe->ifc_ops->send (rxe, pkt, skb); + err =rxe_send (rxe, pkt, skb); }if (err) {
drivers/infiniband/sw/rxe/rxe_mcast.c +2 -2
@@ -61,7 +61,7 @@ int rxe_mcast_get_grp(struct rxe_dev *rxe, union ib_gid *mgid,rxe_add_key (grp, mgid); - err = rxe->ifc_ops->mcast_add (rxe, mgid); + err =rxe_mcast_add (rxe, mgid);if (err) goto err2;
@@ -186,5 +186,5 @@ void rxe_mc_cleanup(void *arg)struct rxe_dev *rxe = grp->rxe;rxe_drop_key (grp); - rxe->ifc_ops->mcast_delete (rxe, &grp->mgid); +rxe_mcast_delete (rxe, &grp->mgid); }
drivers/infiniband/sw/rxe/rxe_mr.c +1 -0
@@ -205,6 +205,7 @@ int rxe_mem_init_user(struct rxe_dev *rxe, 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_net.c +13 -30
113 lines not on this page · raw message
drivers/infiniband/sw/rxe/rxe_req.c +2 -2
@@ -412,7 +412,7 @@ static struct sk_buff *init_req_packet(struct rxe_qp *qp,/* init skb */ av =rxe_get_av (pkt); - skb = rxe->ifc_ops->init_packet (rxe, av, paylen, pkt); + skb =rxe_init_packet (rxe, av, paylen, pkt);if (unlikely (!skb))return NULL ;
@@ -483,7 +483,7 @@ static int fill_packet(struct rxe_qp *qp, struct rxe_send_wqe *wqe,u32 *p;int err; - err = rxe->ifc_ops->prepare (rxe, pkt, skb, &crc); + err =rxe_prepare (rxe, pkt, skb, &crc);if (err)return err;
drivers/infiniband/sw/rxe/rxe_resp.c +2 -2
@@ -600,7 +600,7 @@ static struct sk_buff *prepare_ack_packet(struct rxe_qp *qp, pad = (-payload) &0x3 ; paylen = rxe_opcode[opcode].length + payload + pad +RXE_ICRC_SIZE ; - skb = rxe->ifc_ops->init_packet (rxe, &qp->pri_av, paylen, ack); + skb =rxe_init_packet (rxe, &qp->pri_av, paylen, ack);if (!skb)return NULL ;
@@ -629,7 +629,7 @@ static struct sk_buff *prepare_ack_packet(struct rxe_qp *qp,if (ack->mask &RXE_ATMACK_MASK )atmack_set_orig (ack, qp->resp.atomic_orig); - err = rxe->ifc_ops->prepare (rxe, ack, skb, &crc); + err =rxe_prepare (rxe, ack, skb, &crc);if (err) {kfree_skb (skb);return NULL ;
drivers/infiniband/sw/rxe/rxe_verbs.c +4 -6
@@ -234,7 +234,7 @@ static enum rdma_link_layer rxe_get_link_layer(struct ib_device *dev, {struct rxe_dev *rxe =to_rdev (dev); -return rxe->ifc_ops->link_layer (rxe, port_num); +return rxe_link_layer (rxe, port_num); } static struct ib_ucontext *rxe_alloc_ucontext(struct ib_device *dev,
@@ -1194,10 +1194,8 @@ static ssize_t rxe_show_parent(struct device *device, { struct rxe_dev *rxe = container_of(device, struct rxe_dev, ib_dev.dev); -char *name; - name = rxe->ifc_ops->parent_name (rxe,1 ); -return snprintf (buf,16 ,"%s\n" , name); +return scnprintf (buf,PAGE_SIZE ,"%s\n" ,rxe_parent_name (rxe,1 )); } static DEVICE_ATTR(parent, S_IRUGO, rxe_show_parent, NULL);
@@ -1219,9 +1217,9 @@ int rxe_register_device(struct rxe_dev *rxe) dev->node_type =RDMA_NODE_IB_CA ; dev->phys_port_cnt =1 ; dev->num_comp_vectors =RXE_NUM_COMP_VECTORS ; - dev->dma_device = rxe->ifc_ops->dma_device (rxe); + dev->dma_device =rxe_dma_device (rxe); dev->local_dma_lkey =0 ; - dev->node_guid = rxe->ifc_ops->node_guid (rxe); + dev->node_guid =rxe_node_guid (rxe); dev->dma_ops = &rxe_dma_mapping_ops; dev->uverbs_abi_ver =RXE_UVERBS_ABI_VERSION ;
drivers/infiniband/sw/rxe/rxe_verbs.h +0 -22
@@ -373,26 +373,6 @@ struct rxe_port {u32 qp_gsi_index; }; -/* callbacks from rdma_rxe to network interface layer */ -struct rxe_ifc_ops { -void (*release)(struct rxe_dev *rxe); -__be64 (*node_guid)(struct rxe_dev *rxe); -__be64 (*port_guid)(struct rxe_dev *rxe); -struct device *(*dma_device)(struct rxe_dev *rxe); -int (*mcast_add)(struct rxe_dev *rxe,union ib_gid *mgid); -int (*mcast_delete)(struct rxe_dev *rxe,union ib_gid *mgid); -int (*prepare)(struct rxe_dev *rxe,struct rxe_pkt_info *pkt, -struct sk_buff *skb,u32 *crc); -int (*send)(struct rxe_dev *rxe,struct rxe_pkt_info *pkt, -struct sk_buff *skb); -int (*loopback)(struct sk_buff *skb); -struct sk_buff *(*init_packet)(struct rxe_dev *rxe,struct rxe_av *av, -int paylen,struct rxe_pkt_info *pkt); -char *(*parent_name)(struct rxe_dev *rxe,unsigned int port_num); -enum rdma_link_layer (*link_layer)(struct rxe_dev *rxe, -unsigned int port_num); -}; -struct rxe_dev {struct ib_device ib_dev;struct ib_device_attr attr;
@@ -401,8 +381,6 @@ struct rxe_dev {struct kref ref_cnt;struct mutex usdev_lock; -struct rxe_ifc_ops *ifc_ops; -struct net_device *ndev;int xmit_errors;
drivers/input/serio/i8042-x86ia64io.h +16 -0
@@ -552,6 +552,14 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"), }, }, + { + /* Entroware Proteus */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Entroware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"), + DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"), + }, + }, { } };
@@ -752,6 +760,14 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "33474HU"), }, }, + { + /* Entroware Proteus */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Entroware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"), + DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"), + }, + }, { } };
drivers/net/wan/hdlc_cisco.c +1 -0
@@ -377,6 +377,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/rapidio/Kconfig +1 -1
@@ -25,7 +25,7 @@ config RAPIDIO_ENABLE_RX_TX_PORTS config RAPIDIO_DMA_ENGINE bool "DMA Engine support for RapidIO" depends on RAPIDIO - select DMADEVICES + depends on DMADEVICES select DMA_ENGINE help Say Y here if you want to use DMA Engine frameork for RapidIO data
drivers/regulator/core.c +26 -20
84 lines not on this page · raw message
drivers/scsi/libsas/sas_ata.c +4 -1
@@ -227,7 +227,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/scsi/lpfc/lpfc_els.c +3 -1
@@ -3865,7 +3865,9 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, out:if (ndlp &&NLP_CHK_NODE_ACT (ndlp) && shost) {spin_lock_irq (shost->host_lock); - ndlp->nlp_flag &= ~(NLP_ACC_REGLOGIN |NLP_RM_DFLT_RPI ); +if (mbox) + ndlp->nlp_flag &= ~NLP_ACC_REGLOGIN ; + ndlp->nlp_flag &= ~NLP_RM_DFLT_RPI ;spin_unlock_irq (shost->host_lock);/* If the node is not being used by another discovery thread,
drivers/scsi/pm8001/pm8001_sas.c +1 -1
@@ -795,7 +795,7 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha, res =pm8001_tag_alloc (pm8001_ha, &ccb_tag);if (res) -return res; + goto ex_err; ccb = &pm8001_ha->ccb_info[ccb_tag]; ccb->device = pm8001_dev; ccb->ccb_tag = ccb_tag;
drivers/spi/spi-loopback-test.c +1 -1
@@ -74,7 +74,7 @@ static struct spi_test spi_tests[] = { { .description = "tx/rx-transfer - crossing PAGE_SIZE", .fill_option = FILL_COUNT_8, - .iterate_len = { ITERATE_MAX_LEN }, + .iterate_len = { ITERATE_LEN }, .iterate_tx_align = ITERATE_ALIGN, .iterate_rx_align = ITERATE_ALIGN, .transfers = {
drivers/staging/greybus/audio_topology.c +15 -14
@@ -462,6 +462,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++) {
@@ -475,25 +484,17 @@ static int gbcodec_mixer_dapm_ctl_put(struct snd_kcontrol *kcontrol, gbvalue.value.integer_value[0 ] = 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
@@ -523,13 +523,8 @@ static void hfa384x_usb_defer(struct work_struct *data)----------------------------------------------------------------*/ void hfa384x_create (struct hfa384x *hw,struct usb_device *usb) { -memset (hw,0 ,sizeof (struct hfa384x )); 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
@@ -60,23 +60,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);
@@ -95,6 +86,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
@@ -1396,14 +1396,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
@@ -1150,7 +1150,7 @@ iscsit_conn_set_transport(struct iscsi_conn *conn, struct iscsit_transport *t) }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;
@@ -1172,7 +1172,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.
@@ -1432,8 +1431,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
@@ -14,8 +14,7 @@ extern int iscsit_put_login_tx(struct iscsi_conn *, struct iscsi_login *, u32);extern void iscsit_free_conn (struct iscsi_np *,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 *);#endif /*** ISCSI_TARGET_LOGIN_H ***/
drivers/target/iscsi/iscsi_target_nego.c +1 -2
@@ -548,12 +548,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); }static void iscsi_target_login_timeout (unsigned long data)
drivers/tty/serial/8250/8250_pci.c +11 -0
@@ -5709,6 +5709,17 @@ static struct pci_device_id serial_pci_tbl[] = {0 , 0, pbn_exar_XR17V358 }, +/* +* Realtek RealManage +*/ + { PCI_VENDOR_ID_REALTEK, 0x816a, +PCI_ANY_ID ,PCI_ANY_ID , + 0, 0, pbn_b0_1_115200 }, + + { PCI_VENDOR_ID_REALTEK, 0x816b, +PCI_ANY_ID ,PCI_ANY_ID , + 0, 0, pbn_b0_1_115200 }, +/* Fintek PCI serial cards */ { PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 }, { PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 },
drivers/usb/class/usblp.c +5 -0
@@ -840,6 +840,11 @@ static ssize_t usblp_read(struct file *file, char __user *buffer, size_t len, loif (rv <0 )return rv; +if (!usblp->present) { + count = -ENODEV ; + goto done; + } +if ((avail = usblp->rstatus) <0 ) {printk (KERN_ERR "usblp%d: error %d reading from printer\n" , usblp->minor, (int )avail);
drivers/usb/core/message.c +42 -49
135 lines not on this page · raw message
drivers/usb/core/quirks.c +4 -0
@@ -236,6 +236,10 @@ static const struct usb_device_id usb_quirk_list[] = {/* Generic RTL8153 based ethernet adapters */ { USB_DEVICE(0x0bda, 0x8153), .driver_info = USB_QUIRK_NO_LPM }, + /* SONiX USB DEVICE Touchpad */ + { USB_DEVICE(0x0c45, 0x7056), .driver_info = + USB_QUIRK_IGNORE_REMOTE_WAKEUP }, + /* Action Semiconductor flash disk */ { USB_DEVICE(0x10d6, 0x2200), .driver_info = USB_QUIRK_STRING_FETCH_255 },
drivers/usb/core/sysfs.c +5 -0
@@ -848,7 +848,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).
@@ -873,6 +877,7 @@ read_descriptors(struct file *filp, struct kobject *kobj, off -= srclen; } } +usb_unlock_device (udev);return count - nleft; }
drivers/usb/core/usb.c +83 -0
89 lines not on this page · raw message
drivers/usb/host/ehci-hcd.c +1 -0
@@ -35,6 +35,7 @@#include <linux/interrupt.h> #include <linux/usb.h> #include <linux/usb/hcd.h> +#include <linux/usb/otg.h> #include <linux/moduleparam.h> #include <linux/dma-mapping.h> #include <linux/debugfs.h>
drivers/usb/host/ehci-hub.c +0 -1
@@ -27,7 +27,6 @@*/ /*-------------------------------------------------------------------------*/ -#include <linux/usb/otg.h> #define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
drivers/usb/serial/ftdi_sio.c +1 -0
@@ -708,6 +708,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
@@ -159,6 +159,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 +2 -0
@@ -1808,6 +1808,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/storage/uas.c +12 -2
@@ -670,8 +670,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,if (devinfo->resetting) { cmnd->result =DID_ERROR <<16 ; cmnd->scsi_done (cmnd); -spin_unlock_irqrestore (&devinfo->lock, flags); -return 0 ; + goto zombie; }/* Find a free uas-tag */
@@ -706,6 +705,16 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd, cmdinfo->state &= ~(SUBMIT_DATA_IN_URB |SUBMIT_DATA_OUT_URB ); err =uas_submit_urbs (cmnd, devinfo); +/* +* in case of fatal errors the SCSI layer is peculiar +* a command that has finished is a success for the purpose +* of queueing, no matter how fatal the error +*/ +if (err == -ENODEV ) { + cmnd->result =DID_ERROR <<16 ; + cmnd->scsi_done (cmnd); + goto zombie; + }if (err) {/* If we did nothing, give up now */ if (cmdinfo->state &SUBMIT_STATUS_URB ) {
@@ -716,6 +725,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd, } devinfo->cmnd[idx] = cmnd; +zombie:spin_unlock_irqrestore (&devinfo->lock, flags);return 0 ; }
drivers/video/console/Kconfig +0 -25
@@ -22,31 +22,6 @@ config VGA_CONSOLE Say Y. -config VGACON_SOFT_SCROLLBACK - bool "Enable Scrollback Buffer in System RAM" - depends on VGA_CONSOLE - default n - help - The scrollback buffer of the standard VGA console is located in - the VGA RAM. The size of this RAM is fixed and is quite small. - If you require a larger scrollback buffer, this can be placed in - System RAM which is dynamically allocated during initialization. - Placing the scrollback buffer in System RAM will slightly slow - down the console. - - If you want this feature, say 'Y' here and enter the amount of - RAM to allocate for this buffer. If unsure, say 'N'. - -config VGACON_SOFT_SCROLLBACK_SIZE - int "Scrollback Buffer Size (in KB)" - depends on VGACON_SOFT_SCROLLBACK - range 1 1024 - default "64" - help - Enter the amount of System RAM to allocate for the scrollback - buffer. Each 64KB will give you approximately 16 80x25 - screenfuls of scrollback buffer - config MDA_CONSOLE depends on !M68K && !PARISC && ISA tristate "MDA text console (dual-headed)"
drivers/video/console/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/console/fbcon.c +5 -331
481 lines not on this page · raw message
drivers/video/console/fbcon.h +1 -1
@@ -62,7 +62,7 @@ struct fbcon_ops {void (*clear_margins)(struct vc_data *vc,struct fb_info *info,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/console/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/console/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/console/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/console/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/console/vgacon.c +1 -158
189 lines not on this page · raw message
drivers/video/fbdev/vga16fb.c +1 -1
@@ -1122,7 +1122,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/ioctl.c +2 -1
@@ -2151,7 +2151,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/nfs/nfs4proc.c +6 -1
@@ -6527,7 +6527,12 @@ int nfs4_lock_delegation_recall(struct file_lock *fl, struct nfs4_state *state, err =nfs4_set_lock_state (state, fl);if (err !=0 )return err; - err =_nfs4_do_setlk (state,F_SETLK , fl,NFS_LOCK_NEW ); +do { + err =_nfs4_do_setlk (state,F_SETLK , fl,NFS_LOCK_NEW ); +if (err != -NFS4ERR_DELAY ) +break ; +ssleep (1 ); + }while (err == -NFS4ERR_DELAY );return nfs4_handle_delegation_recall_error (server, state, stateid, fl, err); }
fs/xfs/libxfs/xfs_attr_leaf.c +2 -2
@@ -520,8 +520,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/i2c-algo-pca.h +15 -0
@@ -52,6 +52,20 @@#define I2C_PCA_CON_SI 0x08/* Serial Interrupt */ #define I2C_PCA_CON_CR 0x07/* Clock Rate (MASK) */ +/** +* struct pca_i2c_bus_settings - The configured PCA i2c bus settings +* @mode: Configured i2c bus mode +* @tlow: Configured SCL LOW period +* @thi: Configured SCL HIGH period +* @clock_freq: The configured clock frequency +*/ +struct pca_i2c_bus_settings { +int mode; +int tlow; +int thi; +int clock_freq; +}; +struct i2c_algo_pca_data {void *data;/* private low level data */ void (*write_byte) (void *data,int reg,int val);
@@ -63,6 +77,7 @@ struct i2c_algo_pca_data {* For PCA9665, use the frequency you want here. */ unsigned int i2c_clock;unsigned int chip; +struct pca_i2c_bus_settings bus_settings; };int i2c_pca_add_bus (struct i2c_adapter *);
include/linux/usb.h +35 -0
@@ -99,6 +99,41 @@ enum usb_interface_condition { USB_INTERFACE_UNBINDING, }; +int __must_check +usb_find_common_endpoints (struct usb_host_interface *alt, +struct usb_endpoint_descriptor **bulk_in, +struct usb_endpoint_descriptor **bulk_out, +struct usb_endpoint_descriptor **int_in, +struct usb_endpoint_descriptor **int_out); + +static inline int __must_check +usb_find_bulk_in_endpoint (struct usb_host_interface *alt, +struct usb_endpoint_descriptor **bulk_in) +{ +return usb_find_common_endpoints (alt, bulk_in,NULL ,NULL ,NULL ); +} + +static inline int __must_check +usb_find_bulk_out_endpoint (struct usb_host_interface *alt, +struct usb_endpoint_descriptor **bulk_out) +{ +return usb_find_common_endpoints (alt,NULL , bulk_out,NULL ,NULL ); +} + +static inline int __must_check +usb_find_int_in_endpoint (struct usb_host_interface *alt, +struct usb_endpoint_descriptor **int_in) +{ +return usb_find_common_endpoints (alt,NULL ,NULL , int_in,NULL ); +} + +static inline int __must_check +usb_find_int_out_endpoint (struct usb_host_interface *alt, +struct usb_endpoint_descriptor **int_out) +{ +return usb_find_common_endpoints (alt,NULL ,NULL ,NULL , int_out); +} +/** * struct usb_interface - what usb device drivers talk to * @altsetting: array of interface structures, one for each alternate
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
@@ -18,7 +18,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/core/skbuff.c +7 -3
@@ -4990,9 +4990,13 @@ static int pskb_carve_inside_nonlinear(struct sk_buff *skb, const u32 off,if (skb_has_frag_list (skb))skb_clone_fraglist (skb); -if (k ==0 ) { -/* split line is in frag list */ -pskb_carve_frag_list (skb, shinfo, off - pos, gfp_mask); +/* split line is in frag list */ +if (k ==0 &&pskb_carve_frag_list (skb, shinfo, off - pos, gfp_mask)) { +/* skb_frag_unref() is not needed here as shinfo->nr_frags = 0. */ +if (skb_has_frag_list (skb)) +kfree_skb_list (skb_shinfo (skb)->frag_list); +kfree (data); +return -ENOMEM ; }skb_release_data (skb);
net/sunrpc/rpcb_clnt.c +2 -2
@@ -975,8 +975,8 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, p =xdr_inline_decode (xdr, len);if (unlikely (p ==NULL )) goto out_fail; -dprintk ("RPC: %5u RPCB_%s reply: %s\n" , req->rq_task->tk_pid, - req->rq_task->tk_msg.rpc_proc->p_name, (char *)p); +dprintk ("RPC: %5u RPCB_%s reply: %*pE\n" , req->rq_task->tk_pid, + req->rq_task->tk_msg.rpc_proc->p_name, len, (char *)p);if (rpc_uaddr2sockaddr (req->rq_xprt->xprt_net, (char *)p, len, sap,sizeof (address)) ==0 )
sound/hda/hdac_device.c +2 -0
@@ -123,6 +123,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
@@ -3224,6 +3224,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);
@@ -3231,6 +3232,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 ; }
tools/perf/tests/pmu.c +1 -0
@@ -169,6 +169,7 @@ int test__pmu(int subtest __maybe_unused) ret =0 ; }while (0 ); +perf_pmu__del_formats (&formats);test_format_dir_put (format);return ret; }
tools/perf/util/pmu.c +11 -0
@@ -1018,6 +1018,17 @@ void perf_pmu__set_format(unsigned long *bits, long from, long to)set_bit (b, bits); } +void perf_pmu__del_formats (struct list_head *formats) +{ +struct perf_pmu_format *fmt, *tmp; + +list_for_each_entry_safe (fmt, tmp, formats, list) { +list_del (&fmt->list); +free (fmt->name); +free (fmt); + } +} +static int sub_non_neg (int a,int b) {if (b > a)
tools/perf/util/pmu.h +1 -0
@@ -71,6 +71,7 @@ int perf_pmu__new_format(struct list_head *list, char *name, int config, unsigned long *bits);void perf_pmu__set_format (unsigned long *bits,long from,long to);int perf_pmu__format_parse (char *dir,struct list_head *head); +void perf_pmu__del_formats (struct list_head *formats);struct perf_pmu *perf_pmu__scan (struct perf_pmu *pmu);