Linux 4.19.147
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.147 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/mips/Kconfig | 1 arch/mips/kvm/mips.c | 2 arch/mips/sni/a20r.c | 9 ++ arch/openrisc/mm/cache.c | 2 arch/powerpc/kernel/dma-iommu.c | 3 arch/x86/boot/compressed/Makefile | 2 arch/x86/configs/i386_defconfig | 1 arch/x86/configs/x86_64_defconfig | 1 drivers/clk/davinci/pll.c | 2 drivers/clk/rockchip/clk-rk3228.c | 2 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 7 +- drivers/gpu/drm/mediatek/mtk_hdmi.c | 26 +++++-- drivers/hv/channel_mgmt.c | 7 +- drivers/i2c/algos/i2c-algo-pca.c | 35 +++++++--- drivers/i2c/busses/i2c-i801.c | 21 ++++-- drivers/infiniband/hw/bnxt_re/qplib_sp.c | 2 drivers/infiniband/hw/bnxt_re/qplib_sp.h | 1 drivers/input/mouse/trackpoint.c | 10 +-- drivers/input/mouse/trackpoint.h | 10 +-- drivers/input/serio/i8042-x86ia64io.h | 16 ++++ drivers/net/hyperv/netvsc_drv.c | 2 drivers/nvme/host/fc.c | 1 drivers/nvme/host/rdma.c | 1 drivers/rapidio/Kconfig | 2 drivers/regulator/pwm-regulator.c | 2 drivers/scsi/libfc/fc_disc.c | 2 drivers/scsi/lpfc/lpfc_els.c | 4 - drivers/scsi/pm8001/pm8001_sas.c | 2 drivers/scsi/qla2xxx/qla_def.h | 10 +-- drivers/scsi/qla2xxx/qla_gbl.h | 5 - drivers/scsi/qla2xxx/qla_gs.c | 30 +++++---- drivers/scsi/qla2xxx/qla_init.c | 101 +++++++++++++++++++++++-------- drivers/scsi/qla2xxx/qla_os.c | 29 +++++--- drivers/scsi/qla2xxx/qla_target.c | 85 +++++++++++++++++++++----- drivers/spi/spi-loopback-test.c | 2 drivers/spi/spi.c | 9 ++ drivers/tty/serial/8250/8250_pci.c | 11 +++ drivers/usb/class/usblp.c | 5 + drivers/usb/core/quirks.c | 4 + drivers/usb/host/ehci-hcd.c | 1 drivers/usb/host/ehci-hub.c | 1 drivers/usb/storage/uas.c | 14 +++- drivers/video/fbdev/core/fbcon.c | 2 fs/f2fs/data.c | 3 fs/f2fs/node.c | 3 fs/gfs2/glops.c | 2 fs/gfs2/log.c | 2 fs/gfs2/trans.c | 2 fs/nfs/nfs4proc.c | 11 ++- include/linux/i2c-algo-pca.h | 15 ++++ include/uapi/linux/kvm.h | 5 - mm/percpu.c | 2 net/core/skbuff.c | 10 ++- net/dsa/tag_edsa.c | 37 ++++++++++- net/sunrpc/rpcb_clnt.c | 4 - sound/pci/hda/patch_realtek.c | 1 sound/soc/qcom/apq8016_sbc.c | 1 sound/soc/qcom/apq8096.c | 1 sound/soc/qcom/sdm845.c | 1 sound/soc/qcom/storm.c | 1 tools/perf/tests/bp_signal.c | 5 + tools/perf/tests/pmu.c | 1 tools/perf/util/pmu.c | 11 +++ tools/perf/util/pmu.h | 1 65 files changed, 457 insertions(+), 149 deletions(-)
Adam Borowski (1):
x86/defconfig: Enable CONFIG_USB_XHCI_HCD=y
Alexey Kardashevskiy (1):
powerpc/dma: Fix dma_map_ops::get_required_mask
Arvind Sankar (1):
x86/boot/compressed: Disable relocation relaxation
Bob Peterson (1):
gfs2: initialize transaction tr_ailX_lists earlier
Christophe JAILLET (1):
clk: davinci: Use the correct size when allocating memory
Chuck Lever (1):
NFS: Zero-stateid SETATTR should first return delegation
Daniel Mack (1):
dsa: Allow forwarding of redirected IGMP traffic
David Milburn (2):
nvme-fc: cancel async events before freeing event struct
nvme-rdma: cancel async events before freeing event struct
Dinghao Liu (1):
scsi: pm8001: Fix memleak in pm8001_exec_internal_task_abort
Evan Nimmo (1):
i2c: algo: pca: Reapply i2c bus settings after reset
Gabriel Krisman Bertazi (1):
f2fs: Return EOF on unaligned end of file DIO read
Greg Kroah-Hartman (2):
Revert "ALSA: hda - Fix silent audio output and corrupted input on MSI X570-A PRO" Linux 4.19.147
Gustav Wiklander (1):
spi: Fix memory leak on splited transfers
Haiyang Zhang (1):
hv_netvsc: Remove "unlikely" from netvsc_select_queue
Hans de Goede (1):
Input: i8042 - add Entroware Proteus EL07R4 to nomux and reset lists
Huacai Chen (1):
KVM: MIPS: Change the definition of kvm type
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
Javed Hasan (1):
scsi: libfc: Fix for double free()
Jiri Olsa (1):
perf test: Fix the "signal" test inline assembly
Laurent Pinchart (1):
rapidio: Replace 'select' DMAENGINES 'with depends on'
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
Namhyung Kim (1):
perf test: Free formats for perf pmu parse test
Naresh Kumar PBS (1):
RDMA/bnxt_re: Restrict the max_gids to 256
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()
Penghao (1):
USB: quirks: Add USB_QUIRK_IGNORE_REMOTE_WAKEUP quirk for BYD zhaoxin notebook
Quentin Perret (1):
ehci-hcd: Move include to keep CRC stable
Quinn Tran (3):
scsi: qla2xxx: Update rscn_rcvd field to more meaningful scan_needed
scsi: qla2xxx: Move rport registration out of internal work_list
scsi: qla2xxx: Reduce holding sess_lock to prevent CPU lock-up
Sahitya Tummala (1):
f2fs: fix indefinite loop scanning for free nid
Stafford Horne (1):
openrisc: Fix cache API compile issue when not inlining
Stephan Gerhold (1):
ASoC: qcom: Set card->owner to avoid warnings
Sunghyun Jin (1):
percpu: fix first chunk size calculation for populated bitmap
Tetsuo Handa (1):
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
Vincent Huang (1):
Input: trackpoint - add new trackpoint variant IDs
Vincent Whitchurch (2):
regulator: pwm: Fix machine constraints application
spi: spi-loopback-test: Fix out-of-bounds read
Volker Rümelin (1):
i2c: i801: Fix resume bug
Yu Kuai (2):
drm/mediatek: Add exception handing in mtk_drm_probe() if component init fail drm/mediatek: Add missing put_device() call in mtk_hdmi_dt_parse_pdata()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 146 +SUBLEVEL = 147 EXTRAVERSION = NAME = "People's Front"
arch/mips/Kconfig +1 -0
@@ -852,6 +852,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/kvm/mips.c +2 -0
@@ -131,6 +131,8 @@ void kvm_arch_check_processor_compat(void *rtn)int kvm_arch_init_vm (struct kvm *kvm,unsigned long type) {switch (type) { +case KVM_VM_MIPS_AUTO : +break ;#ifdef CONFIG_KVM_MIPS_VZ case KVM_VM_MIPS_VZ :#else
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/openrisc/mm/cache.c +1 -1
@@ -20,7 +20,7 @@#include <asm/cacheflush.h> #include <asm/tlbflush.h> -static void cache_loop (struct page *page,const unsigned int reg) +static __always_inline void cache_loop(struct page *page, const unsigned int reg) {unsigned long paddr =page_to_pfn (page) <<PAGE_SHIFT ;unsigned long line = paddr & ~(L1_CACHE_BYTES -1 );
arch/powerpc/kernel/dma-iommu.c +2 -1
@@ -100,7 +100,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/boot/compressed/Makefile +2 -0
@@ -38,6 +38,8 @@ KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) KBUILD_CFLAGS += $(call cc-disable-warning, gnu) KBUILD_CFLAGS += -Wno-pointer-sign +# Disable relocation relaxation in case the link is not PIE. +KBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mrelax-relocations=no) KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ GCOV_PROFILE := n
arch/x86/configs/i386_defconfig +1 -0
@@ -245,6 +245,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 -0
@@ -241,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
drivers/clk/davinci/pll.c +1 -1
@@ -491,7 +491,7 @@ struct clk *davinci_pll_clk_register(struct device *dev, parent_name = postdiv_name; } - pllen =kzalloc (sizeof (*pllout),GFP_KERNEL ); + pllen =kzalloc (sizeof (*pllen),GFP_KERNEL );if (!pllen) { ret = -ENOMEM ; goto err_unregister_postdiv;
drivers/clk/rockchip/clk-rk3228.c +1 -1
@@ -144,7 +144,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
@@ -600,8 +600,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/gpu/drm/mediatek/mtk_hdmi.c +18 -8
@@ -1476,25 +1476,30 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,dev_err (dev,"Failed to get system configuration registers: %d\n" , ret); -return ret; + goto put_device; } hdmi->sys_regmap = regmap; mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); hdmi->regs =devm_ioremap_resource (dev, mem); -if (IS_ERR (hdmi->regs)) -return PTR_ERR (hdmi->regs); +if (IS_ERR (hdmi->regs)) { + ret =PTR_ERR (hdmi->regs); + goto put_device; + } remote =of_graph_get_remote_node (np,1 ,0 ); -if (!remote) -return -EINVAL ; +if (!remote) { + ret = -EINVAL ; + goto put_device; + }if (!of_device_is_compatible (remote,"hdmi-connector" )) { hdmi->next_bridge =of_drm_find_bridge (remote);if (!hdmi->next_bridge) {dev_err (dev,"Waiting for external bridge\n" );of_node_put (remote); -return -EPROBE_DEFER ; + ret = -EPROBE_DEFER ; + goto put_device; } }
@@ -1503,7 +1508,8 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,dev_err (dev,"Failed to find ddc-i2c-bus node in %pOF\n" , remote);of_node_put (remote); -return -EINVAL ; + ret = -EINVAL ; + goto put_device; }of_node_put (remote);
@@ -1511,10 +1517,14 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,of_node_put (i2c_np);if (!hdmi->ddc_adpt) {dev_err (dev,"Failed to get ddc i2c adapter by node\n" ); -return -EINVAL ; + ret = -EINVAL ; + goto put_device; }return 0 ; +put_device: +put_device (hdmi->cec_dev); +return ret; }/*
drivers/hv/channel_mgmt.c +5 -2
@@ -779,7 +779,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
@@ -789,8 +789,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); } }
@@ -432,13 +446,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;
@@ -505,19 +520,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/i2c/busses/i2c-i801.c +14 -7
@@ -1506,6 +1506,16 @@ static inline int i801_acpi_probe(struct i801_priv *priv) { return 0; }static inline void i801_acpi_remove (struct i801_priv *priv) { }#endif +static unsigned char i801_setup_hstcfg (struct i801_priv *priv) +{ +unsigned char hstcfg = priv->original_hstcfg; + + hstcfg &= ~SMBHSTCFG_I2C_EN ;/* SMBus timing */ + hstcfg |=SMBHSTCFG_HST_EN ; +pci_write_config_byte (priv->pci_dev,SMBHSTCFG , hstcfg); +return hstcfg; +} +static int i801_probe (struct pci_dev *dev,const struct pci_device_id *id) {unsigned char temp;
@@ -1611,14 +1621,10 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)return err; } -pci_read_config_byte (priv->pci_dev,SMBHSTCFG , &temp); - priv->original_hstcfg = temp; - temp &= ~SMBHSTCFG_I2C_EN ;/* SMBus timing */ -if (!(temp &SMBHSTCFG_HST_EN )) { +pci_read_config_byte (priv->pci_dev,SMBHSTCFG , &priv->original_hstcfg); + temp =i801_setup_hstcfg (priv); +if (!(priv->original_hstcfg &SMBHSTCFG_HST_EN ))dev_info (&dev->dev,"Enabling SMBus device\n" ); - temp |=SMBHSTCFG_HST_EN ; - } -pci_write_config_byte (priv->pci_dev,SMBHSTCFG , temp);if (temp &SMBHSTCFG_SMB_SMI_EN ) {dev_dbg (&dev->dev,"SMBus using interrupt SMI#\n" );
@@ -1745,6 +1751,7 @@ static int i801_resume(struct device *dev)struct pci_dev *pci_dev =to_pci_dev (dev);struct i801_priv *priv =pci_get_drvdata (pci_dev); +i801_setup_hstcfg (priv);i801_enable_host_notify (&priv->adapter);return 0 ;
drivers/infiniband/hw/bnxt_re/qplib_sp.c +1 -1
@@ -141,7 +141,7 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw, attr->max_inline_data =le32_to_cpu (sb->max_inline_data); attr->l2_db_size = (sb->l2_db_space_size +1 ) * (0x01 <<RCFW_DBR_BASE_PAGE_SHIFT ); - attr->max_sgid =le32_to_cpu (sb->max_gid); + attr->max_sgid =BNXT_QPLIB_NUM_GIDS_SUPPORTED ;bnxt_qplib_query_version (rcfw, attr->fw_ver);
drivers/infiniband/hw/bnxt_re/qplib_sp.h +1 -0
@@ -47,6 +47,7 @@struct bnxt_qplib_dev_attr {#define FW_VER_ARR_LEN 4u8 fw_ver[FW_VER_ARR_LEN ]; +#define BNXT_QPLIB_NUM_GIDS_SUPPORTED 256u16 max_sgid;u16 max_mrw;u32 max_qp;
drivers/input/mouse/trackpoint.c +6 -4
@@ -20,10 +20,12 @@#include "trackpoint.h" static const char *const trackpoint_variants[] = { - [TP_VARIANT_IBM ] ="IBM" , - [TP_VARIANT_ALPS ] ="ALPS" , - [TP_VARIANT_ELAN ] ="Elan" , - [TP_VARIANT_NXP ] ="NXP" , + [TP_VARIANT_IBM ] ="IBM" , + [TP_VARIANT_ALPS ] ="ALPS" , + [TP_VARIANT_ELAN ] ="Elan" , + [TP_VARIANT_NXP ] ="NXP" , + [TP_VARIANT_JYT_SYNAPTICS ] ="JYT_Synaptics" , + [TP_VARIANT_SYNAPTICS ] ="Synaptics" , };/*
drivers/input/mouse/trackpoint.h +6 -4
@@ -27,10 +27,12 @@* 0x01 was the original IBM trackpoint, others implement very limited * subset of trackpoint features. */ -#define TP_VARIANT_IBM 0x01 -#define TP_VARIANT_ALPS 0x02 -#define TP_VARIANT_ELAN 0x03 -#define TP_VARIANT_NXP 0x04 +#define TP_VARIANT_IBM 0x01 +#define TP_VARIANT_ALPS 0x02 +#define TP_VARIANT_ELAN 0x03 +#define TP_VARIANT_NXP 0x04 +#define TP_VARIANT_JYT_SYNAPTICS 0x05 +#define TP_VARIANT_SYNAPTICS 0x06/* * Commands
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"), + }, + }, { } };
@@ -680,6 +688,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/hyperv/netvsc_drv.c +1 -1
@@ -378,7 +378,7 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb, }rcu_read_unlock (); -while (unlikely (txq >= ndev->real_num_tx_queues)) +while (txq >= ndev->real_num_tx_queues) txq -= ndev->real_num_tx_queues;return txq;
drivers/nvme/host/fc.c +1 -0
@@ -1791,6 +1791,7 @@ nvme_fc_term_aen_ops(struct nvme_fc_ctrl *ctrl)struct nvme_fc_fcp_op *aen_op;int i; +cancel_work_sync (&ctrl->ctrl.async_event_work); aen_op = ctrl->aen_ops;for (i =0 ; i <NVME_NR_AEN_COMMANDS ; i++, aen_op++) {if (!aen_op->fcp_req.private)
drivers/nvme/host/rdma.c +1 -0
@@ -740,6 +740,7 @@ static void nvme_rdma_destroy_admin_queue(struct nvme_rdma_ctrl *ctrl,nvme_rdma_free_tagset (&ctrl->ctrl, ctrl->ctrl.admin_tagset); }if (ctrl->async_event_sqe.data) { +cancel_work_sync (&ctrl->ctrl.async_event_work);nvme_rdma_free_qe (ctrl->device->dev, &ctrl->async_event_sqe,sizeof (struct nvme_command ),DMA_TO_DEVICE ); ctrl->async_event_sqe.data =NULL ;
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/pwm-regulator.c +1 -1
@@ -285,7 +285,7 @@ static int pwm_regulator_init_table(struct platform_device *pdev,return ret; } - drvdata->state = -EINVAL ; + drvdata->state = -ENOTRECOVERABLE ; drvdata->duty_cycle_table = duty_cycle_table;memcpy (&drvdata->ops, &pwm_regulator_voltage_table_ops,sizeof (drvdata->ops));
drivers/scsi/libfc/fc_disc.c +0 -2
@@ -646,8 +646,6 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,fc_frame_free (fp); out:kref_put (&rdata->kref, fc_rport_destroy); -if (!IS_ERR (fp)) -fc_frame_free (fp); }/**
drivers/scsi/lpfc/lpfc_els.c +3 -1
@@ -4112,7 +4112,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
@@ -794,7 +794,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/scsi/qla2xxx/qla_def.h +6 -4
@@ -262,8 +262,8 @@ struct name_list_extended {struct get_name_list_extended *l;dma_addr_t ldma;struct list_head fcports; -spinlock_t fcports_lock;u32 size; +u8 sent; };/* * Timeout timer counts in seconds
@@ -2351,7 +2351,7 @@ typedef struct fc_port { unsigned int login_succ:1; unsigned int query:1; unsigned int id_changed:1; - unsigned int rscn_rcvd:1; + unsigned int scan_needed:1;struct work_struct nvme_del_work;struct completion nvme_del_done;
@@ -2375,11 +2375,13 @@ typedef struct fc_port {unsigned long expires;struct list_head del_list_entry;struct work_struct free_work; - +struct work_struct reg_work; +uint64_t jiffies_at_registration;struct qlt_plogi_ack_t *plogi_link[QLT_PLOGI_LINK_MAX ];uint16_t tgt_id;uint16_t old_tgt_id; +uint16_t sec_since_registration;uint8_t fcp_prio;
@@ -2412,6 +2414,7 @@ typedef struct fc_port {struct qla_tgt_sess *tgt_session;struct ct_sns_desc ct_desc;enum discovery_state disc_state; +enum discovery_state next_disc_state;enum login_state fw_login_state;unsigned long dm_login_expire;unsigned long plogi_nack_done_deadline;
@@ -3222,7 +3225,6 @@ enum qla_work_type {QLA_EVT_GPDB ,QLA_EVT_PRLI ,QLA_EVT_GPSC , -QLA_EVT_UPD_FCPORT ,QLA_EVT_GNL ,QLA_EVT_NACK , QLA_EVT_RELOGIN,
drivers/scsi/qla2xxx/qla_gbl.h +3 -2
@@ -54,7 +54,7 @@ extern void qla2x00_abort_isp_cleanup(scsi_qla_host_t *);extern void qla2x00_quiesce_io (scsi_qla_host_t *);extern void qla2x00_update_fcport (scsi_qla_host_t *,fc_port_t *); - +void qla_register_fcport_fn (struct work_struct *);extern void qla2x00_alloc_fw_dump (scsi_qla_host_t *);extern void qla2x00_try_to_stop_firmware (scsi_qla_host_t *);
@@ -109,6 +109,7 @@ int qla24xx_post_newsess_work(struct scsi_qla_host *, port_id_t *, u8 *, u8*,int qla24xx_fcport_handle_login (struct scsi_qla_host *,fc_port_t *);int qla24xx_detect_sfp (scsi_qla_host_t *vha);int qla24xx_post_gpdb_work (struct scsi_qla_host *,fc_port_t *,u8 ); +void qla2x00_async_prlo_done (struct scsi_qla_host *,fc_port_t *,uint16_t *); extern int qla2x00_post_async_prlo_work(struct scsi_qla_host *, fc_port_t *,
@@ -208,7 +209,7 @@ extern void qla2x00_disable_board_on_pci_error(struct work_struct *);extern void qla2x00_sp_compl (void *,int );extern void qla2xxx_qpair_sp_free_dma (void *);extern void qla2xxx_qpair_sp_compl (void *,int ); -extern int qla24xx_post_upd_fcport_work (struct scsi_qla_host *,fc_port_t *); +extern void qla24xx_sched_upd_fcport (fc_port_t *);void qla2x00_handle_login_done_event (struct scsi_qla_host *,fc_port_t *,uint16_t *);int qla24xx_post_gnl_work (struct scsi_qla_host *,fc_port_t *);
drivers/scsi/qla2xxx/qla_gs.c +18 -12
@@ -3973,7 +3973,7 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)list_for_each_entry (fcport, &vha->vp_fcports, list) {if (memcmp (rp->port_name, fcport->port_name,WWN_SIZE ))continue ; - fcport->rscn_rcvd =0 ; + fcport->scan_needed =0 ; fcport->scan_state =QLA_FCPORT_FOUND ; found = true;/*
@@ -4009,20 +4009,19 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)*/ list_for_each_entry (fcport, &vha->vp_fcports, list) {if ((fcport->flags &FCF_FABRIC_DEVICE ) ==0 ) { - fcport->rscn_rcvd =0 ; + fcport->scan_needed =0 ;continue ; }if (fcport->scan_state !=QLA_FCPORT_FOUND ) { - fcport->rscn_rcvd =0 ; + fcport->scan_needed =0 ;if ((qla_dual_mode_enabled (vha) ||qla_ini_mode_enabled (vha)) &&atomic_read (&fcport->state) ==FCS_ONLINE ) { -qla2x00_mark_device_lost (vha, fcport, - ql2xplogiabsentdevice,0 ); +if (fcport->loop_id !=FC_NO_LOOP_ID ) { +if (fcport->flags &FCF_FCP2_DEVICE ) + fcport->logout_on_delete =0 ; -if (fcport->loop_id !=FC_NO_LOOP_ID && - (fcport->flags &FCF_FCP2_DEVICE ) ==0 ) { ql_dbg(ql_dbg_disc, vha, 0x20f0, "%s %d %8phC post del sess\n", __func__, __LINE__,
@@ -4033,7 +4032,7 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp) } } }else { -if (fcport->rscn_rcvd || +if (fcport->scan_needed || fcport->disc_state !=DSC_LOGIN_COMPLETE ) {if (fcport->login_retry ==0 ) { fcport->login_retry =
@@ -4043,7 +4042,7 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp) fcport->port_name, fcport->loop_id, fcport->login_retry); } - fcport->rscn_rcvd =0 ; + fcport->scan_needed =0 ;qla24xx_fcport_handle_login (vha, fcport); } }
@@ -4058,7 +4057,7 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)if (recheck) {list_for_each_entry (fcport, &vha->vp_fcports, list) { -if (fcport->rscn_rcvd) { +if (fcport->scan_needed) {set_bit (LOCAL_LOOP_UPDATE , &vha->dpc_flags);set_bit (LOOP_RESYNC_NEEDED , &vha->dpc_flags);break ;
@@ -4261,12 +4260,13 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res) sp->rc = res; rc =qla2x00_post_nvme_gpnft_done_work (vha, sp,QLA_EVT_GPNFT ); -if (!rc) { +if (rc) {qla24xx_sp_unmap (vha, sp);set_bit (LOCAL_LOOP_UPDATE , &vha->dpc_flags);set_bit (LOOP_RESYNC_NEEDED , &vha->dpc_flags);return ; } +return ; }if (cmd ==GPN_FT_CMD ) {
@@ -4316,6 +4316,8 @@ static int qla24xx_async_gnnft(scsi_qla_host_t *vha, struct srb *sp, vha->scan.scan_flags &= ~SF_SCANNING ;spin_unlock_irqrestore (&vha->work_lock, flags);WARN_ON (1 ); +set_bit (LOCAL_LOOP_UPDATE , &vha->dpc_flags); +set_bit (LOOP_RESYNC_NEEDED , &vha->dpc_flags); goto done_free_sp; }
@@ -4349,8 +4351,12 @@ static int qla24xx_async_gnnft(scsi_qla_host_t *vha, struct srb *sp, sp->done = qla2x00_async_gpnft_gnnft_sp_done; rval =qla2x00_start_sp (sp); -if (rval !=QLA_SUCCESS ) +if (rval !=QLA_SUCCESS ) { +spin_lock_irqsave (&vha->work_lock, flags); + vha->scan.scan_flags &= ~SF_SCANNING ; +spin_unlock_irqrestore (&vha->work_lock, flags); goto done_free_sp; + } ql_dbg(ql_dbg_disc, vha, 0xffff, "Async-%s hdl=%x FC4Type %x.\n", sp->name,
drivers/scsi/qla2xxx/qla_init.c +75 -26
195 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_os.c +17 -12
@@ -2719,7 +2719,7 @@ static void qla2x00_iocb_work_fn(struct work_struct *work) struct scsi_qla_host, iocb_work);struct qla_hw_data *ha = vha->hw;struct scsi_qla_host *base_vha =pci_get_drvdata (ha->pdev); -int i =20 ; +int i =2 ;unsigned long flags;if (test_bit (UNLOADING , &base_vha->dpc_flags))
@@ -4606,7 +4606,6 @@ struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *sht,spin_lock_init (&vha->work_lock);spin_lock_init (&vha->cmd_list_lock); -spin_lock_init (&vha->gnl.fcports_lock);init_waitqueue_head (&vha->fcport_waitQ);init_waitqueue_head (&vha->vref_waitq);
@@ -4792,16 +4791,25 @@ qlafx00_post_aenfx_work(struct scsi_qla_host *vha, uint32_t evtcode,return qla2x00_post_work (vha, e); } -int qla24xx_post_upd_fcport_work (struct scsi_qla_host *vha,fc_port_t *fcport) +void qla24xx_sched_upd_fcport (fc_port_t *fcport) { -struct qla_work_evt *e; +unsigned long flags; - e =qla2x00_alloc_work (vha,QLA_EVT_UPD_FCPORT ); -if (!e) -return QLA_FUNCTION_FAILED ; +if (IS_SW_RESV_ADDR (fcport->d_id)) +return ; - e->u.fcport.fcport = fcport; -return qla2x00_post_work (vha, e); +spin_lock_irqsave (&fcport->vha->work_lock, flags); +if (fcport->disc_state ==DSC_UPD_FCPORT ) { +spin_unlock_irqrestore (&fcport->vha->work_lock, flags); +return ; + } + fcport->jiffies_at_registration = jiffies; + fcport->sec_since_registration =0 ; + fcport->next_disc_state =DSC_DELETED ; + fcport->disc_state =DSC_UPD_FCPORT ; +spin_unlock_irqrestore (&fcport->vha->work_lock, flags); + +queue_work (system_unbound_wq, &fcport->reg_work); } static
@@ -5057,9 +5065,6 @@ qla2x00_do_work(struct scsi_qla_host *vha)case QLA_EVT_GPSC :qla24xx_async_gpsc (vha, e->u.fcport.fcport);break ; -case QLA_EVT_UPD_FCPORT : -qla2x00_update_fcport (vha, e->u.fcport.fcport); -break ;case QLA_EVT_GNL :qla24xx_async_gnl (vha, e->u.fcport.fcport);break ;
drivers/scsi/qla2xxx/qla_target.c +69 -16
131 lines not on this page · raw message
drivers/spi/spi-loopback-test.c +1 -1
@@ -99,7 +99,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, .transfer_count = 1,
drivers/spi/spi.c +7 -2
@@ -1116,8 +1116,6 @@ static int spi_transfer_one_message(struct spi_controller *ctlr,if (msg->status && ctlr->handle_err) ctlr->handle_err (ctlr, msg); -spi_res_release (ctlr, msg); -spi_finalize_current_message (ctlr);return ret;
@@ -1375,6 +1373,13 @@ void spi_finalize_current_message(struct spi_controller *ctlr)spi_unmap_msg (ctlr, mesg); +/* In the prepare_messages callback the spi bus has the opportunity to +* split a transfer to smaller chunks. +* Release splited transfers here since spi_map_msg is done on the +* splited transfers. +*/ +spi_res_release (ctlr, mesg); +if (ctlr->cur_msg_prepared && ctlr->unprepare_message) { ret = ctlr->unprepare_message (ctlr, mesg);if (ret) {
drivers/tty/serial/8250/8250_pci.c +11 -0
@@ -5236,6 +5236,17 @@ static const struct pci_device_id serial_pci_tbl[] = {PCI_ANY_ID ,PCI_ANY_ID , 0, 0, pbn_wch384_4 }, +/* +* 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
@@ -827,6 +827,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/quirks.c +4 -0
@@ -397,6 +397,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/host/ehci-hcd.c +1 -0
@@ -22,6 +22,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
@@ -14,7 +14,6 @@*/ /*-------------------------------------------------------------------------*/ -#include <linux/usb/otg.h> #define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
drivers/usb/storage/uas.c +12 -2
@@ -669,8 +669,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/fbdev/core/fbcon.c +1 -1
@@ -1979,7 +1979,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,struct fb_var_screeninfo var = info->var;int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh; -if (ops->p && ops->p->userfont &&FNTSIZE (vc->vc_font.data)) { +if (p->userfont &&FNTSIZE (vc->vc_font.data)) {int size;int pitch =PITCH (vc->vc_font.width);
fs/f2fs/data.c +3 -0
@@ -2490,6 +2490,9 @@ static int check_direct_IO(struct inode *inode, struct iov_iter *iter,unsigned long align = offset |iov_iter_alignment (iter);struct block_device *bdev = inode->i_sb->s_bdev; +if (iov_iter_rw (iter) ==READ && offset >=i_size_read (inode)) +return 1 ; +if (align & blocksize_mask) {if (bdev) blkbits =blksize_bits (bdev_logical_block_size (bdev));
fs/f2fs/node.c +3 -0
@@ -2257,6 +2257,9 @@ static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi,if (unlikely (nid >= nm_i->max_nid)) nid =0 ; +if (unlikely (nid %NAT_ENTRY_PER_BLOCK )) + nid =NAT_BLOCK_OFFSET (nid) *NAT_ENTRY_PER_BLOCK ; +/* Enough entries */ if (nm_i->nid_cnt[FREE_NID ] >=NAT_ENTRY_PER_BLOCK )return 0 ;
fs/gfs2/glops.c +2 -0
@@ -89,6 +89,8 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)memset (&tr,0 ,sizeof (tr));INIT_LIST_HEAD (&tr.tr_buf);INIT_LIST_HEAD (&tr.tr_databuf); +INIT_LIST_HEAD (&tr.tr_ail1_list); +INIT_LIST_HEAD (&tr.tr_ail2_list); tr.tr_revokes =atomic_read (&gl->gl_ail_count);if (!tr.tr_revokes)
fs/gfs2/log.c +0 -2
@@ -806,8 +806,6 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags) tr = sdp->sd_log_tr;if (tr) { sdp->sd_log_tr =NULL ; -INIT_LIST_HEAD (&tr->tr_ail1_list); -INIT_LIST_HEAD (&tr->tr_ail2_list); tr->tr_first = sdp->sd_log_flush_head;if (unlikely (state ==SFS_FROZEN ))gfs2_assert_withdraw (sdp, !tr->tr_num_buf_new && !tr->tr_num_databuf_new);
fs/gfs2/trans.c +2 -0
@@ -56,6 +56,8 @@ int gfs2_trans_begin(struct gfs2_sbd *sdp, unsigned int blocks, sizeof(u64));INIT_LIST_HEAD (&tr->tr_databuf);INIT_LIST_HEAD (&tr->tr_buf); +INIT_LIST_HEAD (&tr->tr_ail1_list); +INIT_LIST_HEAD (&tr->tr_ail2_list);sb_start_intwrite (sdp->sd_vfs);
fs/nfs/nfs4proc.c +9 -2
@@ -3129,8 +3129,10 @@ static int _nfs4_do_setattr(struct inode *inode,/* Servers should only apply open mode checks for file size changes */ truncate = (arg->iap->ia_valid &ATTR_SIZE ) ? true : false; -if (!truncate) +if (!truncate) { +nfs4_inode_make_writeable (inode); goto zero_stateid; + }if (nfs4_copy_delegation_stateid (inode,FMODE_WRITE , &arg->stateid, &delegation_cred)) {/* Use that stateid */
@@ -7006,7 +7008,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); }
include/linux/i2c-algo-pca.h +15 -0
@@ -53,6 +53,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);
@@ -64,6 +78,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/uapi/linux/kvm.h +3 -2
@@ -746,9 +746,10 @@ struct kvm_ppc_resize_hpt {#define KVM_VM_PPC_HV 1#define KVM_VM_PPC_PR 2 -/* on MIPS, 0 forces trap & emulate, 1 forces VZ ASE */ -#define KVM_VM_MIPS_TE 0 +/* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */ +#define KVM_VM_MIPS_AUTO 0#define KVM_VM_MIPS_VZ 1 +#define KVM_VM_MIPS_TE 2#define KVM_S390_SIE_PAGE_OFFSET 1
mm/percpu.c +1 -1
@@ -1103,7 +1103,7 @@ static struct pcpu_chunk * __init pcpu_alloc_first_chunk(unsigned long tmp_addr,/* allocate chunk */ chunk =memblock_virt_alloc (sizeof (struct pcpu_chunk ) + -BITS_TO_LONGS (region_size >>PAGE_SHIFT ), +BITS_TO_LONGS (region_size >>PAGE_SHIFT ) *sizeof (unsigned long ),0 );INIT_LIST_HEAD (&chunk->list);
net/core/skbuff.c +7 -3
@@ -5521,9 +5521,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/dsa/tag_edsa.c +34 -3
@@ -17,6 +17,16 @@#define DSA_HLEN 4#define EDSA_HLEN 8 +#define FRAME_TYPE_TO_CPU 0x00 +#define FRAME_TYPE_FORWARD 0x03 + +#define TO_CPU_CODE_MGMT_TRAP 0x00 +#define TO_CPU_CODE_FRAME2REG 0x01 +#define TO_CPU_CODE_IGMP_MLD_TRAP 0x02 +#define TO_CPU_CODE_POLICY_TRAP 0x03 +#define TO_CPU_CODE_ARP_MIRROR 0x04 +#define TO_CPU_CODE_POLICY_MIRROR 0x05 +static struct sk_buff *edsa_xmit (struct sk_buff *skb,struct net_device *dev) {struct dsa_port *dp =dsa_slave_to_port (dev);
@@ -81,6 +91,8 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) {u8 *edsa_header; +int frame_type; +int code;int source_device;int source_port;
@@ -95,8 +107,29 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev,/* * Check that frame type is either TO_CPU or FORWARD. */ -if ((edsa_header[0 ] &0xc0 ) !=0x00 && (edsa_header[0 ] &0xc0 ) !=0xc0 ) + frame_type = edsa_header[0 ] >>6 ; + +switch (frame_type) { +case FRAME_TYPE_TO_CPU : + code = (edsa_header[1 ] &0x6 ) | ((edsa_header[2 ] >>4 ) &1 ); + +/* +* Mark the frame to never egress on any port of the same switch +* unless it's a trapped IGMP/MLD packet, in which case the +* bridge might want to forward it. +*/ +if (code !=TO_CPU_CODE_IGMP_MLD_TRAP ) + skb->offload_fwd_mark =1 ; + +break ; + +case FRAME_TYPE_FORWARD : + skb->offload_fwd_mark =1 ; +break ; + +default :return NULL ; + }/* * Determine source device and port.
@@ -160,8 +193,6 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev, 2 * ETH_ALEN); } - skb->offload_fwd_mark =1 ; -return skb; }
net/sunrpc/rpcb_clnt.c +2 -2
@@ -981,8 +981,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/pci/hda/patch_realtek.c +0 -1
@@ -2452,7 +2452,6 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {SND_PCI_QUIRK (0x1462 ,0x1276 ,"MSI-GL73" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0x1293 ,"MSI-GP65" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0x7350 ,"MSI-7350" ,ALC889_FIXUP_CD ), -SND_PCI_QUIRK (0x1462 ,0x9c37 ,"MSI X570-A PRO" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0xda57 ,"MSI Z270-Gaming" ,ALC1220_FIXUP_GB_DUAL_CODECS ),SND_PCI_QUIRK_VENDOR (0x1462 ,"MSI" ,ALC882_FIXUP_GPIO3 ), SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
sound/soc/qcom/apq8016_sbc.c +1 -0
@@ -233,6 +233,7 @@ static int apq8016_sbc_platform_probe(struct platform_device *pdev)return -ENOMEM ; card->dev = dev; + card->owner =THIS_MODULE ; card->dapm_widgets = apq8016_sbc_dapm_widgets; card->num_dapm_widgets =ARRAY_SIZE (apq8016_sbc_dapm_widgets); data =apq8016_sbc_parse_of (card);
sound/soc/qcom/apq8096.c +1 -0
@@ -46,6 +46,7 @@ static int apq8096_platform_probe(struct platform_device *pdev)return -ENOMEM ; card->dev = dev; + card->owner =THIS_MODULE ;dev_set_drvdata (dev, card); ret =qcom_snd_parse_of (card);if (ret) {
sound/soc/qcom/sdm845.c +1 -0
@@ -226,6 +226,7 @@ static int sdm845_snd_platform_probe(struct platform_device *pdev) } card->dev = dev; + card->owner =THIS_MODULE ;dev_set_drvdata (dev, card); ret =qcom_snd_parse_of (card);if (ret) {
sound/soc/qcom/storm.c +1 -0
@@ -99,6 +99,7 @@ static int storm_platform_probe(struct platform_device *pdev)return -ENOMEM ; card->dev = &pdev->dev; + card->owner =THIS_MODULE ; ret =snd_soc_of_parse_card_name (card,"qcom,model" );if (ret) {
tools/perf/tests/bp_signal.c +4 -1
@@ -44,10 +44,13 @@ volatile long the_var;#if defined (__x86_64__)extern void __test_function (volatile long *ptr); asm ( +".pushsection .text;" ".globl __test_function\n" +".type __test_function, @function;" "__test_function:\n" "incq (%rdi)\n" -"ret\n" ); +"ret\n" +".popsection\n" );#else static void __test_function (volatile long *ptr) {
tools/perf/tests/pmu.c +1 -0
@@ -172,6 +172,7 @@ int test__pmu(struct test *test __maybe_unused, 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
@@ -1282,6 +1282,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
@@ -79,6 +79,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);