Linux 5.4.238
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.238 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/filesystems/vfs.rst | 2 - Makefile | 2 - arch/s390/boot/ipl_report.c | 8 ++++ arch/x86/kvm/vmx/nested.c | 10 ++++- arch/x86/mm/mem_encrypt_identity.c | 3 + drivers/block/sunvdc.c | 2 + drivers/clk/Kconfig | 2 - drivers/gpu/drm/amd/amdkfd/kfd_events.c | 9 +--- drivers/gpu/drm/i915/gt/intel_ringbuffer.c | 5 +- drivers/gpu/drm/meson/meson_vpp.c | 2 + drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 - drivers/hid/hid-core.c | 18 ++++++--- drivers/hid/uhid.c | 1 drivers/hwmon/adt7475.c | 8 ++-- drivers/hwmon/ina3221.c | 2 - drivers/hwmon/xgene-hwmon.c | 1 drivers/interconnect/core.c | 4 ++ drivers/media/i2c/m5mols/m5mols_core.c | 2 - drivers/mmc/host/atmel-mci.c | 3 - drivers/net/ethernet/intel/i40e/i40e_main.c | 1 drivers/net/ethernet/qlogic/qed/qed_dev.c | 5 ++ drivers/net/ethernet/sun/ldmvsw.c | 3 + drivers/net/ethernet/sun/sunvnet.c | 3 + drivers/net/ipvlan/ipvlan_l3s.c | 1 drivers/net/phy/smsc.c | 5 ++ drivers/net/usb/smsc75xx.c | 7 +++ drivers/nfc/pn533/usb.c | 1 drivers/nfc/st-nci/ndlc.c | 6 ++- drivers/nvme/target/core.c | 4 +- drivers/pci/pci-driver.c | 4 +- drivers/pci/pci.c | 54 ++++++++++++---------------- drivers/pci/pci.h | 10 ++++- drivers/scsi/hosts.c | 5 -- drivers/scsi/mpt3sas/mpt3sas_transport.c | 14 ++++++- drivers/tty/serial/8250/8250_em.c | 4 +- drivers/tty/serial/fsl_lpuart.c | 12 ++++-- drivers/video/fbdev/stifb.c | 27 ++++++++++++++ fs/cifs/transport.c | 21 ++++------ fs/ext4/inode.c | 18 ++++----- fs/ext4/namei.c | 4 -- fs/ext4/page-io.c | 10 +++-- fs/ext4/xattr.c | 11 +++++ fs/jffs2/file.c | 15 +++---- include/linux/hid.h | 3 + include/linux/netdevice.h | 6 ++- include/linux/sh_intc.h | 5 ++ include/linux/tracepoint.h | 15 +++---- kernel/trace/ftrace.c | 3 + kernel/trace/trace_events_hist.c | 3 + net/ipv4/fib_frontend.c | 3 + net/ipv4/ip_tunnel.c | 12 +++--- net/ipv4/tcp_output.c | 2 - net/ipv6/ip6_tunnel.c | 4 +- net/iucv/iucv.c | 2 - net/netfilter/nft_redir.c | 2 - net/xfrm/xfrm_state.c | 3 - sound/pci/hda/hda_intel.c | 22 ++++++++++- sound/pci/hda/patch_hdmi.c | 3 + 58 files changed, 276 insertions(+), 143 deletions(-)
Alexandra Winter (1):
net/iucv: Fix size of interrupt data
Baokun Li (2):
ext4: fail ext4_iget if special inode unallocated
ext4: fix task hung in ext4_xattr_delete_inode
Bart Van Assche (1):
scsi: core: Fix a procfs host directory removal regression
Biju Das (1):
serial: 8250_em: Fix UART port type
Bjorn Helgaas (1):
ALSA: hda: Match only Intel devices with CONTROLLER_IN_GPU()
Breno Leitao (1):
tcp: tcp_make_synack() can be called from process context
Chen Zhongjin (1):
ftrace: Fix invalid address access in lookup_rec() when index is 0
Christian Hewitt (1):
drm/meson: fix 1px pink line on GXM when scaling video overlay
Damien Le Moal (1):
nvmet: avoid potential UAF in nvmet_req_complete()
Daniil Tatianin (1):
qed/qed_dev: guard against a possible division by zero
Dmitry Osipenko (1):
drm/panfrost: Don't sync rpm suspension after mmu flushing
Eric Biggers (1):
ext4: fix cgroup writeback accounting with fs-layer encryption
Eric Dumazet (1):
net: tunnels: annotate lockless accesses to dev->needed_headroom
Fedor Pchelkin (1):
nfc: pn533: initialize struct pn533_out_arg properly
Glenn Washburn (1):
docs: Correct missing "d_" prefix for dentry_operations member d_weak_revalidate
Greg Kroah-Hartman (1):
Linux 5.4.238
Heiner Kallweit (1):
net: phy: smsc: bail out in lan87xx_read_status if genphy_read_status fails
Helge Deller (1):
fbdev: stifb: Provide valid pixelclock and add fb_check_var() checks
Herbert Xu (1):
xfrm: Allow transport-mode states with AF_UNSPEC selector
Ido Schimmel (1):
ipv4: Fix incorrect table ID in IOCTL path
Ivan Vecera (1):
i40e: Fix kernel crash during reboot when adapter is in recovery mode
Jeremy Sowden (1):
netfilter: nft_redir: correct value of inet type .maxattrs
Jianguo Wu (1):
ipvlan: Make skb->skb_iif track skb->dev for l3s mode
Johan Hovold (1):
interconnect: fix mem leak when freeing nodes
John Harrison (1):
drm/i915: Don't use stolen memory for ring buffers with LLC
Kai Vehmanen (4):
ALSA: hda - add Intel DG1 PCI and HDMI ids
ALSA: hda - controller is in GPU on the DG1
ALSA: hda: Add Alderlake-S PCI ID and HDMI codec vid
ALSA: hda: Add Intel DG2 PCI ID and HDMI codec vid
Lee Jones (2):
HID: core: Provide new max_buffer_size attribute to over-ride the default
HID: uhid: Over-ride the default maximum data buffer value with our own
Liang He (2):
block: sunvdc: add check for mdesc_grab() returning NULL
ethernet: sun: add check for the mdesc_grab()
Linus Torvalds (1):
media: m5mols: fix off-by-one loop termination error
Lukas Wunner (1):
PCI: Unify delay handling for reset and resume
Marcus Folkesson (1):
hwmon: (ina3221) return prober error code
Michael Karcher (1):
sh: intc: Avoid spurious sizeof-pointer-div warning
Nikita Zhandarovich (1):
x86/mm: Fix use of uninitialized buffer in sme_enable()
Paolo Bonzini (1):
KVM: nVMX: add missing consistency checks for CR0 and CR4
Qu Huang (1):
drm/amdkfd: Fix an illegal memory access
Randy Dunlap (1):
clk: HI655X: select REGMAP instead of depending on it
Sherry Sun (1):
tty: serial: fsl_lpuart: skip waiting for transmission complete when UARTCTRL_SBK is asserted
Steven Rostedt (Google) (2):
tracing: Check field value in hist_field_name()
tracing: Make tracepoint lockdep check actually test something
Sven Schnelle (1):
s390/ipl: add missing intersection check to ipl_report handling
Szymon Heidrich (2):
net: usb: smsc75xx: Limit packet length to skb->len
net: usb: smsc75xx: Move packet length check to prevent kernel panic in skb_pull
Theodore Ts'o (1):
ext4: fix possible double unlock when moving a directory
Tobias Schramm (1):
mmc: atmel-mci: fix race between stop command and start of next command
Tony O'Brien (2):
hwmon: (adt7475) Display smoothing attributes in correct order
hwmon: (adt7475) Fix masking of hysteresis registers
Wenchao Hao (1):
scsi: mpt3sas: Fix NULL pointer access in mpt3sas_transport_port_add()
Xiang Chen (1):
scsi: core: Fix a comment in function scsi_host_dev_release()
Yifei Liu (1):
jffs2: correct logic when creating a hole in jffs2_write_begin
Zhang Xiaoxu (1):
cifs: Move the in_send statistic to __smb_send_rqst()
Zheng Wang (2):
nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
hwmon: (xgene) Fix use after free bug in xgene_hwmon_remove due to race condition
Greg Kroah-Hartman
maintainerDocumentation/filesystems/vfs.rst +1 -1
@@ -1173,7 +1173,7 @@ defined: return -ECHILD and it will be called again in ref-walk mode. -``_weak_revalidate`` +``d_weak_revalidate`` called when the VFS needs to revalidate a "jumped" dentry. This is called when a path-walk ends at dentry that was not acquired by doing a lookup in the parent directory. This includes "/",
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 237 +SUBLEVEL = 238 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/s390/boot/ipl_report.c +8 -0
@@ -57,11 +57,19 @@ static unsigned long find_bootdata_space(struct ipl_rb_components *comps,if (IS_ENABLED (CONFIG_BLK_DEV_INITRD ) &&INITRD_START &&INITRD_SIZE &&intersects (INITRD_START ,INITRD_SIZE , safe_addr, size)) safe_addr =INITRD_START +INITRD_SIZE ; +if (intersects (safe_addr, size, (unsigned long )comps, comps->len)) { + safe_addr = (unsigned long )comps + comps->len; + goto repeat; + }for_each_rb_entry (comp, comps)if (intersects (safe_addr, size, comp->addr, comp->len)) { safe_addr = comp->addr + comp->len; goto repeat; } +if (intersects (safe_addr, size, (unsigned long )certs, certs->len)) { + safe_addr = (unsigned long )certs + certs->len; + goto repeat; + }for_each_rb_entry (cert, certs)if (intersects (safe_addr, size, cert->addr, cert->len)) { safe_addr = cert->addr + cert->len;
arch/x86/kvm/vmx/nested.c +8 -2
@@ -2779,7 +2779,7 @@ static int nested_vmx_check_guest_state(struct kvm_vcpu *vcpu,struct vmcs12 *vmcs12, u32 *exit_qual) { - bool ia32e; + bool ia32e = !!(vmcs12->vm_entry_controls & VM_ENTRY_IA32E_MODE); *exit_qual =ENTRY_FAIL_DEFAULT ;
@@ -2796,6 +2796,13 @@ static int nested_vmx_check_guest_state(struct kvm_vcpu *vcpu,return -EINVAL ; } +if (CC ((vmcs12->guest_cr0 & (X86_CR0_PG |X86_CR0_PE )) ==X86_CR0_PG )) +return -EINVAL ; + +if (CC (ia32e && !(vmcs12->guest_cr4 &X86_CR4_PAE )) || +CC (ia32e && !(vmcs12->guest_cr0 &X86_CR0_PG ))) +return -EINVAL ; +/* * If the load IA32_EFER VM-entry control is 1, the following checks * are performed on the field for the IA32_EFER MSR:
@@ -2807,7 +2814,6 @@ static int nested_vmx_check_guest_state(struct kvm_vcpu *vcpu,*/ if (to_vmx(vcpu)->nested.nested_run_pending && (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_EFER)) { - ia32e = (vmcs12->vm_entry_controls & VM_ENTRY_IA32E_MODE) != 0; if (CC(!kvm_valid_efer(vcpu, vmcs12->guest_ia32_efer)) || CC(ia32e != !!(vmcs12->guest_ia32_efer & EFER_LMA)) || CC(((vmcs12->guest_cr0 & X86_CR0_PG) &&
arch/x86/mm/mem_encrypt_identity.c +2 -1
@@ -579,7 +579,8 @@ void __init sme_enable(struct boot_params *bp) cmdline_ptr = (const char *)((u64 )bp->hdr.cmd_line_ptr | ((u64 )bp->ext_cmd_line_ptr <<32 )); -cmdline_find_option (cmdline_ptr, cmdline_arg, buffer,sizeof (buffer)); +if (cmdline_find_option (cmdline_ptr, cmdline_arg, buffer,sizeof (buffer)) <0 ) +return ;if (!strncmp (buffer, cmdline_on,sizeof (buffer))) sme_me_mask = me_mask;
drivers/block/sunvdc.c +2 -0
@@ -983,6 +983,8 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)print_version (); hp =mdesc_grab (); +if (!hp) +return -ENODEV ; err = -ENODEV ;if ((vdev->dev_no <<PARTITION_SHIFT ) & ~(u64 )MINORMASK ) {
drivers/clk/Kconfig +1 -1
@@ -63,7 +63,7 @@ config COMMON_CLK_RK808 config COMMON_CLK_HI655X tristate "Clock driver for Hi655x" if EXPERT depends on (MFD_HI655X_PMIC || COMPILE_TEST) - depends on REGMAP + select REGMAP default MFD_HI655X_PMIC ---help--- This driver supports the hi655x PMIC clock. This
drivers/gpu/drm/amd/amdkfd/kfd_events.c +3 -6
@@ -529,16 +529,13 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)struct kfd_event_waiter *event_waiters;uint32_t i; - event_waiters =kmalloc_array (num_events, -sizeof (struct kfd_event_waiter ), -GFP_KERNEL ); + event_waiters =kcalloc (num_events,sizeof (struct kfd_event_waiter ), +GFP_KERNEL );if (!event_waiters)return NULL ; -for (i =0 ; (event_waiters) && (i < num_events) ; i++) { +for (i =0 ; i < num_events; i++)init_wait (&event_waiters[i].wait); - event_waiters[i].activated = false; - }return event_waiters; }
drivers/gpu/drm/i915/gt/intel_ringbuffer.c +3 -2
@@ -1268,10 +1268,11 @@ static struct i915_vma *create_ring_vma(struct i915_ggtt *ggtt, int size) {struct i915_address_space *vm = &ggtt->vm;struct drm_i915_private *i915 = vm->i915; -struct drm_i915_gem_object *obj; +struct drm_i915_gem_object *obj =NULL ;struct i915_vma *vma; - obj =i915_gem_object_create_stolen (i915, size); +if (!HAS_LLC (i915)) + obj =i915_gem_object_create_stolen (i915, size);if (!obj) obj =i915_gem_object_create_internal (i915, size);if (IS_ERR (obj))
drivers/gpu/drm/meson/meson_vpp.c +2 -0
@@ -100,6 +100,8 @@ void meson_vpp_init(struct meson_drm *priv) priv->io_base + _REG(VPP_DOLBY_CTRL));writel_relaxed (0x1020080 , priv->io_base +_REG (VPP_DUMMY_DATA1 )); +writel_relaxed (0x42020 , + priv->io_base +_REG (VPP_DUMMY_DATA )); }else if (meson_vpu_is_compatible (priv,VPU_COMPATIBLE_G12A ))writel_relaxed (0xf , priv->io_base +_REG (DOLBY_PATH_CTRL ));
drivers/gpu/drm/panfrost/panfrost_mmu.c +1 -1
@@ -233,7 +233,7 @@ static void panfrost_mmu_flush_range(struct panfrost_device *pfdev,if (pm_runtime_active (pfdev->dev))mmu_hw_do_operation (pfdev, mmu, iova, size,AS_COMMAND_FLUSH_PT ); -pm_runtime_put_sync_autosuspend (pfdev->dev); +pm_runtime_put_autosuspend (pfdev->dev); } static int mmu_map_sg(struct panfrost_device *pfdev, struct panfrost_mmu *mmu,
drivers/hid/hid-core.c +13 -5
@@ -258,6 +258,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign {struct hid_report *report;struct hid_field *field; +unsigned int max_buffer_size =HID_MAX_BUFFER_SIZE ;unsigned int usages;unsigned int offset;unsigned int i;
@@ -288,8 +289,11 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign offset = report->size; report->size += parser->global.report_size * parser->global.report_count; +if (parser->device->ll_driver->max_buffer_size) + max_buffer_size = parser->device->ll_driver->max_buffer_size; +/* Total size check: Allow for possible report index byte */ -if (report->size > (HID_MAX_BUFFER_SIZE -1 ) <<3 ) { +if (report->size > (max_buffer_size -1 ) <<3 ) {hid_err (parser->device,"report is too long\n" );return -1 ; }
@@ -1745,6 +1749,7 @@ int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size,struct hid_report_enum *report_enum = hid->report_enum + type;struct hid_report *report;struct hid_driver *hdrv; +int max_buffer_size =HID_MAX_BUFFER_SIZE ;unsigned int a;u32 rsize, csize = size;u8 *cdata = data;
@@ -1761,10 +1766,13 @@ int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size, rsize =hid_compute_report_size (report); -if (report_enum->numbered && rsize >=HID_MAX_BUFFER_SIZE ) - rsize =HID_MAX_BUFFER_SIZE -1 ; -else if (rsize >HID_MAX_BUFFER_SIZE ) - rsize =HID_MAX_BUFFER_SIZE ; +if (hid->ll_driver->max_buffer_size) + max_buffer_size = hid->ll_driver->max_buffer_size; + +if (report_enum->numbered && rsize >= max_buffer_size) + rsize = max_buffer_size -1 ; +else if (rsize > max_buffer_size) + rsize = max_buffer_size;if (csize < rsize) { dbg_hid("report %d is too short, (%d < %d)\n", report->id,
drivers/hid/uhid.c +1 -0
@@ -395,6 +395,7 @@ struct hid_ll_driver uhid_hid_driver = { .parse = uhid_hid_parse, .raw_request = uhid_hid_raw_request, .output_report = uhid_hid_output_report, + .max_buffer_size = UHID_DATA_MAX, };EXPORT_SYMBOL_GPL (uhid_hid_driver);
drivers/hwmon/adt7475.c +4 -4
@@ -484,10 +484,10 @@ static ssize_t temp_store(struct device *dev, struct device_attribute *attr, val = (temp - val) /1000 ;if (sattr->index !=1 ) { - data->temp[HYSTERSIS ][sattr->index] &=0xF0 ; + data->temp[HYSTERSIS ][sattr->index] &=0x0F ; data->temp[HYSTERSIS ][sattr->index] |= (val &0xF ) <<4 ; }else { - data->temp[HYSTERSIS ][sattr->index] &=0x0F ; + data->temp[HYSTERSIS ][sattr->index] &=0xF0 ; data->temp[HYSTERSIS ][sattr->index] |= (val &0xF ); }
@@ -552,11 +552,11 @@ static ssize_t temp_st_show(struct device *dev, struct device_attribute *attr, val = data->enh_acoustics[0 ] &0xf ;break ;case 1 : - val = (data->enh_acoustics[1 ] >>4 ) &0xf ; + val = data->enh_acoustics[1 ] &0xf ;break ;case 2 :default : - val = data->enh_acoustics[1 ] &0xf ; + val = (data->enh_acoustics[1 ] >>4 ) &0xf ;break ; }
drivers/hwmon/ina3221.c +1 -1
@@ -672,7 +672,7 @@ static int ina3221_probe_child_from_dt(struct device *dev,return ret; }else if (val >INA3221_CHANNEL3 ) {dev_err (dev,"invalid reg %d of %pOFn\n" , val, child); -return ret; +return -EINVAL ; } input = &ina->inputs[val];
drivers/hwmon/xgene-hwmon.c +1 -0
@@ -768,6 +768,7 @@ static int xgene_hwmon_remove(struct platform_device *pdev) {struct xgene_hwmon_dev *ctx =platform_get_drvdata (pdev); +cancel_work_sync (&ctx->workq);hwmon_device_unregister (ctx->hwmon_dev);kfifo_free (&ctx->async_msg_fifo);if (acpi_disabled)
drivers/interconnect/core.c +4 -0
@@ -612,6 +612,10 @@ void icc_node_destroy(int id)mutex_unlock (&icc_lock); +if (!node) +return ; + +kfree (node->links);kfree (node); }EXPORT_SYMBOL_GPL (icc_node_destroy);
drivers/media/i2c/m5mols/m5mols_core.c +1 -1
@@ -488,7 +488,7 @@ static enum m5mols_restype __find_restype(u32 code)do {if (code == m5mols_default_ffmt[type].code)return type; - }while (type++ !=SIZE_DEFAULT_FFMT ); + }while (++type !=SIZE_DEFAULT_FFMT );return 0 ; }
drivers/mmc/host/atmel-mci.c +0 -3
@@ -1812,7 +1812,6 @@ static void atmci_tasklet_func(unsigned long priv)atmci_writel (host,ATMCI_IER ,ATMCI_NOTBUSY ); state =STATE_WAITING_NOTBUSY ; }else if (host->mrq->stop) { -atmci_writel (host,ATMCI_IER ,ATMCI_CMDRDY );atmci_send_stop_cmd (host, data); state =STATE_SENDING_STOP ; }else {
@@ -1845,8 +1844,6 @@ static void atmci_tasklet_func(unsigned long priv)* command to send. */ if (host->mrq->stop) { -atmci_writel (host,ATMCI_IER , -ATMCI_CMDRDY );atmci_send_stop_cmd (host, data); state =STATE_SENDING_STOP ; }else {
drivers/net/ethernet/intel/i40e/i40e_main.c +1 -0
@@ -14823,6 +14823,7 @@ static int i40e_init_recovery_mode(struct i40e_pf *pf, struct i40e_hw *hw)int err;int v_idx; +pci_set_drvdata (pf->pdev, pf);pci_save_state (pf->pdev);/* set up periodic task facility */
drivers/net/ethernet/qlogic/qed/qed_dev.c +5 -0
@@ -5139,6 +5139,11 @@ static int qed_init_wfq_param(struct qed_hwfn *p_hwfn, num_vports = p_hwfn->qm_info.num_vports; +if (num_vports <2 ) { +DP_NOTICE (p_hwfn,"Unexpected num_vports: %d\n" , num_vports); +return -EINVAL ; + } +/* Accounting for the vports which are configured for WFQ explicitly */ for (i =0 ; i < num_vports; i++) {u32 tmp_speed;
drivers/net/ethernet/sun/ldmvsw.c +3 -0
@@ -290,6 +290,9 @@ static int vsw_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) hp =mdesc_grab (); +if (!hp) +return -ENODEV ; + rmac =mdesc_get_property (hp, vdev->mp, remote_macaddr_prop, &len); err = -ENODEV ;if (!rmac) {
drivers/net/ethernet/sun/sunvnet.c +3 -0
@@ -431,6 +431,9 @@ static int vnet_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) hp =mdesc_grab (); +if (!hp) +return -ENODEV ; + vp =vnet_find_parent (hp, vdev->mp, vdev);if (IS_ERR (vp)) {pr_err ("Cannot find port parent vnet\n" );
drivers/net/ipvlan/ipvlan_l3s.c +1 -0
@@ -101,6 +101,7 @@ static unsigned int ipvlan_nf_input(void *priv, struct sk_buff *skb, goto out; skb->dev = addr->master->dev; + skb->skb_iif = skb->dev->ifindex; len = skb->len +ETH_HLEN ;ipvlan_count_rx (addr->master, len, true, false); out:
drivers/net/phy/smsc.c +4 -1
@@ -108,8 +108,11 @@ static int lan911x_config_init(struct phy_device *phydev)static int lan87xx_read_status (struct phy_device *phydev) {struct smsc_phy_priv *priv = phydev->priv; +int err; -int err =genphy_read_status (phydev); + err =genphy_read_status (phydev); +if (err) +return err;if (!phydev->link && priv->energy_enable) {int i;
drivers/net/usb/smsc75xx.c +7 -0
@@ -2198,6 +2198,13 @@ static int smsc75xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) size = (rx_cmd_a &RX_CMD_A_LEN ) -RXW_PADDING ; align_count = (4 - ((size +RXW_PADDING ) %4 )) %4 ; +if (unlikely (size > skb->len)) { +netif_dbg (dev, rx_err, dev->net, +"size err rx_cmd_a=0x%08x\n" , + rx_cmd_a); +return 0 ; + } +if (unlikely (rx_cmd_a &RX_CMD_A_RED )) {netif_dbg (dev, rx_err, dev->net,"Error rx_cmd_a=0x%08x\n" , rx_cmd_a);
drivers/nfc/pn533/usb.c +1 -0
@@ -175,6 +175,7 @@ static int pn533_usb_send_frame(struct pn533 *dev,print_hex_dump_debug ("PN533 TX: " ,DUMP_PREFIX_NONE ,16 ,1 , out->data, out->len, false); + arg.phy = phy;init_completion (&arg.done); cntx = phy->out_urb->context; phy->out_urb->context = &arg;
drivers/nfc/st-nci/ndlc.c +4 -2
@@ -286,13 +286,15 @@ EXPORT_SYMBOL(ndlc_probe);void ndlc_remove (struct llt_ndlc *ndlc) { -st_nci_remove (ndlc->ndev); -/* cancel timers */ del_timer_sync (&ndlc->t1_timer);del_timer_sync (&ndlc->t2_timer); ndlc->t2_active = false; ndlc->t1_active = false; +/* cancel work */ +cancel_work_sync (&ndlc->sm_work); + +st_nci_remove (ndlc->ndev);skb_queue_purge (&ndlc->rcv_q);skb_queue_purge (&ndlc->send_q);
drivers/nvme/target/core.c +3 -1
@@ -728,8 +728,10 @@ static void __nvmet_req_complete(struct nvmet_req *req, u16 status)void nvmet_req_complete (struct nvmet_req *req,u16 status) { +struct nvmet_sq *sq = req->sq; +__nvmet_req_complete (req, status); -percpu_ref_put (&req->sq->ref); +percpu_ref_put (&sq->ref); }EXPORT_SYMBOL_GPL (nvmet_req_complete);
drivers/pci/pci-driver.c +2 -2
@@ -946,7 +946,7 @@ static int pci_pm_resume_noirq(struct device *dev)pcie_pme_root_status_cleanup (pci_dev);if (!skip_bus_pm && prev_state == PCI_D3cold) -pci_bridge_wait_for_secondary_bus (pci_dev); +pci_bridge_wait_for_secondary_bus (pci_dev,"resume" ,PCI_RESET_WAIT );if (pci_has_legacy_pm_support (pci_dev))return pci_legacy_resume_early (dev);
@@ -1355,7 +1355,7 @@ static int pci_pm_runtime_resume(struct device *dev)pci_fixup_device (pci_fixup_resume, pci_dev);if (prev_state == PCI_D3cold) -pci_bridge_wait_for_secondary_bus (pci_dev); +pci_bridge_wait_for_secondary_bus (pci_dev,"resume" ,PCI_RESET_WAIT );if (pm && pm->runtime_resume) rc = pm->runtime_resume (dev);
drivers/pci/pci.c +24 -30
137 lines not on this page · raw message
drivers/pci/pci.h +9 -1
@@ -47,6 +47,13 @@ int pci_bus_error_reset(struct pci_dev *dev);#define PCI_PM_D3COLD_WAIT 100#define PCI_PM_BUS_WAIT 50 +/* +* Following exit from Conventional Reset, devices must be ready within 1 sec +* (PCIe r6.0 sec 6.6.1). A D3cold to D0 transition implies a Conventional +* Reset (PCIe r6.0 sec 5.8). +*/ +#define PCI_RESET_WAIT 1000/* msec */ +/** * struct pci_platform_pm_ops - Firmware PM callbacks *
@@ -107,7 +114,8 @@ void pci_allocate_cap_save_buffers(struct pci_dev *dev);void pci_free_cap_save_buffers (struct pci_dev *dev);bool pci_bridge_d3_possible (struct pci_dev *dev);void pci_bridge_d3_update (struct pci_dev *dev); -void pci_bridge_wait_for_secondary_bus (struct pci_dev *dev); +int pci_bridge_wait_for_secondary_bus (struct pci_dev *dev,char *reset_type, +int timeout);static inline void pci_wakeup_event (struct pci_dev *dev) {
drivers/scsi/hosts.c +1 -4
@@ -319,10 +319,7 @@ static void scsi_host_dev_release(struct device *dev)struct Scsi_Host *shost =dev_to_shost (dev);struct device *parent = dev->parent; -/* In case scsi_remove_host() has not been called. */ -scsi_proc_hostdir_rm (shost->hostt); - -/* Wait for functions invoked through call_rcu(&shost->rcu, ...) */ +/* Wait for functions invoked through call_rcu(&scmd->rcu, ...) */ rcu_barrier ();if (shost->tmf_work_q)
drivers/scsi/mpt3sas/mpt3sas_transport.c +12 -2
@@ -670,7 +670,7 @@ mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle, goto out_fail; } port =sas_port_alloc_num (sas_node->parent_dev); -if ((sas_port_add (port))) { +if (!port || (sas_port_add (port))) {ioc_err (ioc,"failure at %s:%d/%s()!\n" , __FILE__, __LINE__, __func__); goto out_fail;
@@ -695,6 +695,12 @@ mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle, rphy =sas_expander_alloc (port, mpt3sas_port->remote_identify.device_type); +if (!rphy) { +ioc_err (ioc,"failure at %s:%d/%s()!\n" , + __FILE__, __LINE__, __func__); + goto out_delete_port; + } + rphy->identify = mpt3sas_port->remote_identify;if (mpt3sas_port->remote_identify.device_type ==SAS_END_DEVICE ) {
@@ -714,6 +720,7 @@ mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle, __FILE__, __LINE__, __func__);sas_rphy_free (rphy); rphy =NULL ; + goto out_delete_port; }if (mpt3sas_port->remote_identify.device_type ==SAS_END_DEVICE ) {
@@ -741,7 +748,10 @@ mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle, rphy_to_expander_device(rphy));return mpt3sas_port; - out_fail: +out_delete_port: +sas_port_delete (port); + +out_fail:list_for_each_entry_safe (mpt3sas_phy, next, &mpt3sas_port->phy_list, port_siblings)list_del (&mpt3sas_phy->port_siblings);
drivers/tty/serial/8250/8250_em.c +2 -2
@@ -102,8 +102,8 @@ static int serial8250_em_probe(struct platform_device *pdev)memset (&up,0 ,sizeof (up)); up.port.mapbase = regs->start; up.port.irq = irq->start; - up.port.type =PORT_UNKNOWN ; - up.port.flags =UPF_BOOT_AUTOCONF |UPF_FIXED_PORT |UPF_IOREMAP ; + up.port.type =PORT_16750 ; + up.port.flags =UPF_FIXED_PORT |UPF_IOREMAP |UPF_FIXED_TYPE ; up.port.dev = &pdev->dev; up.port.private_data = priv;
drivers/tty/serial/fsl_lpuart.c +9 -3
@@ -2002,9 +2002,15 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios,/* update the per-port timeout */ uart_update_timeout (port, termios->c_cflag, baud); -/* wait transmit engin complete */ -lpuart32_write (&sport->port,0 ,UARTMODIR ); -lpuart32_wait_bit_set (&sport->port,UARTSTAT ,UARTSTAT_TC ); +/* +* LPUART Transmission Complete Flag may never be set while queuing a break +* character, so skip waiting for transmission complete when UARTCTRL_SBK is +* asserted. +*/ +if (!(old_ctrl &UARTCTRL_SBK )) { +lpuart32_write (&sport->port,0 ,UARTMODIR ); +lpuart32_wait_bit_set (&sport->port,UARTSTAT ,UARTSTAT_TC ); + }/* disable transmit and receive */ lpuart32_write(&sport->port, old_ctrl & ~(UARTCTRL_TE | UARTCTRL_RE),
drivers/video/fbdev/stifb.c +27 -0
@@ -921,6 +921,28 @@ SETUP_HCRX(struct stifb_info *fb)/* ------------------- driver specific functions --------------------------- */ +static int +stifb_check_var (struct fb_var_screeninfo *var,struct fb_info *info) +{ + struct stifb_info *fb = container_of(info, struct stifb_info, info); + +if (var->xres != fb->info.var.xres || + var->yres != fb->info.var.yres || + var->bits_per_pixel != fb->info.var.bits_per_pixel) +return -EINVAL ; + + var->xres_virtual = var->xres; + var->yres_virtual = var->yres; + var->xoffset =0 ; + var->yoffset =0 ; + var->grayscale = fb->info.var.grayscale; + var->red.length = fb->info.var.red.length; + var->green.length = fb->info.var.green.length; + var->blue.length = fb->info.var.blue.length; + +return 0 ; +} +static int stifb_setcolreg (u_int regno,u_int red,u_int green,u_int blue,u_int transp,struct fb_info *info)
@@ -1103,6 +1125,7 @@ stifb_init_display(struct stifb_info *fb)static struct fb_ops stifb_ops = { .owner =THIS_MODULE , + .fb_check_var = stifb_check_var, .fb_setcolreg = stifb_setcolreg, .fb_blank = stifb_blank, .fb_fillrect = cfb_fillrect,
@@ -1122,6 +1145,7 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)struct stifb_info *fb;struct fb_info *info;unsigned long sti_rom_address; +char modestr[32 ];char *dev_name;int bpp, xres, yres;
@@ -1300,6 +1324,9 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref) info->flags =FBINFO_DEFAULT |FBINFO_HWACCEL_COPYAREA ; info->pseudo_palette = &fb->pseudo_palette; +scnprintf (modestr,sizeof (modestr),"%dx%d-%d" , xres, yres, bpp); +fb_find_mode (&info->var, info, modestr,NULL ,0 ,NULL , bpp); +/* This has to be done !!! */ if (fb_alloc_cmap (&info->cmap,NR_PALETTE ,0 )) goto out_err1;
fs/cifs/transport.c +9 -12
@@ -312,7 +312,7 @@ static int __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, struct smb_rqst *rqst) { - int rc = 0; + int rc;struct kvec *iov;int n_vec;unsigned int send_length =0 ;
@@ -324,6 +324,7 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,int val =1 ;__be32 rfc1002_marker; +cifs_in_send_inc (server);if (cifs_rdma_enabled (server)) {/* return -EAGAIN when connecting or reconnecting */ rc = -EAGAIN ;
@@ -332,14 +333,17 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, goto smbd_done; } + rc = -EAGAIN ;if (ssocket ==NULL ) -return -EAGAIN ; + goto out; + rc = -ERESTARTSYS ;if (fatal_signal_pending (current)) {cifs_dbg (FYI ,"signal pending before send request\n" ); -return -ERESTARTSYS ; + goto out; } + rc =0 ;/* cork the socket */ kernel_setsockopt (ssocket,SOL_TCP ,TCP_CORK , (char *)&val,sizeof (val));
@@ -453,7 +457,8 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, rc); else if (rc > 0) rc =0 ; - +out: +cifs_in_send_dec (server);return rc; }
@@ -830,9 +835,7 @@ cifs_call_async(struct TCP_Server_Info *server, struct smb_rqst *rqst,* I/O response may come back and free the mid entry on another thread. */ cifs_save_when_sent (mid); -cifs_in_send_inc (server); rc =smb_send_rqst (server,1 , rqst, flags); -cifs_in_send_dec (server);if (rc <0 ) {revert_current_mid (server, mid->credits);
@@ -1095,9 +1098,7 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,else midQ[i]->callback = cifs_compound_last_callback; } -cifs_in_send_inc (server); rc =smb_send_rqst (server, num_rqst, rqst, flags); -cifs_in_send_dec (server);for (i =0 ; i < num_rqst; i++)cifs_save_when_sent (midQ[i]);
@@ -1332,9 +1333,7 @@ SendReceive(const unsigned int xid, struct cifs_ses *ses, midQ->mid_state =MID_REQUEST_SUBMITTED ; -cifs_in_send_inc (server); rc =smb_send (server, in_buf, len); -cifs_in_send_dec (server);cifs_save_when_sent (midQ);if (rc <0 )
@@ -1471,9 +1470,7 @@ SendReceiveBlockingLock(const unsigned int xid, struct cifs_tcon *tcon, } midQ->mid_state =MID_REQUEST_SUBMITTED ; -cifs_in_send_inc (server); rc =smb_send (server, in_buf, len); -cifs_in_send_dec (server);cifs_save_when_sent (midQ);if (rc <0 )
fs/ext4/inode.c +8 -10
@@ -4944,13 +4944,6 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, goto bad_inode; raw_inode =ext4_raw_inode (&iloc); -if ((ino ==EXT4_ROOT_INO ) && (raw_inode->i_links_count ==0 )) { -ext4_error_inode (inode, function, line,0 , -"iget: root inode unallocated" ); - ret = -EFSCORRUPTED ; - goto bad_inode; - } -if ((flags &EXT4_IGET_HANDLE ) && (raw_inode->i_links_count ==0 ) && (raw_inode->i_mode ==0 )) { ret = -ESTALE ;
@@ -5021,11 +5014,16 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,* NeilBrown 1999oct15 */ if (inode->i_nlink ==0 ) { -if ((inode->i_mode ==0 || +if ((inode->i_mode ==0 || flags &EXT4_IGET_SPECIAL || !(EXT4_SB (inode->i_sb)->s_mount_state &EXT4_ORPHAN_FS )) && ino !=EXT4_BOOT_LOADER_INO ) { -/* this inode is deleted */ - ret = -ESTALE ; +/* this inode is deleted or unallocated */ +if (flags &EXT4_IGET_SPECIAL ) { +ext4_error_inode (inode, function, line,0 , +"iget: special inode unallocated" ); + ret = -EFSCORRUPTED ; + }else + ret = -ESTALE ; goto bad_inode; }/* The only unlinked inodes we let through here have
fs/ext4/namei.c +1 -3
@@ -3866,10 +3866,8 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, goto end_rename; } retval =ext4_rename_dir_prepare (handle, &old); -if (retval) { -inode_unlock (old.inode); +if (retval) goto end_rename; - } }/* * If we're renaming a file within an inline_data dir and adding or
fs/ext4/page-io.c +6 -4
@@ -380,7 +380,8 @@ static int io_submit_init_bio(struct ext4_io_submit *io,static int io_submit_add_bh (struct ext4_io_submit *io,struct inode *inode, -struct page *page, +struct page *pagecache_page, +struct page *bounce_page,struct buffer_head *bh) {int ret;
@@ -395,10 +396,11 @@ static int io_submit_add_bh(struct ext4_io_submit *io,return ret; io->io_bio->bi_write_hint = inode->i_write_hint; } - ret =bio_add_page (io->io_bio, page, bh->b_size,bh_offset (bh)); + ret =bio_add_page (io->io_bio, bounce_page ?: pagecache_page, + bh->b_size,bh_offset (bh));if (ret != bh->b_size) goto submit_and_retry; -wbc_account_cgroup_owner (io->io_wbc, page, bh->b_size); +wbc_account_cgroup_owner (io->io_wbc, pagecache_page, bh->b_size); io->io_next_block++;return 0 ; }
@@ -511,7 +513,7 @@ int ext4_bio_write_page(struct ext4_io_submit *io, do { if (!buffer_async_write(bh)) continue; - ret = io_submit_add_bh(io, inode, bounce_page ?: page, bh); + ret = io_submit_add_bh(io, inode, page, bounce_page, bh); if (ret) { /* * We only get here on ENOMEM. Not much else
fs/ext4/xattr.c +11 -0
@@ -384,6 +384,17 @@ static int ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino,struct inode *inode;int err; +/* +* We have to check for this corruption early as otherwise +* iget_locked() could wait indefinitely for the state of our +* parent inode. +*/ +if (parent->i_ino == ea_ino) { +ext4_error (parent->i_sb, +"Parent and EA inode have the same ino %lu" , ea_ino); +return -EFSCORRUPTED ; + } + inode =ext4_iget (parent->i_sb, ea_ino,EXT4_IGET_NORMAL );if (IS_ERR (inode)) { err =PTR_ERR (inode);
fs/jffs2/file.c +7 -8
@@ -137,19 +137,18 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping,struct jffs2_inode_info *f =JFFS2_INODE_INFO (inode);struct jffs2_sb_info *c =JFFS2_SB_INFO (inode->i_sb);pgoff_t index = pos >>PAGE_SHIFT ; -uint32_t pageofs = index <<PAGE_SHIFT ;int ret =0 ;jffs2_dbg (1 ,"%s()\n" , __func__); -if (pageofs > inode->i_size) { -/* Make new hole frag from old EOF to new page */ +if (pos > inode->i_size) { +/* Make new hole frag from old EOF to new position */ struct jffs2_raw_inode ri;struct jffs2_full_dnode *fn;uint32_t alloc_len; -jffs2_dbg (1 ,"Writing new hole frag 0x%x-0x%x between current EOF and new page\n" , - (unsigned int )inode->i_size, pageofs); +jffs2_dbg (1 ,"Writing new hole frag 0x%x-0x%x between current EOF and new position\n" , + (unsigned int )inode->i_size, (uint32_t )pos); ret =jffs2_reserve_space (c,sizeof (ri), &alloc_len,ALLOC_NORMAL ,JFFS2_SUMMARY_INODE_SIZE );
@@ -169,10 +168,10 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, ri.mode =cpu_to_jemode (inode->i_mode); ri.uid =cpu_to_je16 (i_uid_read (inode)); ri.gid =cpu_to_je16 (i_gid_read (inode)); - ri.isize =cpu_to_je32 (max ((uint32_t )inode->i_size, pageofs)); + ri.isize =cpu_to_je32 ((uint32_t )pos); ri.atime = ri.ctime = ri.mtime =cpu_to_je32 (JFFS2_NOW ()); ri.offset =cpu_to_je32 (inode->i_size); - ri.dsize =cpu_to_je32 (pageofs - inode->i_size); + ri.dsize =cpu_to_je32 ((uint32_t )pos - inode->i_size); ri.csize =cpu_to_je32 (0 ); ri.compr =JFFS2_COMPR_ZERO ; ri.node_crc =cpu_to_je32 (crc32 (0 , &ri,sizeof (ri)-8 ));
@@ -202,7 +201,7 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, goto out_err; }jffs2_complete_reservation (c); - inode->i_size = pageofs; + inode->i_size = pos;mutex_unlock (&f->sem); }
include/linux/hid.h +3 -0
@@ -796,6 +796,7 @@ struct hid_driver {* @raw_request: send raw report request to device (e.g. feature report) * @output_report: send output report to device * @idle: send idle request to device +* @max_buffer_size: over-ride maximum data buffer size (default: HID_MAX_BUFFER_SIZE) */ struct hid_ll_driver {int (*start)(struct hid_device *hdev);
@@ -820,6 +821,8 @@ struct hid_ll_driver {int (*output_report) (struct hid_device *hdev,__u8 *buf,size_t len);int (*idle)(struct hid_device *hdev,int report,int idle,int reqtype); + +unsigned int max_buffer_size; };extern struct hid_ll_driver i2c_hid_ll_driver;
include/linux/netdevice.h +4 -2
@@ -265,9 +265,11 @@ struct hh_cache {* relationship HH alignment <= LL alignment. */ #define LL_RESERVED_SPACE (dev) \ - ((((dev)->hard_header_len+(dev)->needed_headroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) + ((((dev)->hard_header_len + READ_ONCE((dev)->needed_headroom)) \ + & ~(HH_DATA_MOD - 1)) + HH_DATA_MOD)#define LL_RESERVED_SPACE_EXTRA (dev,extra) \ - ((((dev)->hard_header_len+(dev)->needed_headroom+(extra))&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) + ((((dev)->hard_header_len + READ_ONCE((dev)->needed_headroom) + (extra)) \ + & ~(HH_DATA_MOD - 1)) + HH_DATA_MOD)struct header_ops { int (*create) (struct sk_buff *skb, struct net_device *dev,
include/linux/sh_intc.h +4 -1
@@ -97,7 +97,10 @@ struct intc_hw_desc {unsigned int nr_subgroups; }; -#define _INTC_ARRAY (a) a, __same_type(a, NULL) ? 0 : sizeof(a)/sizeof(*a) +#define _INTC_SIZEOF_OR_ZERO (a) (_Generic(a, \ + typeof(NULL): 0, \ + default: sizeof(a))) +#define _INTC_ARRAY (a) a, _INTC_SIZEOF_OR_ZERO(a)/sizeof(*a)#define INTC_HW_DESC (vectors, groups, mask_regs, \ prio_regs, sense_regs, ack_regs) \
include/linux/tracepoint.h +6 -9
@@ -231,12 +231,11 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)* not add unwanted padding between the beginning of the section and the * structure. Force alignment to the same alignment as the section start. * -* When lockdep is enabled, we make sure to always do the RCU portions of -* the tracepoint code, regardless of whether tracing is on. However, -* don't check if the condition is false, due to interaction with idle -* instrumentation. This lets us find RCU issues triggered with tracepoints -* even when this tracepoint is off. This code has no purpose other than -* poking RCU a bit. +* When lockdep is enabled, we make sure to always test if RCU is +* "watching" regardless if the tracepoint is enabled or not. Tracepoints +* require RCU to be active, and it should always warn at the tracepoint +* site if it is not watching, as it will need to be active when the +* tracepoint is enabled. */ #define __DECLARE_TRACE (name, proto, args, cond, data_proto, data_args) \ extern struct tracepoint __tracepoint_##name; \
@@ -248,9 +247,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)TP_ARGS (data_args), \ TP_CONDITION(cond), 0); \if (IS_ENABLED (CONFIG_LOCKDEP ) && (cond)) { \ -rcu_read_lock_sched_notrace (); \ - rcu_dereference_sched(__tracepoint_##name.funcs);\ - rcu_read_unlock_sched_notrace(); \ +WARN_ON_ONCE (!rcu_is_watching ()); \ } \ } \ __DECLARE_TRACE_RCU(name, PARAMS(proto), PARAMS(args), \
kernel/trace/ftrace.c +2 -1
@@ -1557,7 +1557,8 @@ unsigned long ftrace_location_range(unsigned long start, unsigned long end) key.flags = end;/* overload flags, as it is unsigned long */ for (pg = ftrace_pages_start; pg; pg = pg->next) { -if (end < pg->records[0 ].ip || +if (pg->index ==0 || + end < pg->records[0 ].ip || start >= (pg->records[pg->index -1 ].ip +MCOUNT_INSN_SIZE ))continue ; rec = bsearch(&key, pg->records, pg->index,
kernel/trace/trace_events_hist.c +3 -0
@@ -1996,6 +1996,9 @@ static const char *hist_field_name(struct hist_field *field, {const char *field_name ="" ; +if (WARN_ON_ONCE (!field)) +return field_name; +if (level >1 )return field_name;
net/ipv4/fib_frontend.c +3 -0
@@ -583,6 +583,9 @@ static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt, cfg->fc_scope =RT_SCOPE_UNIVERSE ; } +if (!cfg->fc_table) + cfg->fc_table =RT_TABLE_MAIN ; +if (cmd ==SIOCDELRT )return 0 ;
net/ipv4/ip_tunnel.c +6 -6
@@ -620,10 +620,10 @@ void ip_md_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, } headroom +=LL_RESERVED_SPACE (rt->dst.dev) + rt->dst.header_len; -if (headroom > dev->needed_headroom) - dev->needed_headroom = headroom; +if (headroom >READ_ONCE (dev->needed_headroom)) +WRITE_ONCE (dev->needed_headroom, headroom); -if (skb_cow_head (skb, dev->needed_headroom)) { +if (skb_cow_head (skb,READ_ONCE (dev->needed_headroom))) {ip_rt_put (rt); goto tx_dropped; }
@@ -804,10 +804,10 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, max_headroom =LL_RESERVED_SPACE (rt->dst.dev) +sizeof (struct iphdr ) + rt->dst.header_len +ip_encap_hlen (&tunnel->encap); -if (max_headroom > dev->needed_headroom) - dev->needed_headroom = max_headroom; +if (max_headroom >READ_ONCE (dev->needed_headroom)) +WRITE_ONCE (dev->needed_headroom, max_headroom); -if (skb_cow_head (skb, dev->needed_headroom)) { +if (skb_cow_head (skb,READ_ONCE (dev->needed_headroom))) {ip_rt_put (rt); dev->stats.tx_dropped++;kfree_skb (skb);
net/ipv4/tcp_output.c +1 -1
@@ -3374,7 +3374,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst, th->window =htons (min (req->rsk_rcv_wnd,65535U ));tcp_options_write ((__be32 *)(th +1 ),NULL , &opts); th->doff = (tcp_header_size >>2 ); -__TCP_INC_STATS (sock_net (sk),TCP_MIB_OUTSEGS ); +TCP_INC_STATS (sock_net (sk),TCP_MIB_OUTSEGS );#ifdef CONFIG_TCP_MD5SIG /* Okay, we have all we need - do the md5 hash if needed */
net/ipv6/ip6_tunnel.c +2 -2
@@ -1201,8 +1201,8 @@ int ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev, __u8 dsfield,*/ max_headroom =LL_RESERVED_SPACE (dst->dev) +sizeof (struct ipv6hdr ) + dst->header_len + t->hlen; -if (max_headroom > dev->needed_headroom) - dev->needed_headroom = max_headroom; +if (max_headroom >READ_ONCE (dev->needed_headroom)) +WRITE_ONCE (dev->needed_headroom, max_headroom); err =ip6_tnl_encap (skb, t, &proto, fl6);if (err)
net/iucv/iucv.c +1 -1
@@ -106,7 +106,7 @@ struct iucv_irq_data {u16 ippathid;u8 ipflags1;u8 iptype; -u32 res2[8 ]; +u32 res2[9 ]; };struct iucv_irq_list {
net/netfilter/nft_redir.c +1 -1
@@ -236,7 +236,7 @@ static struct nft_expr_type nft_redir_inet_type __read_mostly = { .name = "redir", .ops = &nft_redir_inet_ops, .policy = nft_redir_policy, - .maxattr = NFTA_MASQ_MAX, + .maxattr = NFTA_REDIR_MAX, .owner = THIS_MODULE, };
net/xfrm/xfrm_state.c +0 -3
@@ -2511,9 +2511,6 @@ int __xfrm_init_state(struct xfrm_state *x, bool init_replay, bool offload)if (inner_mode ==NULL ) goto error; -if (!(inner_mode->flags &XFRM_MODE_FLAG_TUNNEL )) - goto error; - x->inner_mode = *inner_mode;if (x->props.family ==AF_INET )
sound/pci/hda/hda_intel.c +20 -2
@@ -363,10 +363,15 @@ enum {#define needs_eld_notify_link (chip) false#endif -#define CONTROLLER_IN_GPU (pci) (((pci)->device == 0x0a0c) || \ +#define CONTROLLER_IN_GPU (pci) (((pci)->vendor == 0x8086) && \ + (((pci)->device == 0x0a0c) || \ ((pci)->device == 0x0c0c) || \ ((pci)->device == 0x0d0c) || \ - ((pci)->device == 0x160c)) + ((pci)->device == 0x160c) || \ + ((pci)->device == 0x490d) || \ + ((pci)->device == 0x4f90) || \ + ((pci)->device == 0x4f91) || \ + ((pci)->device == 0x4f92)))#define IS_BXT (pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)#define IS_CFL (pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348)
@@ -2501,6 +2506,19 @@ static const struct pci_device_id azx_ids[] = {/* Tigerlake-H */ { PCI_DEVICE(0x8086, 0x43c8), .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, + /* DG1 */ + { PCI_DEVICE(0x8086, 0x490d), + .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, + /* DG2 */ + { PCI_DEVICE(0x8086, 0x4f90), + .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, + { PCI_DEVICE(0x8086, 0x4f91), + .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, + { PCI_DEVICE(0x8086, 0x4f92), + .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, + /* Alderlake-S */ + { PCI_DEVICE(0x8086, 0x7ad0), + .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, /* Elkhart Lake */ { PCI_DEVICE(0x8086, 0x4b55), .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
sound/pci/hda/patch_hdmi.c +3 -0
@@ -4220,7 +4220,10 @@ HDA_CODEC_ENTRY(0x8086280c, "Cannonlake HDMI", patch_i915_glk_hdmi),HDA_CODEC_ENTRY (0x8086280d ,"Geminilake HDMI" , patch_i915_glk_hdmi),HDA_CODEC_ENTRY (0x8086280f ,"Icelake HDMI" , patch_i915_icl_hdmi),HDA_CODEC_ENTRY (0x80862812 ,"Tigerlake HDMI" , patch_i915_tgl_hdmi), +HDA_CODEC_ENTRY (0x80862814 ,"DG1 HDMI" , patch_i915_tgl_hdmi), +HDA_CODEC_ENTRY (0x80862815 ,"Alderlake HDMI" , patch_i915_tgl_hdmi),HDA_CODEC_ENTRY (0x80862816 ,"Rocketlake HDMI" , patch_i915_tgl_hdmi), +HDA_CODEC_ENTRY (0x80862819 ,"DG2 HDMI" , patch_i915_tgl_hdmi),HDA_CODEC_ENTRY (0x8086281a ,"Jasperlake HDMI" , patch_i915_icl_hdmi),HDA_CODEC_ENTRY (0x80862880 ,"CedarTrail HDMI" , patch_generic_hdmi), HDA_CODEC_ENTRY(0x80862882, "Valleyview2 HDMI", patch_i915_byt_hdmi),