Linux 5.4.112
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.112 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/devicetree/bindings/net/ethernet-controller.yaml | 2 Makefile | 2 arch/arm/boot/dts/armada-385-turris-omnia.dts | 1 arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi | 2 arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h | 2 arch/arm64/boot/dts/freescale/imx8mq-pinfunc.h | 2 arch/ia64/include/asm/ptrace.h | 8 arch/nds32/mm/cacheflush.c | 2 arch/parisc/include/asm/cmpxchg.h | 2 arch/s390/kernel/cpcmd.c | 6 drivers/char/agp/Kconfig | 2 drivers/clk/clk.c | 47 - drivers/clk/socfpga/clk-gate.c | 2 drivers/counter/stm32-timer-cnt.c | 12 drivers/gpu/drm/i915/display/intel_acpi.c | 22 drivers/gpu/drm/msm/msm_drv.c | 1 drivers/i2c/i2c-core-base.c | 7 drivers/infiniband/core/addr.c | 4 drivers/infiniband/hw/cxgb4/cm.c | 3 drivers/net/can/usb/peak_usb/pcan_usb_core.c | 6 drivers/net/dsa/lantiq_gswip.c | 196 ++++ drivers/net/ethernet/amd/xgbe/xgbe.h | 6 drivers/net/ethernet/cadence/macb_main.c | 7 drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c | 23 drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 3 drivers/net/ethernet/freescale/gianfar.c | 6 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 4 drivers/net/ethernet/intel/i40e/i40e.h | 1 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 53 + drivers/net/ethernet/intel/i40e/i40e_main.c | 11 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 9 drivers/net/ethernet/intel/ice/ice_controlq.h | 4 drivers/net/ethernet/intel/ice/ice_switch.c | 15 drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 22 drivers/net/ethernet/mellanox/mlx5/core/eq.c | 13 drivers/net/ethernet/netronome/nfp/bpf/cmsg.c | 1 drivers/net/ethernet/netronome/nfp/flower/main.h | 8 drivers/net/ethernet/netronome/nfp/flower/metadata.c | 16 drivers/net/ethernet/netronome/nfp/flower/offload.c | 48 + drivers/net/ieee802154/atusb.c | 1 drivers/net/phy/bcm-phy-lib.c | 13 drivers/net/tun.c | 48 + drivers/net/usb/hso.c | 33 drivers/net/virtio_net.c | 52 - drivers/ras/cec.c | 15 drivers/regulator/bd9571mwv-regulator.c | 4 drivers/scsi/ufs/ufshcd.c | 398 +++++----- drivers/scsi/ufs/ufshcd.h | 18 drivers/scsi/ufs/ufshci.h | 2 drivers/soc/fsl/qbman/qman.c | 2 drivers/usb/usbip/stub_dev.c | 11 drivers/usb/usbip/usbip_common.h | 3 drivers/usb/usbip/usbip_event.c | 2 drivers/usb/usbip/vhci_hcd.c | 1 drivers/usb/usbip/vhci_sysfs.c | 30 drivers/usb/usbip/vudc_dev.c | 1 drivers/usb/usbip/vudc_sysfs.c | 5 drivers/xen/events/events_base.c | 10 drivers/xen/events/events_internal.h | 2 fs/cifs/connect.c | 1 fs/direct-io.c | 5 fs/hostfs/hostfs_kern.c | 19 fs/ocfs2/aops.c | 11 fs/ocfs2/file.c | 8 include/linux/mlx5/mlx5_ifc.h | 8 include/linux/skmsg.h | 8 include/linux/virtio_net.h | 2 include/net/netns/xfrm.h | 4 include/net/red.h | 4 include/net/sock.h | 9 include/net/xfrm.h | 2 kernel/gcov/clang.c | 29 kernel/workqueue.c | 2 net/batman-adv/translation-table.c | 2 net/can/bcm.c | 10 net/can/raw.c | 14 net/core/sock.c | 12 net/hsr/hsr_device.c | 1 net/hsr/hsr_forward.c | 6 net/ieee802154/nl-mac.c | 7 net/ieee802154/nl802154.c | 23 net/ipv4/esp4_offload.c | 6 net/ipv4/udp.c | 4 net/ipv6/esp6_offload.c | 6 net/ipv6/raw.c | 2 net/ipv6/route.c | 8 net/mac80211/tx.c | 2 net/mac802154/llsec.c | 2 net/ncsi/ncsi-manage.c | 20 net/nfc/llcp_sock.c | 10 net/openvswitch/conntrack.c | 14 net/rds/message.c | 3 net/sched/act_api.c | 3 net/sched/sch_teql.c | 3 net/sctp/ipv6.c | 7 net/tipc/socket.c | 2 net/wireless/sme.c | 2 net/xfrm/xfrm_interface.c | 3 net/xfrm/xfrm_state.c | 10 sound/drivers/aloop.c | 11 sound/pci/hda/patch_realtek.c | 16 sound/soc/codecs/wm8960.c | 8 sound/soc/intel/atom/sst-mfld-platform-pcm.c | 6 sound/soc/sof/intel/hda-dsp.c | 15 sound/soc/sunxi/sun4i-codec.c | 5 tools/perf/builtin-inject.c | 2 106 files changed, 1087 insertions(+), 502 deletions(-)
Adrian Hunter (1):
perf inject: Fix repipe usage
Ahmed S. Darwish (1):
net: xfrm: Localize sequence counter per network namespace
Al Viro (1):
hostfs: fix memory handling in follow_link()
Alexander Aring (8):
net: ieee802154: nl-mac: fix check on panid
net: ieee802154: fix nl802154 del llsec key
net: ieee802154: fix nl802154 del llsec dev
net: ieee802154: fix nl802154 add llsec key
net: ieee802154: fix nl802154 del llsec devkey
net: ieee802154: forbid monitor for set llsec params
net: ieee802154: forbid monitor for del llsec seclevel
net: ieee802154: stop dump llsec params for monitors
Alexander Gordeev (1):
s390/cpcmd: fix inline assembly register clobbering
Andy Shevchenko (1):
hostfs: Use kasprintf() instead of fixed buffer formatting
Anirudh Rayabharam (1):
net: hso: fix null-ptr-deref during tty device unregistration
Arkadiusz Kubalewski (2):
i40e: Fix sparse warning: missing error code 'err'
i40e: Fix sparse error: 'vsi->netdev' could be null
Arnd Bergmann (1):
soc/fsl: qbman: fix conflicting alignment attributes
Aya Levin (2):
net/mlx5e: Fix ethtool indication of connector type net/mlx5: Fix PBMC register mapping
Bart Van Assche (2):
scsi: ufs: Avoid busy-waiting by eliminating tag conflicts
scsi: ufs: Use blk_{get,put}_request() to allocate and free TMFs
Bastian Germann (1):
ASoC: sunxi: sun4i-codec: fill ASoC card owner
Can Guo (2):
scsi: ufs: core: Fix task management request completion timeout
scsi: ufs: core: Fix wrong Task Tag used in task management request UPIUs
Claudiu Beznea (1):
net: macb: restore cmp registers on resume path
Claudiu Manoil (1):
gianfar: Handle error code at MAC address change
Daniel Jurgens (1):
net/mlx5: Don't request more than supported EQs
Du Cheng (1):
cfg80211: remove WARN_ON() in cfg80211_sme_connect
Eric Dumazet (2):
net: ensure mac header is set in virtio_net_hdr_to_skb()
sch_red: fix off-by-one checks in red_check_params()
Eryk Rybak (2):
i40e: Fix kernel oops when i40e driver removes VF's
i40e: Fix display statistics for veb_tc
Eyal Birger (1):
xfrm: interface: fix ipv4 pmtu check to honor ip header df
Fabio Pricoco (1):
ice: Increase control queue timeout
Fabrice Gasnier (1):
counter: stm32-timer-cnt: fix ceiling miss-alignment with reload register
Florian Fainelli (1):
net: phy: broadcom: Only advertise EEE for supported modes
Gao Xiang (1):
parisc: avoid a warning on u8 cast for cmpxchg on u8 pointers
Geert Uytterhoeven (1):
regulator: bd9571mwv: Fix AVS and DVFS voltage range
Greg Kroah-Hartman (2):
Revert "cifs: Set CIFS_MOUNT_USE_PREFIX_PATH flag on setting cifs_sb->prepath."
Linux 5.4.112Guangbin Huang (1):
net: hns3: clear VF down state bit before request link status
Guennadi Liakhovetski (1):
ASoC: SOF: Intel: HDA: fix core status verification
Hans de Goede (1):
ASoC: intel: atom: Stop advertising non working S24LE support
Helge Deller (1):
parisc: parisc-agp requires SBA IOMMU driver
Ilya Maximets (1):
openvswitch: fix send of uninitialized stack memory in ct limit reply
Jacek Bułatek (1):
ice: Fix for dereference of NULL pointer
Jack Qiu (1):
fs: direct-io: fix missing sdio->boundary
Johannes Berg (1):
mac80211: fix TXQ AC confusion
John Fastabend (1):
bpf, sockmap: Fix sk->prot unhash op reset
Jonas Holmberg (1):
ALSA: aloop: Fix initialization of controls
Krzysztof Kozlowski (1):
clk: socfpga: fix iomem pointer cast on 64-bit
Kumar Kartikeya Dwivedi (1):
net: sched: bump refcount for new action in ACT replace mode
Kurt Kanzenbach (1):
net: hsr: Reset MAC header for Tx path
Leon Romanovsky (1):
RDMA/addr: Be strict with gid size
Luca Fancellu (1):
xen/evtchn: Change irq_info lock to raw_spinlock_t
Lukasz Bartosik (2):
clk: fix invalid usage of list cursor in register
clk: fix invalid usage of list cursor in unregister
Lv Yunlong (3):
ethernet/netronome/nfp: Fix a use after free in nfp_bpf_ctrl_msg_rx net:tipc: Fix a double free in tipc_sk_mcast_rcv net/rds: Fix a use after free in rds_message_map_pages
Maciej Żenczykowski (1):
net-ipv6: bugfix - raw & sctp - switch to ipv6_can_nonlocal_bind()
Marek Behún (1):
ARM: dts: turris-omnia: configure LED[2]/INTn pin as interrupt pin
Martin Blumenstingl (3):
net: dsa: lantiq_gswip: Let GSWIP automatically set the xMII clock
net: dsa: lantiq_gswip: Don't use PHY auto polling
net: dsa: lantiq_gswip: Configure all remaining GSWIP_MII_CFG bits
Mateusz Palczewski (1):
i40e: Added Asym_Pause to supported link modes
Mike Rapoport (1):
nds32: flush_dcache_page: use page_mapping_file to avoid races with swapoff
Milton Miller (1):
net/ncsi: Avoid channel_monitor hrtimer deadlock
Muhammad Usama Anjum (1):
net: ipv6: check for validity before dereferencing cfg->fc_nlinfo.nlh
Nick Desaulniers (1):
gcov: re-fix clang-11+ support
Norman Maurer (1):
net: udp: Add support for getsockopt(..., ..., UDP_GRO, ..., ...);
Oliver Hartkopp (1):
can: bcm/raw: fix msg_namelen values depending on CAN_REQUIRED_SIZE
Oliver Stäbler (1):
arm64: dts: imx8mm/q: Fix pad control of SD1_DATA0
Paolo Abeni (1):
net: let skb_orphan_partial wake-up waiters.
Pavel Skripkin (3):
drivers: net: fix memory leak in atusb_probe
drivers: net: fix memory leak in peak_usb_create_dev
net: mac802154: Fix general protection fault
Pavel Tikhomirov (1):
net: sched: sch_teql: fix null-pointer dereference
Payal Kshirsagar (1):
ASoC: SOF: Intel: hda: remove unnecessary parentheses
Phillip Potter (1):
net: tun: set tun->dev->addr_len during TUNSETLINK processing
Potnuri Bharat Teja (1):
RDMA/cxgb4: check for ipv6 address properly while destroying listener
Raed Salem (1):
net/mlx5: Fix placement of log_max_flow_counter
Rafał Miłecki (1):
dt-bindings: net: ethernet-controller: fix typo in NVMEM
Rahul Lakkireddy (1):
cxgb4: avoid collecting SGE_QBASE regs during traffic
Robert Malz (1):
ice: Cleanup fltr list in case of allocation issues
Sergei Trofimovich (1):
ia64: fix user_stack_pointer() for ptrace()
Shengjiu Wang (1):
ASoC: wm8960: Fix wrong bclk and lrclk with pll enabled for some chips
Shuah Khan (4):
usbip: add sysfs_lock to synchronize sysfs code paths
usbip: stub-dev synchronize sysfs code paths
usbip: vudc synchronize sysfs code paths
usbip: synchronize event handler with sysfs code paths
Shyam Sundar S K (1):
amd-xgbe: Update DMA coherency values
Stefan Riedmueller (1):
ARM: dts: imx6: pbab01: Set vmmc supply for both SD interfaces
Steffen Klassert (1):
xfrm: Fix NULL pointer dereference on policy lookup
Stephen Boyd (1):
drm/msm: Set drvdata to NULL when msm_drm_init() fails
Takashi Iwai (2):
ALSA: hda/realtek: Fix speaker amp setup on Acer Aspire E1 drm/i915: Fix invalid access to ACPI _DSM objects
Tetsuo Handa (1):
batman-adv: initialize "struct batadv_tvlv_tt_vlan_data"->reserved field
Venkat Gopalakrishnan (1):
scsi: ufs: Fix irq return code
Wengang Wang (1):
ocfs2: fix deadlock between setattr and dio_end_io_write
William Roche (1):
RAS/CEC: Correct ce_add_elem()'s returned values
Wolfram Sang (1):
i2c: turn recovery error on init to debug
Xiaoming Ni (4):
nfc: fix refcount leak in llcp_sock_bind()
nfc: fix refcount leak in llcp_sock_connect()
nfc: fix memory leak in llcp_sock_connect()
nfc: Avoid endless loops caused by repeated llcp_sock_connect()
Xin Long (1):
esp: delete NETIF_F_SCTP_CRC bit from features for esp offload
Yinjun Zhang (1):
nfp: flower: ignore duplicate merge hints from FW
Yuya Kusakabe (1):
virtio_net: Add XDP meta data support
Zheng Yongjun (1):
net: openvswitch: conntrack: simplify the return expression of ovs_ct_limit_get_default_limit()
Zqiang (1):
workqueue: Move the position of debug_work_activate() in __queue_work()
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/net/ethernet-controller.yaml +1 -1
@@ -51,7 +51,7 @@ properties: description: Reference to an nvmem node for the MAC address - nvmem-cells-names: + nvmem-cell-names: const: mac-address phy-connection-type:
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 111 +SUBLEVEL = 112 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/boot/dts/armada-385-turris-omnia.dts +1 -0
@@ -236,6 +236,7 @@ status = "okay"; compatible = "ethernet-phy-id0141.0DD1", "ethernet-phy-ieee802.3-c22"; reg = <1>; + marvell,reg-init = <3 18 0 0x4985>; /* irq is connected to &pcawan pin 7 */ };
arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi +2 -0
@@ -432,6 +432,7 @@ pinctrl-0 = <&pinctrl_usdhc2>; cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; + vmmc-supply = <&vdd_sd1_reg>; status = "disabled"; };
@@ -441,5 +442,6 @@ &pinctrl_usdhc3_cdwp>; cd-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>; wp-gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; + vmmc-supply = <&vdd_sd0_reg>; status = "disabled"; };
arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h +1 -1
@@ -124,7 +124,7 @@#define MX8MM_IOMUXC_SD1_CMD_USDHC1_CMD 0x0A4 0x30C 0x000 0x0 0x0#define MX8MM_IOMUXC_SD1_CMD_GPIO2_IO1 0x0A4 0x30C 0x000 0x5 0x0#define MX8MM_IOMUXC_SD1_DATA0_USDHC1_DATA0 0x0A8 0x310 0x000 0x0 0x0 -#define MX8MM_IOMUXC_SD1_DATA0_GPIO2_IO2 0x0A8 0x31 0x000 0x5 0x0 +#define MX8MM_IOMUXC_SD1_DATA0_GPIO2_IO2 0x0A8 0x310 0x000 0x5 0x0#define MX8MM_IOMUXC_SD1_DATA1_USDHC1_DATA1 0x0AC 0x314 0x000 0x0 0x0#define MX8MM_IOMUXC_SD1_DATA1_GPIO2_IO3 0x0AC 0x314 0x000 0x5 0x0#define MX8MM_IOMUXC_SD1_DATA2_USDHC1_DATA2 0x0B0 0x318 0x000 0x0 0x0
arch/arm64/boot/dts/freescale/imx8mq-pinfunc.h +1 -1
@@ -130,7 +130,7 @@#define MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0x0A4 0x30C 0x000 0x0 0x0#define MX8MQ_IOMUXC_SD1_CMD_GPIO2_IO1 0x0A4 0x30C 0x000 0x5 0x0#define MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0x0A8 0x310 0x000 0x0 0x0 -#define MX8MQ_IOMUXC_SD1_DATA0_GPIO2_IO2 0x0A8 0x31 0x000 0x5 0x0 +#define MX8MQ_IOMUXC_SD1_DATA0_GPIO2_IO2 0x0A8 0x310 0x000 0x5 0x0#define MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0x0AC 0x314 0x000 0x0 0x0#define MX8MQ_IOMUXC_SD1_DATA1_GPIO2_IO3 0x0AC 0x314 0x000 0x5 0x0#define MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0x0B0 0x318 0x000 0x0 0x0
arch/ia64/include/asm/ptrace.h +1 -7
@@ -54,8 +54,7 @@static inline unsigned long user_stack_pointer (struct pt_regs *regs) { -/* FIXME: should this be bspstore + nr_dirty regs? */ -return regs->ar_bspstore; +return regs->r12; }static inline int is_syscall_success (struct pt_regs *regs)
@@ -79,11 +78,6 @@ static inline long regs_return_value(struct pt_regs *regs)unsigned long __ip =instruction_pointer (regs); \ (__ip & ~3UL ) + ((__ip &3UL ) <<2 ); \ }) -/* -* Why not default? Because user_stack_pointer() on ia64 gives register -* stack backing store instead... -*/ -#define current_user_stack_pointer () (current_pt_regs()->r12)/* given a pointer to a task_struct, return the user's pt_regs */ # define task_pt_regs (t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
arch/nds32/mm/cacheflush.c +1 -1
@@ -239,7 +239,7 @@ void flush_dcache_page(struct page *page) {struct address_space *mapping; - mapping =page_mapping (page); + mapping =page_mapping_file (page);if (mapping && !mapping_mapped (mapping))set_bit (PG_dcache_dirty, &page->flags);else {
arch/parisc/include/asm/cmpxchg.h +1 -1
@@ -72,7 +72,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)#endif case 4 :return __cmpxchg_u32 ((unsigned int *)ptr, (unsigned int )old, (unsigned int )new_); -case 1 :return __cmpxchg_u8 ((u8 *)ptr, (u8 )old, (u8 )new_); +case 1 :return __cmpxchg_u8 ((u8 *)ptr, old &0xff , new_ &0xff ); }__cmpxchg_called_with_bad_pointer ();return old;
arch/s390/kernel/cpcmd.c +4 -2
@@ -37,10 +37,12 @@ static int diag8_noresponse(int cmdlen)static int diag8_response (int cmdlen,char *response,int *rlen) { +unsigned long _cmdlen = cmdlen |0x40000000L ; +unsigned long _rlen = *rlen; register unsigned long reg2 asm ("2") = (addr_t) cpcmd_buf; register unsigned long reg3 asm ("3") = (addr_t) response; - register unsigned long reg4 asm ("4") = cmdlen | 0x40000000L; - register unsigned long reg5 asm ("5") = *rlen; + register unsigned long reg4 asm ("4") = _cmdlen; + register unsigned long reg5 asm ("5") = _rlen; asmvolatile ( " diag %2,%0,0x8\n"
drivers/char/agp/Kconfig +1 -1
@@ -125,7 +125,7 @@ config AGP_HP_ZX1 config AGP_PARISC tristate "HP Quicksilver AGP support" - depends on AGP && PARISC && 64BIT + depends on AGP && PARISC && 64BIT && IOMMU_SBA help This option gives you AGP GART support for the HP Quicksilver AGP bus adapter on HP PA-RISC machines (Ok, just on the C8000
drivers/clk/clk.c +21 -26
73 lines not on this page · raw message
drivers/clk/socfpga/clk-gate.c +1 -1
@@ -99,7 +99,7 @@ static unsigned long socfpga_clk_recalc_rate(struct clk_hw *hwclk, val =readl (socfpgaclk->div_reg) >> socfpgaclk->shift; val &=GENMASK (socfpgaclk->width -1 ,0 );/* Check for GPIO_DB_CLK by its offset */ -if ((int ) socfpgaclk->div_reg &SOCFPGA_GPIO_DB_CLK_OFFSET ) +if ((uintptr_t ) socfpgaclk->div_reg &SOCFPGA_GPIO_DB_CLK_OFFSET ) div = val +1 ;else div = (1 << val);
drivers/counter/stm32-timer-cnt.c +3 -9
@@ -24,7 +24,6 @@ struct stm32_timer_cnt {struct counter_device counter;struct regmap *regmap;struct clk *clk; -u32 ceiling;u32 max_arr; };
@@ -67,14 +66,15 @@ static int stm32_count_write(struct counter_device *counter, struct counter_count_write_value *val) {struct stm32_timer_cnt *const priv = counter->priv; -u32 cnt; +u32 cnt, ceiling;int err; err =counter_count_write_value_get (&cnt,COUNTER_COUNT_POSITION , val);if (err)return err; -if (cnt > priv->ceiling) +regmap_read (priv->regmap,TIM_ARR , &ceiling); +if (cnt > ceiling)return -EINVAL ;return regmap_write (priv->regmap,TIM_CNT , cnt);
@@ -136,10 +136,6 @@ static int stm32_count_function_set(struct counter_device *counter,regmap_update_bits (priv->regmap,TIM_CR1 ,TIM_CR1_CEN ,0 ); -/* TIMx_ARR register shouldn't be buffered (ARPE=0) */ -regmap_update_bits (priv->regmap,TIM_CR1 ,TIM_CR1_ARPE ,0 ); -regmap_write (priv->regmap,TIM_ARR , priv->ceiling); -regmap_update_bits (priv->regmap,TIM_SMCR ,TIM_SMCR_SMS , sms);/* Make sure that registers are updated */
@@ -197,7 +193,6 @@ static ssize_t stm32_count_ceiling_write(struct counter_device *counter,regmap_update_bits (priv->regmap,TIM_CR1 ,TIM_CR1_ARPE ,0 );regmap_write (priv->regmap,TIM_ARR , ceiling); - priv->ceiling = ceiling;return len; }
@@ -369,7 +364,6 @@ static int stm32_timer_cnt_probe(struct platform_device *pdev) priv->regmap = ddata->regmap; priv->clk = ddata->clk; - priv->ceiling = ddata->max_arr; priv->max_arr = ddata->max_arr; priv->counter.name =dev_name (dev);
drivers/gpu/drm/i915/display/intel_acpi.c +20 -2
@@ -83,13 +83,31 @@ static void intel_dsm_platform_mux_info(acpi_handle dhandle)return ; } +if (!pkg->package.count) { +DRM_DEBUG_DRIVER ("no connection in _DSM\n" ); +return ; + } + connector_count = &pkg->package.elements[0 ];DRM_DEBUG_DRIVER ("MUX info connectors: %lld\n" , (unsigned long long )connector_count->integer.value);for (i =1 ; i < pkg->package.count; i++) {union acpi_object *obj = &pkg->package.elements[i]; -union acpi_object *connector_id = &obj->package.elements[0 ]; -union acpi_object *info = &obj->package.elements[1 ]; +union acpi_object *connector_id; +union acpi_object *info; + +if (obj->type !=ACPI_TYPE_PACKAGE || obj->package.count <2 ) { +DRM_DEBUG_DRIVER ("Invalid object for MUX #%d\n" , i); +continue ; + } + + connector_id = &obj->package.elements[0 ]; + info = &obj->package.elements[1 ]; +if (info->type !=ACPI_TYPE_BUFFER || info->buffer.length <4 ) { +DRM_DEBUG_DRIVER ("Invalid info for MUX obj #%d\n" , i); +continue ; + } +DRM_DEBUG_DRIVER ("Connector id: 0x%016llx\n" , (unsigned long long )connector_id->integer.value); DRM_DEBUG_DRIVER(" port id: %s\n",
drivers/gpu/drm/msm/msm_drv.c +1 -0
@@ -567,6 +567,7 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)kfree (priv); err_put_drm_dev:drm_dev_put (ddev); +platform_set_drvdata (pdev,NULL );return ret; }
drivers/i2c/i2c-core-base.c +4 -3
@@ -254,13 +254,14 @@ EXPORT_SYMBOL_GPL(i2c_recover_bus);static void i2c_init_recovery (struct i2c_adapter *adap) {struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; -char *err_str; +char *err_str, *err_level =KERN_ERR ;if (!bri)return ;if (!bri->recover_bus) { - err_str ="no recover_bus() found" ; + err_str ="no suitable method provided" ; + err_level =KERN_DEBUG ; goto err; }
@@ -290,7 +291,7 @@ static void i2c_init_recovery(struct i2c_adapter *adap)return ; err: -dev_err (&adap->dev,"Not using recovery: %s\n" , err_str); +dev_printk (err_level, &adap->dev,"Not using recovery: %s\n" , err_str); adap->bus_recovery_info =NULL ; }
drivers/infiniband/core/addr.c +3 -1
@@ -76,7 +76,9 @@ static struct workqueue_struct *addr_wq;static const struct nla_policy ib_nl_addr_policy[LS_NLA_TYPE_MAX ] = { [LS_NLA_TYPE_DGID ] = {.type =NLA_BINARY , - .len =sizeof (struct rdma_nla_ls_gid )}, + .len =sizeof (struct rdma_nla_ls_gid ), + .validation_type =NLA_VALIDATE_MIN , + .min =sizeof (struct rdma_nla_ls_gid )}, };static inline bool ib_nl_is_good_ip_resp (const struct nlmsghdr *nlh)
drivers/infiniband/hw/cxgb4/cm.c +2 -1
@@ -3616,7 +3616,8 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id)c4iw_init_wr_wait (ep->com.wr_waitp); err =cxgb4_remove_server ( ep->com.dev->rdev.lldi.ports[0 ], ep->stid, - ep->com.dev->rdev.lldi.rxq_ids[0 ], true); + ep->com.dev->rdev.lldi.rxq_ids[0 ], + ep->com.local_addr.ss_family ==AF_INET6 );if (err) goto done; err = c4iw_wait_for_reply(&ep->com.dev->rdev, ep->com.wr_waitp,
drivers/net/can/usb/peak_usb/pcan_usb_core.c +5 -1
@@ -856,7 +856,7 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,if (dev->adapter->dev_set_bus) { err = dev->adapter->dev_set_bus (dev,0 );if (err) - goto lbl_unregister_candev; + goto adap_dev_free; }/* get device number early */
@@ -868,6 +868,10 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,return 0 ; +adap_dev_free: +if (dev->adapter->dev_free) + dev->adapter->dev_free (dev); + lbl_unregister_candev:unregister_candev (netdev);
drivers/net/dsa/lantiq_gswip.c +174 -22
263 lines not on this page · raw message
drivers/net/ethernet/amd/xgbe/xgbe.h +3 -3
@@ -181,9 +181,9 @@#define XGBE_DMA_SYS_AWCR 0x30303030/* DMA cache settings - PCI device */ -#define XGBE_DMA_PCI_ARCR 0x00000003 -#define XGBE_DMA_PCI_AWCR 0x13131313 -#define XGBE_DMA_PCI_AWARCR 0x00000313 +#define XGBE_DMA_PCI_ARCR 0x000f0f0f +#define XGBE_DMA_PCI_AWCR 0x0f0f0f0f +#define XGBE_DMA_PCI_AWARCR 0x00000f0f/* DMA channel interrupt modes */ #define XGBE_IRQ_MODE_EDGE 0
drivers/net/ethernet/cadence/macb_main.c +7 -0
@@ -2915,6 +2915,9 @@ static void gem_prog_cmp_regs(struct macb *bp, struct ethtool_rx_flow_spec *fs)bool cmp_b = false;bool cmp_c = false; +if (!macb_is_gem (bp)) +return ; + tp4sp_v = &(fs->h_u.tcp_ip4_spec); tp4sp_m = &(fs->m_u.tcp_ip4_spec);
@@ -3286,6 +3289,7 @@ static void macb_restore_features(struct macb *bp) {struct net_device *netdev = bp->dev;netdev_features_t features = netdev->features; +struct ethtool_rx_fs_item *item;/* TX checksum offload */ macb_set_txcsum_feature (bp, features);
@@ -3294,6 +3298,9 @@ static void macb_restore_features(struct macb *bp)macb_set_rxcsum_feature (bp, features);/* RX Flow Filters */ +list_for_each_entry (item, &bp->rx_fs_list.list, list) +gem_prog_cmp_regs (bp, &item->fs); +macb_set_rxflow_feature (bp, features); }
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c +19 -4
@@ -1393,11 +1393,25 @@ int cudbg_collect_sge_indirect(struct cudbg_init *pdbg_init,struct cudbg_buffer temp_buff = {0 };struct sge_qbase_reg_field *sge_qbase;struct ireg_buf *ch_sge_dbg; +u8 padap_running =0 ;int i, rc; +u32 size; - rc =cudbg_get_buff (pdbg_init, dbg_buff, -sizeof (*ch_sge_dbg) *2 +sizeof (*sge_qbase), - &temp_buff); +/* Accessing SGE_QBASE_MAP[0-3] and SGE_QBASE_INDEX regs can +* lead to SGE missing doorbells under heavy traffic. So, only +* collect them when adapter is idle. +*/ +for_each_port (padap, i) { + padap_running =netif_running (padap->port[i]); +if (padap_running) +break ; + } + + size =sizeof (*ch_sge_dbg) *2 ; +if (!padap_running) + size +=sizeof (*sge_qbase); + + rc =cudbg_get_buff (pdbg_init, dbg_buff, size, &temp_buff);if (rc)return rc;
@@ -1419,7 +1433,8 @@ int cudbg_collect_sge_indirect(struct cudbg_init *pdbg_init, ch_sge_dbg++; } -if (CHELSIO_CHIP_VERSION (padap->params.chip) >CHELSIO_T5 ) { +if (CHELSIO_CHIP_VERSION (padap->params.chip) >CHELSIO_T5 && + !padap_running) { sge_qbase = (struct sge_qbase_reg_field *)ch_sge_dbg;/* 1 addr reg SGE_QBASE_INDEX and 4 data reg * SGE_QBASE_MAP[0-3]
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +2 -1
@@ -2093,7 +2093,8 @@ void t4_get_regs(struct adapter *adap, void *buf, size_t buf_size)0x1190 ,0x1194 ,0x11a0 ,0x11a4 ,0x11b0 ,0x11b4 , -0x11fc ,0x1274 , +0x11fc ,0x123c , +0x1254 ,0x1274 ,0x1280 ,0x133c ,0x1800 ,0x18fc , 0x3000, 0x302c,
drivers/net/ethernet/freescale/gianfar.c +5 -1
@@ -366,7 +366,11 @@ static void gfar_set_mac_for_addr(struct net_device *dev, int num,static int gfar_set_mac_addr (struct net_device *dev,void *p) { -eth_mac_addr (dev, p); +int ret; + + ret =eth_mac_addr (dev, p); +if (ret) +return ret;gfar_set_mac_for_addr (dev,0 , dev->dev_addr);
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +2 -2
@@ -2140,14 +2140,14 @@ static int hclgevf_ae_start(struct hnae3_handle *handle) {struct hclgevf_dev *hdev =hclgevf_ae_get_hdev (handle); +clear_bit (HCLGEVF_STATE_DOWN , &hdev->state); +hclgevf_reset_tqp_stats (handle);hclgevf_request_link_info (hdev);hclgevf_update_link_mode (hdev); -clear_bit (HCLGEVF_STATE_DOWN , &hdev->state); -return 0 ; }
drivers/net/ethernet/intel/i40e/i40e.h +1 -0
@@ -152,6 +152,7 @@ enum i40e_state_t { __I40E_VIRTCHNL_OP_PENDING, __I40E_RECOVERY_MODE, __I40E_VF_RESETS_DISABLED,/* disable resets during i40e_remove */ + __I40E_VFS_RELEASING,/* This must be last as it determines the size of the BITMAP */ __I40E_STATE_SIZE__, };
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +47 -6
84 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_main.c +7 -4
@@ -2547,8 +2547,7 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi)i40e_stat_str (hw, aq_ret), i40e_aq_str(hw, hw->aq.asq_last_status)); }else { -dev_info (&pf->pdev->dev,"%s is %s allmulti mode.\n" , - vsi->netdev->name, +dev_info (&pf->pdev->dev,"%s allmulti mode.\n" , cur_multipromisc ?"entering" :"leaving" ); } }
@@ -14701,12 +14700,16 @@ static int i40e_init_recovery_mode(struct i40e_pf *pf, struct i40e_hw *hw)* in order to register the netdev */ v_idx =i40e_vsi_mem_alloc (pf,I40E_VSI_MAIN ); -if (v_idx <0 ) +if (v_idx <0 ) { + err = v_idx; goto err_switch_setup; + } pf->lan_vsi = v_idx; vsi = pf->vsi[v_idx]; -if (!vsi) +if (!vsi) { + err = -EFAULT ; goto err_switch_setup; + } vsi->alloc_queue_pairs =1 ; err =i40e_config_netdev (vsi);if (err)
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +9 -0
@@ -137,6 +137,7 @@ void i40e_vc_notify_vf_reset(struct i40e_vf *vf)**/ static inline void i40e_vc_disable_vf (struct i40e_vf *vf) { +struct i40e_pf *pf = vf->pf;int i;i40e_vc_notify_vf_reset (vf);
@@ -147,6 +148,11 @@ static inline void i40e_vc_disable_vf(struct i40e_vf *vf)* ensure a reset. */ for (i =0 ; i <20 ; i++) { +/* If PF is in VFs releasing state reset VF is impossible, +* so leave it. +*/ +if (test_bit (__I40E_VFS_RELEASING, pf->state)) +return ;if (i40e_reset_vf (vf, false))return ;usleep_range (10000 ,20000 );
@@ -1506,6 +1512,8 @@ void i40e_free_vfs(struct i40e_pf *pf)if (!pf->vf)return ; + +set_bit (__I40E_VFS_RELEASING, pf->state);while (test_and_set_bit (__I40E_VF_DISABLE, pf->state))usleep_range (1000 ,2000 );
@@ -1563,6 +1571,7 @@ void i40e_free_vfs(struct i40e_pf *pf) } }clear_bit (__I40E_VF_DISABLE, pf->state); +clear_bit (__I40E_VFS_RELEASING, pf->state); }#ifdef CONFIG_PCI_IOV
drivers/net/ethernet/intel/ice/ice_controlq.h +2 -2
@@ -31,8 +31,8 @@ enum ice_ctl_q { ICE_CTL_Q_MAILBOX, }; -/* Control Queue timeout settings - max delay 250ms */ -#define ICE_CTL_Q_SQ_CMD_TIMEOUT 2500/* Count 2500 times */ +/* Control Queue timeout settings - max delay 1s */ +#define ICE_CTL_Q_SQ_CMD_TIMEOUT 10000/* Count 10000 times */ #define ICE_CTL_Q_SQ_CMD_USEC 100/* Check every 100usec */ struct ice_ctl_q_ring {
drivers/net/ethernet/intel/ice/ice_switch.c +9 -6
@@ -1279,6 +1279,9 @@ ice_add_update_vsi_list(struct ice_hw *hw,ice_create_vsi_list_map (hw, &vsi_handle_arr[0 ],2 , vsi_list_id); +if (!m_entry->vsi_list_info) +return ICE_ERR_NO_MEMORY ; +/* If this entry was large action then the large action needs * to be updated to point to FWD to VSI list */
@@ -2266,6 +2269,7 @@ ice_vsi_uses_fltr(struct ice_fltr_mgmt_list_entry *fm_entry, u16 vsi_handle)return ((fm_entry->fltr_info.fltr_act ==ICE_FWD_TO_VSI && fm_entry->fltr_info.vsi_handle == vsi_handle) || (fm_entry->fltr_info.fltr_act ==ICE_FWD_TO_VSI_LIST && + fm_entry->vsi_list_info && (test_bit (vsi_handle, fm_entry->vsi_list_info->vsi_map)))); }
@@ -2338,14 +2342,12 @@ ice_add_to_vsi_fltr_list(struct ice_hw *hw, u16 vsi_handle,return ICE_ERR_PARAM ;list_for_each_entry (fm_entry, lkup_list_head, list_entry) { -struct ice_fltr_info *fi; - - fi = &fm_entry->fltr_info; -if (!fi || !ice_vsi_uses_fltr (fm_entry, vsi_handle)) +if (!ice_vsi_uses_fltr (fm_entry, vsi_handle))continue ; status =ice_add_entry_to_vsi_fltr_list (hw, vsi_handle, - vsi_list_head, fi); + vsi_list_head, + &fm_entry->fltr_info);if (status)return status; }
@@ -2663,7 +2665,7 @@ ice_remove_vsi_lkup_fltr(struct ice_hw *hw, u16 vsi_handle, &remove_list_head);mutex_unlock (rule_lock);if (status) -return ; + goto free_fltr_list;switch (lkup) {case ICE_SW_LKUP_MAC :
@@ -2686,6 +2688,7 @@ ice_remove_vsi_lkup_fltr(struct ice_hw *hw, u16 vsi_handle,break ; } +free_fltr_list:list_for_each_entry_safe (fm_entry, tmp, &remove_list_head, list_entry) {list_del (&fm_entry->list_entry);devm_kfree (ice_hw_to_dev (hw), fm_entry);
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +11 -11
@@ -700,11 +700,11 @@ static int get_fec_supported_advertised(struct mlx5_core_dev *dev,return 0 ; } -static void ptys2ethtool_supported_advertised_port (struct ethtool_link_ksettings *link_ksettings, -u32 eth_proto_cap, -u8 connector_type,bool ext) +static void ptys2ethtool_supported_advertised_port (struct mlx5_core_dev *mdev, +struct ethtool_link_ksettings *link_ksettings, +u32 eth_proto_cap,u8 connector_type) { -if ((!connector_type && !ext) || connector_type >=MLX5E_CONNECTOR_TYPE_NUMBER ) { +if (!MLX5_CAP_PCAM_FEATURE (mdev, ptys_connector_type)) { if (eth_proto_cap & (MLX5E_PROT_MASK(MLX5E_10GBASE_CR) | MLX5E_PROT_MASK(MLX5E_10GBASE_SR) | MLX5E_PROT_MASK(MLX5E_40GBASE_CR4)
@@ -836,9 +836,9 @@ static int ptys2connector_type[MLX5E_CONNECTOR_TYPE_NUMBER] = { [MLX5E_PORT_OTHER] = PORT_OTHER, }; -static u8 get_connector_port (u32 eth_proto,u8 connector_type,bool ext) +static u8 get_connector_port (struct mlx5_core_dev *mdev,u32 eth_proto,u8 connector_type) { -if ((connector_type || ext) && connector_type <MLX5E_CONNECTOR_TYPE_NUMBER ) +if (MLX5_CAP_PCAM_FEATURE (mdev, ptys_connector_type))return ptys2connector_type[connector_type]; if (eth_proto &
@@ -937,11 +937,11 @@ int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv, link_ksettings); eth_proto_oper = eth_proto_oper ? eth_proto_oper : eth_proto_cap; - - link_ksettings->base.port =get_connector_port (eth_proto_oper, - connector_type, ext); -ptys2ethtool_supported_advertised_port (link_ksettings, eth_proto_admin, - connector_type, ext); + connector_type = connector_type <MLX5E_CONNECTOR_TYPE_NUMBER ? + connector_type :MLX5E_PORT_UNKNOWN ; + link_ksettings->base.port =get_connector_port (mdev, eth_proto_oper, connector_type); +ptys2ethtool_supported_advertised_port (mdev, link_ksettings, eth_proto_admin, + connector_type);get_lp_advertising (mdev, eth_proto_lp, link_ksettings);if (an_status ==MLX5_AN_COMPLETE )
drivers/net/ethernet/mellanox/mlx5/core/eq.c +12 -1
@@ -926,13 +926,24 @@ void mlx5_core_eq_free_irqs(struct mlx5_core_dev *dev)mutex_unlock (&table->lock); } +#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING +#define MLX5_MAX_ASYNC_EQS 4 +#else +#define MLX5_MAX_ASYNC_EQS 3 +#endif +int mlx5_eq_table_create (struct mlx5_core_dev *dev) {struct mlx5_eq_table *eq_table = dev->priv.eq_table; +int num_eqs =MLX5_CAP_GEN (dev, max_num_eqs) ? +MLX5_CAP_GEN (dev, max_num_eqs) : +1 <<MLX5_CAP_GEN (dev, log_max_eq);int err; eq_table->num_comp_eqs = -mlx5_irq_get_num_comp (eq_table->irq_table); +min_t (int, +mlx5_irq_get_num_comp (eq_table->irq_table), + num_eqs -MLX5_MAX_ASYNC_EQS ); err =create_async_eqs (dev);if (err) {
drivers/net/ethernet/netronome/nfp/bpf/cmsg.c +1 -0
@@ -454,6 +454,7 @@ void nfp_bpf_ctrl_msg_rx(struct nfp_app *app, struct sk_buff *skb)dev_consume_skb_any (skb); elsedev_kfree_skb_any (skb ); +return ; }nfp_ccm_rx (&bpf->ccm, skb);
drivers/net/ethernet/netronome/nfp/flower/main.h +8 -0
@@ -164,6 +164,7 @@ struct nfp_fl_internal_ports {* @qos_rate_limiters: Current active qos rate limiters * @qos_stats_lock: Lock on qos stats updates * @pre_tun_rule_cnt: Number of pre-tunnel rules offloaded +* @merge_table: Hash table to store merged flows */ struct nfp_flower_priv {struct nfp_app *app;
@@ -196,6 +197,7 @@ struct nfp_flower_priv {unsigned int qos_rate_limiters;spinlock_t qos_stats_lock;/* Protect the qos stats */ int pre_tun_rule_cnt; +struct rhashtable merge_table; };/**
@@ -310,6 +312,12 @@ struct nfp_fl_payload_link { };extern const struct rhashtable_params nfp_flower_table_params; +extern const struct rhashtable_params merge_table_params; + +struct nfp_merge_info { +u64 parent_ctx; +struct rhash_head ht_node; +};struct nfp_fl_stats_frame {__be32 stats_con_id;
drivers/net/ethernet/netronome/nfp/flower/metadata.c +15 -1
@@ -490,6 +490,12 @@ const struct rhashtable_params nfp_flower_table_params = { .automatic_shrinking = true, }; +const struct rhashtable_params merge_table_params = { + .key_offset = offsetof(struct nfp_merge_info , parent_ctx), + .head_offset = offsetof(struct nfp_merge_info , ht_node), + .key_len =sizeof (u64), +}; +int nfp_flower_metadata_init (struct nfp_app *app,u64 host_ctx_count,unsigned int host_num_mems) {
@@ -506,6 +512,10 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,if (err) goto err_free_flow_table; + err =rhashtable_init (&priv->merge_table, &merge_table_params); +if (err) + goto err_free_stats_ctx_table; +get_random_bytes (&priv->mask_id_seed,sizeof (priv->mask_id_seed));/* Init ring buffer and unallocated mask_ids. */
@@ -513,7 +523,7 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,kmalloc_array (NFP_FLOWER_MASK_ENTRY_RS ,NFP_FLOWER_MASK_ELEMENT_RS ,GFP_KERNEL );if (!priv->mask_ids.mask_id_free_list.buf) - goto err_free_stats_ctx_table; + goto err_free_merge_table; priv->mask_ids.init_unallocated =NFP_FLOWER_MASK_ENTRY_RS -1 ;
@@ -550,6 +560,8 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,kfree (priv->mask_ids.last_used); err_free_mask_id:kfree (priv->mask_ids.mask_id_free_list.buf); +err_free_merge_table: +rhashtable_destroy (&priv->merge_table); err_free_stats_ctx_table:rhashtable_destroy (&priv->stats_ctx_table); err_free_flow_table:
@@ -568,6 +580,8 @@ void nfp_flower_metadata_cleanup(struct nfp_app *app) nfp_check_rhashtable_empty, NULL);rhashtable_free_and_destroy (&priv->stats_ctx_table, nfp_check_rhashtable_empty,NULL ); +rhashtable_free_and_destroy (&priv->merge_table, + nfp_check_rhashtable_empty,NULL );kvfree (priv->stats);kfree (priv->mask_ids.mask_id_free_list.buf);kfree (priv->mask_ids.last_used);
drivers/net/ethernet/netronome/nfp/flower/offload.c +46 -2
89 lines not on this page · raw message
drivers/net/ieee802154/atusb.c +1 -0
@@ -365,6 +365,7 @@ static int atusb_alloc_urbs(struct atusb *atusb, int n)return -ENOMEM ; }usb_anchor_urb (urb, &atusb->idle_urbs); +usb_free_urb (urb); n--; }return 0 ;
drivers/net/phy/bcm-phy-lib.c +10 -3
@@ -190,7 +190,7 @@ EXPORT_SYMBOL_GPL(bcm_phy_enable_apd);int bcm_phy_set_eee (struct phy_device *phydev,bool enable) { -int val; +int val, mask =0 ;/* Enable EEE at PHY level */ val =phy_read_mmd (phydev,MDIO_MMD_AN ,BRCM_CL45VEN_EEE_CONTROL );
@@ -209,10 +209,17 @@ int bcm_phy_set_eee(struct phy_device *phydev, bool enable)if (val <0 )return val; +if (linkmode_test_bit (ETHTOOL_LINK_MODE_1000baseT_Full_BIT, + phydev->supported)) + mask |=MDIO_EEE_1000T ; +if (linkmode_test_bit (ETHTOOL_LINK_MODE_100baseT_Full_BIT, + phydev->supported)) + mask |=MDIO_EEE_100TX ; +if (enable) - val |= (MDIO_EEE_100TX |MDIO_EEE_1000T ); + val |= mask;else - val &= ~(MDIO_EEE_100TX |MDIO_EEE_1000T ); + val &= ~mask;phy_write_mmd (phydev,MDIO_MMD_AN ,BCM_CL45VEN_EEE_ADV , (u32 )val);
drivers/net/tun.c +48 -0
66 lines not on this page · raw message
drivers/net/usb/hso.c +12 -21
@@ -611,7 +611,7 @@ static struct hso_serial *get_serial_by_index(unsigned index)return serial; } -static int get_free_serial_index (void ) +static int obtain_minor (struct hso_serial *serial) {int index;unsigned long flags;
@@ -619,8 +619,10 @@ static int get_free_serial_index(void)spin_lock_irqsave (&serial_table_lock, flags);for (index =0 ; index <HSO_SERIAL_TTY_MINORS ; index++) {if (serial_table[index] ==NULL ) { + serial_table[index] = serial->parent; + serial->minor = index;spin_unlock_irqrestore (&serial_table_lock, flags); -return index; +return 0 ; } }spin_unlock_irqrestore (&serial_table_lock, flags);
@@ -629,15 +631,12 @@ static int get_free_serial_index(void)return -1 ; } -static void set_serial_by_index (unsigned index,struct hso_serial *serial) +static void release_minor (struct hso_serial *serial) {unsigned long flags;spin_lock_irqsave (&serial_table_lock, flags); -if (serial) - serial_table[index] = serial->parent; -else - serial_table[index] =NULL ; + serial_table[serial->minor] =NULL ;spin_unlock_irqrestore (&serial_table_lock, flags); }
@@ -2230,6 +2229,7 @@ static int hso_stop_serial_device(struct hso_device *hso_dev)static void hso_serial_tty_unregister (struct hso_serial *serial) {tty_unregister_device (tty_drv, serial->minor); +release_minor (serial); }static void hso_serial_common_free (struct hso_serial *serial)
@@ -2253,24 +2253,22 @@ static void hso_serial_common_free(struct hso_serial *serial)static int hso_serial_common_create (struct hso_serial *serial,int num_urbs,int rx_size,int tx_size) { -int minor;int i;tty_port_init (&serial->port); - minor =get_free_serial_index (); -if (minor <0 ) +if (obtain_minor (serial)) goto exit2;/* register our minor number */ serial->parent->dev =tty_port_register_device_attr (&serial->port, - tty_drv, minor, &serial->parent->interface->dev, + tty_drv, serial->minor, &serial->parent->interface->dev, serial->parent, hso_serial_dev_groups); -if (IS_ERR (serial->parent->dev)) +if (IS_ERR (serial->parent->dev)) { +release_minor (serial); goto exit2; + } -/* fill in specific data for later use */ - serial->minor = minor; serial->magic =HSO_SERIAL_MAGIC ;spin_lock_init (&serial->serial_lock); serial->num_rx_urbs = num_urbs;
@@ -2668,9 +2666,6 @@ static struct hso_device *hso_create_bulk_serial_device( serial->write_data = hso_std_serial_write_data; -/* and record this serial */ -set_serial_by_index (serial->minor, serial); -/* setup the proc dirs and files if needed */ hso_log_port (hso_dev);
@@ -2727,9 +2722,6 @@ struct hso_device *hso_create_mux_serial_device(struct usb_interface *interface, serial->shared_int->ref_count++;mutex_unlock (&serial->shared_int->shared_int_lock); -/* and record this serial */ -set_serial_by_index (serial->minor, serial); -/* setup the proc dirs and files if needed */ hso_log_port (hso_dev);
@@ -3114,7 +3106,6 @@ static void hso_free_interface(struct usb_interface *interface)cancel_work_sync (&serial_table[i]->async_get_intf);hso_serial_tty_unregister (serial);kref_put (&serial_table[i]->ref, hso_serial_ref_free); -set_serial_by_index (i,NULL ); } }
drivers/net/virtio_net.c +32 -20
140 lines not on this page · raw message
drivers/ras/cec.c +12 -3
@@ -309,11 +309,20 @@ static bool sanity_check(struct ce_array *ca)return ret; } +/** +* cec_add_elem - Add an element to the CEC array. +* @pfn: page frame number to insert +* +* Return values: +* - <0: on error +* - 0: on success +* - >0: when the inserted pfn was offlined +*/ int cec_add_elem (u64 pfn) {struct ce_array *ca = &ce_arr; +int count, err, ret =0 ;unsigned int to =0 ; -int count, ret =0 ;/* * We can be called very early on the identify_cpu() path where we are
@@ -330,8 +339,8 @@ int cec_add_elem(u64 pfn)if (ca->n ==MAX_ELEMS )WARN_ON (!del_lru_elem_unlocked (ca)); - ret =find_elem (ca, pfn, &to); -if (ret <0 ) { + err =find_elem (ca, pfn, &to); +if (err <0 ) {/* * Shift range [to-end] to make room for one more element. */
drivers/regulator/bd9571mwv-regulator.c +2 -2
@@ -124,7 +124,7 @@ static const struct regulator_ops vid_ops = {static const struct regulator_desc regulators[] = {BD9571MWV_REG ("VD09" ,"vd09" ,VD09 , avs_ops,0 ,0x7f , -0x80 ,600000 ,10000 ,0x3c ), +0x6f ,600000 ,10000 ,0x3c ),BD9571MWV_REG ("VD18" ,"vd18" ,VD18 , vid_ops,BD9571MWV_VD18_VID ,0xf ,16 ,1625000 ,25000 ,0 ), BD9571MWV_REG("VD25", "vd25", VD25, vid_ops, BD9571MWV_VD25_VID, 0xf,
@@ -133,7 +133,7 @@ static const struct regulator_desc regulators[] = { 11, 2800000, 100000, 0),BD9571MWV_REG ("DVFS" ,"dvfs" ,DVFS , reg_ops,BD9571MWV_DVFS_MONIVDAC ,0x7f , - 0x80, 600000, 10000, 0x3c), + 0x6f, 600000, 10000, 0x3c), };#ifdef CONFIG_PM_SLEEP
drivers/scsi/ufs/ufshcd.c +228 -170
742 lines not on this page · raw message
drivers/scsi/ufs/ufshcd.h +6 -12
@@ -213,13 +213,11 @@ struct ufs_query {* @type: device management command type - Query, NOP OUT * @lock: lock to allow one command at a time * @complete: internal commands completion -* @tag_wq: wait queue until free command slot is available */ struct ufs_dev_cmd {enum dev_cmd_type type;struct mutex lock;struct completion *complete; -wait_queue_head_t tag_wq;struct ufs_query query; };
@@ -484,7 +482,7 @@ struct ufs_stats {* @host: Scsi_Host instance of the driver * @dev: device handle * @lrb: local reference block -* @lrb_in_use: lrb in use +* @cmd_queue: Used to allocate command tags from hba->host->tag_set. * @outstanding_tasks: Bits representing outstanding task requests * @outstanding_reqs: Bits representing outstanding transfer requests * @capabilities: UFS Controller Capabilities
@@ -496,11 +494,9 @@ struct ufs_stats {* @irq: Irq number of the controller * @active_uic_cmd: handle of active UIC command * @uic_cmd_mutex: mutex for uic command -* @tm_wq: wait queue for task management -* @tm_tag_wq: wait queue for free task management slots -* @tm_slots_in_use: bit map of task management request slots in use +* @tmf_tag_set: TMF tag set. +* @tmf_queue: Used to allocate TMF tags. * @pwr_done: completion for power mode change -* @tm_condition: condition variable for task management * @ufshcd_state: UFSHCD states * @eh_flags: Error handling flags * @intr_mask: Interrupt Mask Bits
@@ -543,6 +539,7 @@ struct ufs_hba {struct Scsi_Host *host;struct device *dev; +struct request_queue *cmd_queue;/* * This field is to keep a reference to "scsi_device" corresponding to * "UFS device" W-LU.
@@ -563,7 +560,6 @@ struct ufs_hba {u32 ahit;struct ufshcd_lrb *lrb; -unsigned long lrb_in_use;unsigned long outstanding_tasks;unsigned long outstanding_reqs;
@@ -645,10 +641,8 @@ struct ufs_hba {/* Device deviations from standard UFS device spec. */ unsigned int dev_quirks; -wait_queue_head_t tm_wq; -wait_queue_head_t tm_tag_wq; -unsigned long tm_condition; -unsigned long tm_slots_in_use; +struct blk_mq_tag_set tmf_tag_set; +struct request_queue *tmf_queue;struct uic_command *active_uic_cmd;struct mutex uic_cmd_mutex;
drivers/scsi/ufs/ufshci.h +1 -1
@@ -195,7 +195,7 @@ enum {/* UECDL - Host UIC Error Code Data Link Layer 3Ch */ #define UIC_DATA_LINK_LAYER_ERROR 0x80000000 -#define UIC_DATA_LINK_LAYER_ERROR_CODE_MASK 0x7FFF +#define UIC_DATA_LINK_LAYER_ERROR_CODE_MASK 0xFFFF#define UIC_DATA_LINK_LAYER_ERROR_TCX_REP_TIMER_EXP 0x2#define UIC_DATA_LINK_LAYER_ERROR_AFCX_REQ_TIMER_EXP 0x4#define UIC_DATA_LINK_LAYER_ERROR_FCX_PRO_TIMER_EXP 0x8
drivers/soc/fsl/qbman/qman.c +1 -1
@@ -186,7 +186,7 @@ struct qm_eqcr_entry {__be32 tag;struct qm_fd fd;u8 __reserved3[32 ]; -} __packed; +} __packed__aligned(8) ;#define QM_EQCR_VERB_VBIT 0x80#define QM_EQCR_VERB_CMD_MASK 0x61/* but only one value; */ #define QM_EQCR_VERB_CMD_ENQUEUE 0x01
drivers/usb/usbip/stub_dev.c +9 -2
@@ -63,6 +63,7 @@ static ssize_t usbip_sockfd_store(struct device *dev, struct device_attribute *adev_info (dev,"stub up\n" ); +mutex_lock (&sdev->ud.sysfs_lock);spin_lock_irq (&sdev->ud.lock);if (sdev->ud.status !=SDEV_ST_AVAILABLE ) {
@@ -87,13 +88,13 @@ static ssize_t usbip_sockfd_store(struct device *dev, struct device_attribute *a tcp_rx =kthread_create (stub_rx_loop, &sdev->ud,"stub_rx" );if (IS_ERR (tcp_rx)) {sockfd_put (socket); -return -EINVAL ; + goto unlock_mutex; } tcp_tx =kthread_create (stub_tx_loop, &sdev->ud,"stub_tx" );if (IS_ERR (tcp_tx)) {kthread_stop (tcp_rx);sockfd_put (socket); -return -EINVAL ; + goto unlock_mutex; }/* get task structs now */
@@ -112,6 +113,8 @@ static ssize_t usbip_sockfd_store(struct device *dev, struct device_attribute *awake_up_process (sdev->ud.tcp_rx);wake_up_process (sdev->ud.tcp_tx); +mutex_unlock (&sdev->ud.sysfs_lock); + }else {dev_info (dev,"stub down\n" );
@@ -122,6 +125,7 @@ static ssize_t usbip_sockfd_store(struct device *dev, struct device_attribute *aspin_unlock_irq (&sdev->ud.lock);usbip_event_add (&sdev->ud,SDEV_EVENT_DOWN ); +mutex_unlock (&sdev->ud.sysfs_lock); }return count;
@@ -130,6 +134,8 @@ static ssize_t usbip_sockfd_store(struct device *dev, struct device_attribute *asockfd_put (socket); err:spin_unlock_irq (&sdev->ud.lock); +unlock_mutex: +mutex_unlock (&sdev->ud.sysfs_lock);return -EINVAL ; }static DEVICE_ATTR_WO (usbip_sockfd);
@@ -270,6 +276,7 @@ static struct stub_device *stub_device_alloc(struct usb_device *udev) sdev->ud.side =USBIP_STUB ; sdev->ud.status =SDEV_ST_AVAILABLE ;spin_lock_init (&sdev->ud.lock); +mutex_init (&sdev->ud.sysfs_lock); sdev->ud.tcp_socket =NULL ; sdev->ud.sockfd =-1 ;
drivers/usb/usbip/usbip_common.h +3 -0
@@ -263,6 +263,9 @@ struct usbip_device {/* lock for status */ spinlock_t lock; +/* mutex for synchronizing sysfs store paths */ +struct mutex sysfs_lock; +int sockfd;struct socket *tcp_socket;
drivers/usb/usbip/usbip_event.c +2 -0
@@ -70,6 +70,7 @@ static void event_handler(struct work_struct *work)while ((ud =get_event ()) !=NULL ) {usbip_dbg_eh ("pending event %lx\n" , ud->event); +mutex_lock (&ud->sysfs_lock);/* * NOTE: shutdown must come first. * Shutdown the device.
@@ -90,6 +91,7 @@ static void event_handler(struct work_struct *work) ud->eh_ops.unusable (ud);unset_event (ud,USBIP_EH_UNUSABLE ); } +mutex_unlock (&ud->sysfs_lock);wake_up (&ud->eh_waitq); }
drivers/usb/usbip/vhci_hcd.c +1 -0
@@ -1096,6 +1096,7 @@ static void vhci_device_init(struct vhci_device *vdev) vdev->ud.side =USBIP_VHCI ; vdev->ud.status =VDEV_ST_NULL ;spin_lock_init (&vdev->ud.lock); +mutex_init (&vdev->ud.sysfs_lock);INIT_LIST_HEAD (&vdev->priv_rx);INIT_LIST_HEAD (&vdev->priv_tx);
drivers/usb/usbip/vhci_sysfs.c +25 -5
@@ -185,6 +185,8 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci_hcd, __u32 rhport)usbip_dbg_vhci_sysfs ("enter\n" ); +mutex_lock (&vdev->ud.sysfs_lock); +/* lock */ spin_lock_irqsave (&vhci->lock, flags);spin_lock (&vdev->ud.lock);
@@ -195,6 +197,7 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci_hcd, __u32 rhport)/* unlock */ spin_unlock (&vdev->ud.lock);spin_unlock_irqrestore (&vhci->lock, flags); +mutex_unlock (&vdev->ud.sysfs_lock);return -EINVAL ; }
@@ -205,6 +208,8 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci_hcd, __u32 rhport)usbip_event_add (&vdev->ud,VDEV_EVENT_DOWN ); +mutex_unlock (&vdev->ud.sysfs_lock); +return 0 ; }
@@ -349,30 +354,36 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr,else vdev = &vhci->vhci_hcd_hs->vdev[rhport]; +mutex_lock (&vdev->ud.sysfs_lock); +/* Extract socket from fd. */ socket =sockfd_lookup (sockfd, &err);if (!socket) {dev_err (dev,"failed to lookup sock" ); -return -EINVAL ; + err = -EINVAL ; + goto unlock_mutex; }if (socket->type !=SOCK_STREAM ) {dev_err (dev,"Expecting SOCK_STREAM - found %d" , socket->type);sockfd_put (socket); -return -EINVAL ; + err = -EINVAL ; + goto unlock_mutex; }/* create threads before locking */ tcp_rx =kthread_create (vhci_rx_loop, &vdev->ud,"vhci_rx" );if (IS_ERR (tcp_rx)) {sockfd_put (socket); -return -EINVAL ; + err = -EINVAL ; + goto unlock_mutex; } tcp_tx =kthread_create (vhci_tx_loop, &vdev->ud,"vhci_tx" );if (IS_ERR (tcp_tx)) {kthread_stop (tcp_rx);sockfd_put (socket); -return -EINVAL ; + err = -EINVAL ; + goto unlock_mutex; }/* get task structs now */
@@ -397,7 +408,8 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr,* Will be retried from userspace * if there's another free port. */ -return -EBUSY ; + err = -EBUSY ; + goto unlock_mutex; } dev_info(dev, "pdev(%u) rhport(%u) sockfd(%d)\n",
@@ -422,7 +434,15 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr,rh_port_connect (vdev, speed); +dev_info (dev,"Device attached\n" ); + +mutex_unlock (&vdev->ud.sysfs_lock); +return count; + +unlock_mutex: +mutex_unlock (&vdev->ud.sysfs_lock); +return err; }static DEVICE_ATTR_WO (attach);
drivers/usb/usbip/vudc_dev.c +1 -0
@@ -572,6 +572,7 @@ static int init_vudc_hw(struct vudc *udc)init_waitqueue_head (&udc->tx_waitq);spin_lock_init (&ud->lock); +mutex_init (&ud->sysfs_lock); ud->status =SDEV_ST_AVAILABLE ; ud->side =USBIP_VUDC ;
drivers/usb/usbip/vudc_sysfs.c +5 -0
@@ -112,6 +112,7 @@ static ssize_t usbip_sockfd_store(struct device *dev,dev_err (dev,"no device" );return -ENODEV ; } +mutex_lock (&udc->ud.sysfs_lock);spin_lock_irqsave (&udc->lock, flags);/* Don't export what we don't have */ if (!udc->driver || !udc->pullup) {
@@ -187,6 +188,8 @@ static ssize_t usbip_sockfd_store(struct device *dev,wake_up_process (udc->ud.tcp_rx);wake_up_process (udc->ud.tcp_tx); + +mutex_unlock (&udc->ud.sysfs_lock);return count; }else {
@@ -207,6 +210,7 @@ static ssize_t usbip_sockfd_store(struct device *dev, }spin_unlock_irqrestore (&udc->lock, flags); +mutex_unlock (&udc->ud.sysfs_lock);return count;
@@ -216,6 +220,7 @@ static ssize_t usbip_sockfd_store(struct device *dev,spin_unlock_irq (&udc->ud.lock); unlock:spin_unlock_irqrestore (&udc->lock, flags); +mutex_unlock (&udc->ud.sysfs_lock);return ret; }
drivers/xen/events/events_base.c +5 -5
@@ -222,7 +222,7 @@ static int xen_irq_info_common_setup(struct irq_info *info, info->evtchn = evtchn; info->cpu = cpu; info->mask_reason =EVT_MASK_REASON_EXPLICIT ; -spin_lock_init (&info->lock); +raw_spin_lock_init (&info->lock); ret =set_evtchn_to_irq (evtchn, irq);if (ret <0 )
@@ -374,28 +374,28 @@ static void do_mask(struct irq_info *info, u8 reason) {unsigned long flags; -spin_lock_irqsave (&info->lock, flags); +raw_spin_lock_irqsave (&info->lock, flags);if (!info->mask_reason)mask_evtchn (info->evtchn); info->mask_reason |= reason; -spin_unlock_irqrestore (&info->lock, flags); +raw_spin_unlock_irqrestore (&info->lock, flags); }static void do_unmask (struct irq_info *info,u8 reason) {unsigned long flags; -spin_lock_irqsave (&info->lock, flags); +raw_spin_lock_irqsave (&info->lock, flags); info->mask_reason &= ~reason;if (!info->mask_reason)unmask_evtchn (info->evtchn); -spin_unlock_irqrestore (&info->lock, flags); +raw_spin_unlock_irqrestore (&info->lock, flags); }#ifdef CONFIG_X86
drivers/xen/events/events_internal.h +1 -1
@@ -45,7 +45,7 @@ struct irq_info {unsigned short eoi_cpu;/* EOI must happen on this cpu */ unsigned int irq_epoch;/* If eoi_cpu valid: irq_epoch of event */ u64 eoi_time;/* Time in jiffies when to EOI. */ -spinlock_t lock; +raw_spinlock_t lock;union {unsigned short virq;
fs/cifs/connect.c +0 -1
@@ -4198,7 +4198,6 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info, cifs_sb->prepath =kstrdup (pvolume_info->prepath,GFP_KERNEL );if (cifs_sb->prepath ==NULL )return -ENOMEM ; - cifs_sb->mnt_cifs_flags |=CIFS_MOUNT_USE_PREFIX_PATH ; }return 0 ;
fs/direct-io.c +3 -2
@@ -848,6 +848,7 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, struct buffer_head *map_bh) {int ret =0 ; +int boundary = sdio->boundary;/* dio_send_cur_page may clear it */ if (dio->op ==REQ_OP_WRITE ) {/*
@@ -886,10 +887,10 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, sdio->cur_page_fs_offset = sdio->block_in_file << sdio->blkbits; out:/* -* If sdio->boundary then we want to schedule the IO now to +* If boundary then we want to schedule the IO now to * avoid metadata seeks. */ -if (sdio->boundary) { +if (boundary) { ret =dio_send_cur_page (dio, sdio, map_bh);if (sdio->bio)dio_bio_submit (dio, sdio);
fs/hostfs/hostfs_kern.c +7 -12
@@ -139,10 +139,10 @@ static char *inode_name(struct inode *ino)static char *follow_link (char *link) { -int len, n;char *name, *resolved, *end; +int n; - name =__getname (); + name =kmalloc (PATH_MAX ,GFP_KERNEL );if (!name) { n = -ENOMEM ; goto out_free;
@@ -164,21 +164,18 @@ static char *follow_link(char *link)return name; *(end +1 ) ='\0' ; - len =strlen (link) +strlen (name) +1 ; - resolved =kmalloc (len,GFP_KERNEL ); + resolved =kasprintf (GFP_KERNEL ,"%s%s" , link, name);if (resolved ==NULL ) { n = -ENOMEM ; goto out_free; } -sprintf (resolved,"%s%s" , link, name); -__putname (name); -kfree (link); +kfree (name);return resolved; out_free: -__putname (name); +kfree (name);return ERR_PTR (n); }
@@ -918,18 +915,16 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent) sb->s_d_op = &simple_dentry_operations; sb->s_maxbytes =MAX_LFS_FILESIZE ; -/* NULL is printed as <NULL> by sprintf: avoid that. */ +/* NULL is printed as '(null)' by printf(): avoid that. */ if (req_root ==NULL ) req_root ="" ; err = -ENOMEM ; sb->s_fs_info = host_root_path = -kmalloc (strlen (root_ino) +strlen (req_root) +2 ,GFP_KERNEL ); +kasprintf (GFP_KERNEL ,"%s/%s" , root_ino, req_root);if (host_root_path ==NULL ) goto out; -sprintf (host_root_path,"%s/%s" , root_ino, req_root); - root_inode =new_inode (sb);if (!root_inode) goto out;
fs/ocfs2/aops.c +1 -10
@@ -2304,7 +2304,7 @@ static int ocfs2_dio_end_io_write(struct inode *inode,struct ocfs2_alloc_context *meta_ac =NULL ;handle_t *handle =NULL ;loff_t end = offset + bytes; -int ret =0 , credits =0 , locked =0 ; +int ret =0 , credits =0 ;ocfs2_init_dealloc_ctxt (&dealloc);
@@ -2315,13 +2315,6 @@ static int ocfs2_dio_end_io_write(struct inode *inode, !dwc->dw_orphaned) goto out; -/* ocfs2_file_write_iter will get i_mutex, so we need not lock if we -* are in that context. */ -if (dwc->dw_writer_pid !=task_pid_nr (current)) { -inode_lock (inode); - locked =1 ; - } - ret =ocfs2_inode_lock (inode, &di_bh,1 );if (ret <0 ) {mlog_errno (ret);
@@ -2402,8 +2395,6 @@ static int ocfs2_dio_end_io_write(struct inode *inode,if (meta_ac)ocfs2_free_alloc_context (meta_ac);ocfs2_run_deallocs (osb, &dealloc); -if (locked) -inode_unlock (inode);ocfs2_dio_free_write_ctx (inode, dwc);return ret;
fs/ocfs2/file.c +6 -2
@@ -1244,22 +1244,24 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) goto bail_unlock; } } +down_write (&OCFS2_I (inode)->ip_alloc_sem); handle =ocfs2_start_trans (osb,OCFS2_INODE_UPDATE_CREDITS +2 *ocfs2_quota_trans_credits (sb));if (IS_ERR (handle)) { status =PTR_ERR (handle);mlog_errno (status); - goto bail_unlock; + goto bail_unlock_alloc; } status =__dquot_transfer (inode, transfer_to);if (status <0 ) goto bail_commit; }else { +down_write (&OCFS2_I (inode)->ip_alloc_sem); handle =ocfs2_start_trans (osb,OCFS2_INODE_UPDATE_CREDITS );if (IS_ERR (handle)) { status =PTR_ERR (handle);mlog_errno (status); - goto bail_unlock; + goto bail_unlock_alloc; } }
@@ -1272,6 +1274,8 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) bail_commit:ocfs2_commit_trans (osb, handle); +bail_unlock_alloc: +up_write (&OCFS2_I (inode)->ip_alloc_sem); bail_unlock:if (status && inode_locked) {ocfs2_inode_unlock_tracker (inode,1 , &oh, had_lock);
include/linux/mlx5/mlx5_ifc.h +4 -4
@@ -415,11 +415,11 @@ struct mlx5_ifc_flow_table_prop_layout_bits {u8 reserved_at_60[0x18 ];u8 log_max_ft_num[0x8 ]; -u8 reserved_at_80[0x18 ]; +u8 reserved_at_80[0x10 ]; +u8 log_max_flow_counter[0x8 ];u8 log_max_destination[0x8 ]; -u8 log_max_flow_counter[0x8 ]; -u8 reserved_at_a8[0x10 ]; +u8 reserved_at_a0[0x18 ];u8 log_max_flow[0x8 ];u8 reserved_at_c0[0x40 ];
@@ -9669,7 +9669,7 @@ struct mlx5_ifc_pbmc_reg_bits {struct mlx5_ifc_bufferx_reg_bits buffer[10 ]; -u8 reserved_at_2e0[0x40 ]; +u8 reserved_at_2e0[0x80 ]; };struct mlx5_ifc_qtct_reg_bits {
include/linux/skmsg.h +6 -2
@@ -355,13 +355,17 @@ static inline void sk_psock_update_proto(struct sock *sk,static inline void sk_psock_restore_proto (struct sock *sk,struct sk_psock *psock) { - sk->sk_prot->unhash = psock->saved_unhash; -if (psock->sk_proto) {struct inet_connection_sock *icsk =inet_csk (sk);bool has_ulp = !!icsk->icsk_ulp_data;if (has_ulp) { +/* TLS does not have an unhash proto in SW cases, but we need +* to ensure we stop using the sock_map unhash routine because +* the associated psock is being removed. So use the original +* unhash handler. +*/ +WRITE_ONCE (sk->sk_prot->unhash, psock->saved_unhash);tcp_update_ulp (sk, psock->sk_proto, psock->saved_write_space); }else {
include/linux/virtio_net.h +2 -0
@@ -62,6 +62,8 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,return -EINVAL ; } +skb_reset_mac_header (skb); +if (hdr->flags &VIRTIO_NET_HDR_F_NEEDS_CSUM ) {u16 start =__virtio16_to_cpu (little_endian, hdr->csum_start);u16 off =__virtio16_to_cpu (little_endian, hdr->csum_offset);
include/net/netns/xfrm.h +3 -1
@@ -72,7 +72,9 @@ struct netns_xfrm {#if IS_ENABLED (CONFIG_IPV6 )struct dst_ops xfrm6_dst_ops;#endif -spinlock_t xfrm_state_lock; +spinlock_t xfrm_state_lock; +seqcount_t xfrm_state_hash_generation; +spinlock_t xfrm_policy_lock;struct mutex xfrm_cfg_mutex; };
include/net/red.h +2 -2
@@ -171,9 +171,9 @@ static inline void red_set_vars(struct red_vars *v)static inline bool red_check_params (u32 qth_min,u32 qth_max,u8 Wlog,u8 Scell_log,u8 *stab) { -if (fls (qth_min) + Wlog >32 ) +if (fls (qth_min) + Wlog >=32 )return false; -if (fls (qth_max) + Wlog >32 ) +if (fls (qth_max) + Wlog >=32 )return false;if (Scell_log >=32 )return false;
include/net/sock.h +9 -0
@@ -2150,6 +2150,15 @@ static inline void skb_set_owner_r(struct sk_buff *skb, struct sock *sk)sk_mem_charge (sk, skb->truesize); } +static inline void skb_set_owner_sk_safe (struct sk_buff *skb,struct sock *sk) +{ +if (sk &&refcount_inc_not_zero (&sk->sk_refcnt)) { +skb_orphan (skb); + skb->destructor = sock_efree; + skb->sk = sk; + } +} +void sk_reset_timer (struct sock *sk,struct timer_list *timer,unsigned long expires);
include/net/xfrm.h +1 -1
@@ -1098,7 +1098,7 @@ static inline int __xfrm_policy_check2(struct sock *sk, int dir,return __xfrm_policy_check (sk, ndir, skb, family);return (!net->xfrm.policy_count[dir] && !secpath_exists (skb)) || - (skb_dst (skb)->flags &DST_NOPOLICY ) || + (skb_dst (skb) && (skb_dst (skb)->flags &DST_NOPOLICY )) ||__xfrm_policy_check (sk, ndir, skb, family); }
kernel/gcov/clang.c +19 -10
@@ -70,7 +70,9 @@ struct gcov_fn_info {u32 ident;u32 checksum; +#if CONFIG_CLANG_VERSION <110000 u8 use_extra_checksum; +#endif u32 cfg_checksum;u32 num_counters;
@@ -145,10 +147,8 @@ void llvm_gcda_emit_function(u32 ident, const char *function_name, list_add_tail(&info->head, ¤t_info->functions); } -EXPORT_SYMBOL (llvm_gcda_emit_function);#else -void llvm_gcda_emit_function (u32 ident,u32 func_checksum, -u8 use_extra_checksum,u32 cfg_checksum) +void llvm_gcda_emit_function (u32 ident,u32 func_checksum,u32 cfg_checksum) {struct gcov_fn_info *info =kzalloc (sizeof (*info),GFP_KERNEL );
@@ -158,12 +158,11 @@ void llvm_gcda_emit_function(u32 ident, u32 func_checksum,INIT_LIST_HEAD (&info->head); info->ident = ident; info->checksum = func_checksum; - info->use_extra_checksum = use_extra_checksum; info->cfg_checksum = cfg_checksum; list_add_tail(&info->head, ¤t_info->functions); } -EXPORT_SYMBOL (llvm_gcda_emit_function);#endif +EXPORT_SYMBOL (llvm_gcda_emit_function);void llvm_gcda_emit_arcs (u32 num_counters,u64 *counters) {
@@ -293,11 +292,16 @@ int gcov_info_is_compatible(struct gcov_info *info1, struct gcov_info *info2) !list_is_last(&fn_ptr2->head, &info2->functions)) {if (fn_ptr1->checksum != fn_ptr2->checksum)return false; +#if CONFIG_CLANG_VERSION <110000 if (fn_ptr1->use_extra_checksum != fn_ptr2->use_extra_checksum)return false;if (fn_ptr1->use_extra_checksum && fn_ptr1->cfg_checksum != fn_ptr2->cfg_checksum)return false; +#else +if (fn_ptr1->cfg_checksum != fn_ptr2->cfg_checksum) +return false; +#endif fn_ptr1 =list_next_entry (fn_ptr1, head); fn_ptr2 =list_next_entry (fn_ptr2, head); }
@@ -529,17 +533,22 @@ static size_t convert_to_gcda(char *buffer, struct gcov_info *info)list_for_each_entry (fi_ptr, &info->functions, head) {u32 i; -u32 len =2 ; - -if (fi_ptr->use_extra_checksum) - len++; pos +=store_gcov_u32 (buffer, pos,GCOV_TAG_FUNCTION ); - pos +=store_gcov_u32 (buffer, pos, len); +#if CONFIG_CLANG_VERSION <110000 + pos +=store_gcov_u32 (buffer, pos, + fi_ptr->use_extra_checksum ?3 :2 ); +#else + pos +=store_gcov_u32 (buffer, pos,3 ); +#endif pos +=store_gcov_u32 (buffer, pos, fi_ptr->ident); pos +=store_gcov_u32 (buffer, pos, fi_ptr->checksum); +#if CONFIG_CLANG_VERSION <110000 if (fi_ptr->use_extra_checksum) pos +=store_gcov_u32 (buffer, pos, fi_ptr->cfg_checksum); +#else + pos +=store_gcov_u32 (buffer, pos, fi_ptr->cfg_checksum); +#endif pos +=store_gcov_u32 (buffer, pos,GCOV_TAG_COUNTER_BASE ); pos +=store_gcov_u32 (buffer, pos, fi_ptr->num_counters *2 );
kernel/workqueue.c +1 -1
@@ -1411,7 +1411,6 @@ static void __queue_work(int cpu, struct workqueue_struct *wq,*/ lockdep_assert_irqs_disabled (); -debug_work_activate (work);/* if draining, only works from the same workqueue are allowed */ if (unlikely(wq->flags & __WQ_DRAINING) &&
@@ -1493,6 +1492,7 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, worklist = &pwq->delayed_works; } +debug_work_activate (work);insert_work (pwq, work, worklist, work_flags); out:
net/batman-adv/translation-table.c +2 -0
@@ -891,6 +891,7 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,hlist_for_each_entry_rcu (vlan, &orig_node->vlan_list, list) { tt_vlan->vid =htons (vlan->vid); tt_vlan->crc =htonl (vlan->tt.crc); + tt_vlan->reserved =0 ; tt_vlan++; }
@@ -974,6 +975,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv, tt_vlan->vid =htons (vlan->vid); tt_vlan->crc =htonl (vlan->tt.crc); + tt_vlan->reserved =0 ; tt_vlan++; }
net/can/bcm.c +6 -4
@@ -88,6 +88,8 @@ MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR ("Oliver Hartkopp <[email protected]>" );MODULE_ALIAS ("can-proto-2" ); +#define BCM_MIN_NAMELEN CAN_REQUIRED_SIZE(struct sockaddr_can, can_ifindex) +/* * easy access to the first 64 bit of can(fd)_frame payload. cp->data is * 64 bit aligned so the offset has to be multiples of 8 which is ensured
@@ -1294,7 +1296,7 @@ static int bcm_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)/* no bound device as default => check msg_name */ DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name); -if (msg->msg_namelen <CAN_REQUIRED_SIZE (*addr, can_ifindex)) +if (msg->msg_namelen <BCM_MIN_NAMELEN )return -EINVAL ;if (addr->can_family !=AF_CAN )
@@ -1536,7 +1538,7 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,struct net *net =sock_net (sk);int ret =0 ; -if (len <CAN_REQUIRED_SIZE (*addr, can_ifindex)) +if (len <BCM_MIN_NAMELEN )return -EINVAL ;lock_sock (sk);
@@ -1618,8 +1620,8 @@ static int bcm_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,sock_recv_ts_and_drops (msg, sk, skb);if (msg->msg_name) { -__sockaddr_check_size (sizeof (struct sockaddr_can )); - msg->msg_namelen =sizeof (struct sockaddr_can ); +__sockaddr_check_size (BCM_MIN_NAMELEN ); + msg->msg_namelen =BCM_MIN_NAMELEN ;memcpy (msg->msg_name, skb->cb, msg->msg_namelen); }
net/can/raw.c +8 -6
@@ -62,6 +62,8 @@ MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR ("Urs Thuermann <[email protected]>" );MODULE_ALIAS ("can-proto-1" ); +#define RAW_MIN_NAMELEN CAN_REQUIRED_SIZE(struct sockaddr_can, can_ifindex) +#define MASK_ALL 0/* A raw socket has a list of can_filters attached to it, each receiving
@@ -396,7 +398,7 @@ static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)int err =0 ;int notify_enetdown =0 ;
Lines of this file are not shown. View the raw message.
sound/soc/intel/atom/sst-mfld-platform-pcm.c +3 -3
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.4.112 kernel.
All users of the 5.4 kernel series must upgrade.
Quoted 9 lines
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-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=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.4.112,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.4.y
Version: 5.4.112
Commit: 8f55ad4daf001b6ee8ddf672e14475a35403b258
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 5764
passed: 5764
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 5764
passed: 5764
failed: 0
timeout: 0
--------------------------------------------------------------------