Linux 5.8.14
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.8.14 kernel.
All users of the 5.8 kernel series must upgrade.
The updated 5.8.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.8.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/gpio/sgpio-aspeed.txt | 5 Makefile | 2 block/blk-mq.c | 18 +- block/blk-settings.c | 46 +++++ drivers/clk/samsung/clk-exynos4.c | 4 drivers/clk/samsung/clk-exynos5420.c | 5 drivers/clk/socfpga/clk-s10.c | 2 drivers/clk/tegra/clk-pll.c | 3 drivers/clk/tegra/clk-tegra210-emc.c | 2 drivers/clocksource/timer-gx6605s.c | 1 drivers/cpuidle/cpuidle-psci.c | 4 drivers/dma/dmatest.c | 26 ++- drivers/gpio/gpio-amd-fch.c | 2 drivers/gpio/gpio-aspeed-sgpio.c | 134 ++++++++++------ drivers/gpio/gpio-aspeed.c | 4 drivers/gpio/gpio-mockup.c | 2 drivers/gpio/gpio-pca953x.c | 7 drivers/gpio/gpio-siox.c | 1 drivers/gpio/gpio-sprd.c | 3 drivers/gpio/gpio-tc3589x.c | 2 drivers/gpio/gpiolib.c | 34 +++- drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 2 drivers/gpu/drm/i915/gvt/vgpu.c | 6 drivers/gpu/drm/sun4i/sun8i_mixer.c | 2 drivers/i2c/busses/i2c-cpm.c | 3 drivers/i2c/busses/i2c-i801.c | 1 drivers/i2c/busses/i2c-npcm7xx.c | 9 + drivers/iio/adc/qcom-spmi-adc5.c | 2 drivers/input/mouse/trackpoint.c | 2 drivers/input/serio/i8042-x86ia64io.h | 7 drivers/iommu/amd/init.c | 56 +----- drivers/iommu/exynos-iommu.c | 8 drivers/memstick/core/memstick.c | 4 drivers/mmc/host/sdhci-pci-core.c | 3 drivers/net/dsa/ocelot/felix_vsc9959.c | 16 - drivers/net/ethernet/dec/tulip/de2104x.c | 2 drivers/net/hyperv/hyperv_net.h | 3 drivers/net/hyperv/netvsc_drv.c | 21 ++ drivers/net/usb/rndis_host.c | 2 drivers/net/wan/hdlc_cisco.c | 1 drivers/net/wan/hdlc_fr.c | 6 drivers/net/wan/hdlc_ppp.c | 1 drivers/net/wan/lapbether.c | 4 drivers/net/wireless/mediatek/mt76/mt7915/init.c | 8 drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 2 drivers/net/wireless/ti/wlcore/cmd.h | 1 drivers/net/wireless/ti/wlcore/main.c | 4 drivers/nvme/host/core.c | 15 + drivers/nvme/host/fc.c | 6 drivers/nvme/host/pci.c | 17 +- drivers/phy/ti/phy-am654-serdes.c | 6 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 4 drivers/pinctrl/mvebu/pinctrl-armada-xp.c | 2 drivers/pinctrl/qcom/pinctrl-sm8250.c | 2 drivers/scsi/iscsi_tcp.c | 22 +- drivers/scsi/sd.c | 34 ++-- drivers/scsi/sd.h | 14 - drivers/scsi/sd_zbc.c | 131 ++++++++------- drivers/spi/spi-fsl-espi.c | 5 drivers/target/target_core_transport.c | 3 drivers/usb/core/driver.c | 50 ++++- drivers/usb/gadget/function/f_ncm.c | 30 --- drivers/usb/usbip/stub_dev.c | 6 drivers/xen/events/events_base.c | 29 ++- fs/autofs/waitq.c | 2 fs/btrfs/dev-replace.c | 40 ++++ fs/eventpoll.c | 72 +++----- fs/fuse/file.c | 25 +- fs/io_uring.c | 8 fs/nfs/dir.c | 3 fs/nfs/flexfilelayout/flexfilelayout.c | 11 - fs/nfs/nfs42proc.c | 10 + fs/pipe.c | 62 ++++--- fs/read_write.c | 8 fs/splice.c | 8 fs/vboxsf/super.c | 2 include/linux/blkdev.h | 2 include/linux/memstick.h | 1 include/linux/pipe_fs_i.h | 5 kernel/trace/ftrace.c | 6 kernel/trace/trace.c | 48 ++--- kernel/trace/trace_output.c | 12 - lib/random32.c | 2 net/mac80211/rx.c | 3 net/mac80211/vht.c | 8 scripts/dtc/Makefile | 2 scripts/kallsyms.c | 16 + tools/io_uring/io_uring-bench.c | 4 tools/lib/bpf/Makefile | 2 89 files changed, 760 insertions(+), 461 deletions(-)
Adrian Huang (1):
iommu/amd: Fix the overwritten field in IVMD header
Ahmad Fatoum (1):
gpio: siox: explicitly support only threaded irqs
Al Viro (5):
fuse: fix the ->direct_IO() treatment of iov_iter
epoll: do not insert into poll queues until all sanity checks are done
epoll: replace ->visited/visited_list with generation count
epoll: EPOLL_CTL_ADD: close the race in decision to take fast path ep_create_wakeup_source(): dentry name can change under you...
Aloka Dixit (1):
mac80211: Fix radiotap header channel flag for 6GHz band
Andy Shevchenko (2):
gpio: pca953x: Correctly initialize registers 6 and 7 for PCA957x
gpiolib: Fix line event handling in syscall compatible mode
Bartosz Golaszewski (1):
gpio: mockup: fix resource leak in error path
Bryan O'Donoghue (1):
USB: gadget: f_ncm: Fix NDP16 datagram validation
Chaitanya Kulkarni (1):
nvme-core: get/put ctrl and transport module in nvme_dev_open/release()
Chris Packham (2):
spi: fsl-espi: Only process interrupts for expected events
pinctrl: mvebu: Fix i2c sda definition for 98DX3236
Damien Le Moal (2):
scsi: sd: sd_zbc: Fix handling of host-aware ZBC disks
scsi: sd: sd_zbc: Fix ZBC disk initialization
Dan Carpenter (1):
phy: ti: am654: Fix a leak in serdes_am654_probe()
David Milburn (1):
nvme-pci: disable the write zeros command for Intel 600P/P3100
Dexuan Cui (1):
hv_netvsc: Cache the current data path to avoid duplicate call and message
Dinh Nguyen (1):
clk: socfpga: stratix10: fix the divider for the emac_ptp_free_clk
Dmitry Baryshkov (2):
iio: adc: qcom-spmi-adc5: fix driver name
pinctrl: qcom: sm8250: correct sdc2_clk
Douglas Gilbert (1):
tools/io_uring: fix compile breakage
Ed Wildgoose (1):
gpio: amd-fch: correct logic of GPIO_LINE_DIRECTION
Felix Fietkau (2):
mt76: mt7915: use ieee80211_free_txskb to free tx skbs
mac80211: do not allow bigger VHT MPDUs than the hardware supports
Filipe Manana (1):
btrfs: fix filesystem corruption after a device replace
Greg Kroah-Hartman (1):
Linux 5.8.14
Guo Ren (1):
clocksource/drivers/timer-gx6605s: Fixup counter reload
Hanks Chen (1):
pinctrl: mediatek: check mtk_is_virt_gpio input parameter
Hans de Goede (2):
mmc: sdhci: Workaround broken command queuing on Intel GLK based IRBIS models
vboxsf: Fix the check for the old binary mount-arguments struct
James Smart (1):
nvme-fc: fail new connections to a deleted host or remote port
Jean Delvare (2):
i2c: i801: Exclude device from suspend direct complete optimization drm/amdgpu: restore proper ref count in amdgpu_display_crtc_set_config
Jeffrey Mitchell (1):
nfs: Fix security label length not being reset
Jens Axboe (2):
io_uring: always delete double poll wait entry on match
io_uring: mark statx/files_update/epoll_ctl as non-SQPOLL
Jeremy Kerr (2):
gpio/aspeed-sgpio: enable access to all 80 input & output sgpios gpio/aspeed-sgpio: don't enable all interrupts by default
Jiri Kosina (1):
Input: i8042 - add nopnp quirk for Acer Aspire 5 A515
Juergen Gross (1):
xen/events: don't use chip_data for legacy IRQs
Kai-Heng Feng (1):
memstick: Skip allocating card when removing host
Linus Torvalds (2):
autofs: use __kernel_write() for the autofs pipe writing
pipe: remove pipe_wait() and fix wakeup race with splice
Lucy Yan (1):
net: dec: de2104x: Increase receive ring size for Tulip
M. Vefa Bicakci (4):
Revert "usbip: Implement a match function to fix usbip" usbcore/driver: Fix specific driver selection usbcore/driver: Fix incorrect downcast usbcore/driver: Accommodate usbip
Marek Szyprowski (2):
clk: samsung: Keep top BPLL mux on Exynos542x enabled
clk: samsung: exynos4: mark 'chipid' clock as CLK_IGNORE_UNUSED
Mark Mielke (1):
scsi: iscsi: iscsi_tcp: Avoid holding spinlock while calling getpeername()
Martin Cerveny (1):
drm/sun4i: mixer: Extend regmap max_register
Masahiro Yamada (1):
scripts/kallsyms: skip ppc compiler stub *.long_branch.* / *.plt_branch.*
Mauro Carvalho Chehab (1):
Revert "wlcore: Adding suppoprt for IGTK key in wlcore driver"
Naveen N. Rao (1):
libbpf: Remove arch-specific include path in Makefile
Nicolas VINCENT (1):
i2c: cpm: Fix i2c_ram structure
Olga Kornievskaia (1):
NFSv4.2: fix client's attribute cache management for copy_file_range
Olympia Giannou (1):
rndis_host: increase sleep time in the query-response loop
Sebastian Andrzej Siewior (1):
tracing: Make the space reserved for the pid wider
Steven Rostedt (VMware) (2):
ftrace: Move RCU is watching check after recursion check
tracing: Fix trace_find_next_entry() accounting of temp buffer size
Sudhakar Panneerselvam (1):
scsi: target: Fix lun lookup for TARGET_SCF_LOOKUP_LUN_FROM_TAG case
Taiping Lai (1):
gpio: sprd: Clear interrupt when setting the type as edge
Tali Perry (1):
i2c: npcm7xx: Clear LAST bit after a failed transaction.
Tao Ren (1):
gpio: aspeed: fix ast2600 bank properties
Thibaut Sautereau (1):
random32: Restore __latent_entropy attribute on net_rand_state
Thierry Reding (2):
clk: tegra: Always program PLL_E when enabled
clk: tegra: Fix missing prototype for tegra210_clk_register_emc()
Trond Myklebust (1):
pNFS/flexfiles: Ensure we initialise the mirror bsizes correctly on read
Ulf Hansson (1):
cpuidle: psci: Fix suspicious RCU usage
Uwe Kleine-König (1):
scripts/dtc: only append to HOST_EXTRACFLAGS instead of overwriting
Vincent Huang (1):
Input: trackpoint - enable Synaptics trackpoints
Vladimir Murzin (1):
dmaengine: dmatest: Prevent to run on misconfigured channel
Xianting Tian (1):
nvme-pci: fix NULL req in completion handler
Xiaoliang Yang (1):
net: dsa: felix: fix some key offsets for IP4_TCP_UDP VCAP IS2 entries
Xie He (3):
drivers/net/wan/hdlc_fr: Add needed_headroom for PVC devices
drivers/net/wan/lapbether: Make skb->protocol consistent with the header
drivers/net/wan/hdlc: Set skb->protocol before transmittingYe Li (1):
gpio: pca953x: Fix uninitialized pending variable
Yu Kuai (1):
iommu/exynos: add missing put_device() call in exynos_iommu_of_xlate()
Zhenyu Wang (1):
drm/i915/gvt: Fix port number for BDW on EDID region setup
dillon min (1):
gpio: tc35894: fix up tc35894 interrupt configuration
yangerkun (1):
blk-mq: call commit_rqs while list empty but error happen
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/gpio/sgpio-aspeed.txt +3 -2
@@ -20,8 +20,9 @@ Required properties: - gpio-controller : Marks the device node as a GPIO controller - interrupts : Interrupt specifier, see interrupt-controller/interrupts.txt - interrupt-controller : Mark the GPIO controller as an interrupt-controller -- ngpios : number of GPIO lines, see gpio.txt - (should be multiple of 8, up to 80 pins) +- ngpios : number of *hardware* GPIO lines, see gpio.txt. This will expose + 2 software GPIOs per hardware GPIO: one for hardware input, one for hardware + output. Up to 80 pins, must be a multiple of 8. - clocks : A phandle to the APB clock for SGPM clock division - bus-frequency : SGPM CLK frequency
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 8 -SUBLEVEL = 13 +SUBLEVEL = 14 EXTRAVERSION = NAME = Kleptomaniac Octopus
block/blk-mq.c +9 -9
@@ -1304,6 +1304,11 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list, hctx->dispatched[queued_to_index (queued)]++; +/* If we didn't flush the entire list, we could have told the driver +* there was more coming, but that turned out to be a lie. +*/ +if ((!list_empty (list) || errors) && q->mq_ops->commit_rqs && queued) + q->mq_ops->commit_rqs (hctx);/* * Any items that need requeuing? Stuff them into hctx->dispatch, * that is where we will continue on next queue run.
@@ -1311,14 +1316,6 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list,if (!list_empty (list)) {bool needs_restart; -/* -* If we didn't flush the entire list, we could have told -* the driver there was more coming, but that turned out to -* be a lie. -*/ -if (q->mq_ops->commit_rqs && queued) - q->mq_ops->commit_rqs (hctx); -spin_lock (&hctx->lock);list_splice_tail_init (list, &hctx->dispatch);spin_unlock (&hctx->lock);
@@ -1971,6 +1968,7 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx, struct list_head *list) {int queued =0 ; +int errors =0 ;while (!list_empty (list)) {blk_status_t ret;
@@ -1987,6 +1985,7 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,break ; }blk_mq_end_request (rq, ret); + errors++; }else queued++; }
@@ -1996,7 +1995,8 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,* the driver there was more coming, but that turned out to * be a lie. */ -if (!list_empty (list) && hctx->queue->mq_ops->commit_rqs && queued) +if ((!list_empty (list) || errors) && + hctx->queue->mq_ops->commit_rqs && queued) hctx->queue->mq_ops->commit_rqs (hctx); }
block/blk-settings.c +46 -0
52 lines not on this page · raw message
drivers/clk/samsung/clk-exynos4.c +2 -2
@@ -927,7 +927,7 @@ static const struct samsung_gate_clock exynos4210_gate_clks[] __initconst = {GATE (CLK_PCIE ,"pcie" ,"aclk133" ,GATE_IP_FSYS ,14 ,0 ,0 ),GATE (CLK_SMMU_PCIE ,"smmu_pcie" ,"aclk133" ,GATE_IP_FSYS ,18 ,0 ,0 ),GATE (CLK_MODEMIF ,"modemif" ,"aclk100" ,GATE_IP_PERIL ,28 ,0 ,0 ), -GATE (CLK_CHIPID ,"chipid" ,"aclk100" ,E4210_GATE_IP_PERIR ,0 ,0 ,0 ), +GATE (CLK_CHIPID ,"chipid" ,"aclk100" ,E4210_GATE_IP_PERIR ,0 ,CLK_IGNORE_UNUSED ,0 ),GATE (CLK_SYSREG ,"sysreg" ,"aclk100" ,E4210_GATE_IP_PERIR ,0 ,CLK_IGNORE_UNUSED ,0 ), GATE(CLK_HDMI_CEC, "hdmi_cec", "aclk100", E4210_GATE_IP_PERIR, 11, 0,
@@ -969,7 +969,7 @@ static const struct samsung_gate_clock exynos4x12_gate_clks[] __initconst = { 0),GATE (CLK_TSADC ,"tsadc" ,"aclk133" ,E4X12_GATE_BUS_FSYS1 ,16 ,0 ,0 ),GATE (CLK_MIPI_HSI ,"mipi_hsi" ,"aclk133" ,GATE_IP_FSYS ,10 ,0 ,0 ), -GATE (CLK_CHIPID ,"chipid" ,"aclk100" ,E4X12_GATE_IP_PERIR ,0 ,0 ,0 ), +GATE (CLK_CHIPID ,"chipid" ,"aclk100" ,E4X12_GATE_IP_PERIR ,0 ,CLK_IGNORE_UNUSED ,0 ),GATE (CLK_SYSREG ,"sysreg" ,"aclk100" ,E4X12_GATE_IP_PERIR ,1 ,CLK_IGNORE_UNUSED ,0 ), GATE(CLK_HDMI_CEC, "hdmi_cec", "aclk100", E4X12_GATE_IP_PERIR, 11, 0,
drivers/clk/samsung/clk-exynos5420.c +5 -0
@@ -1655,6 +1655,11 @@ static void __init exynos5x_clk_init(struct device_node *np,* main G3D clock enablement status. */ clk_prepare_enable (__clk_lookup ("mout_sw_aclk_g3d" )); +/* +* Keep top BPLL mux enabled permanently to ensure that DRAM operates +* properly. +*/ +clk_prepare_enable (__clk_lookup ("mout_bpll" ));samsung_clk_of_add_provider (np, ctx); }
drivers/clk/socfpga/clk-s10.c +1 -1
@@ -209,7 +209,7 @@ static const struct stratix10_perip_cnt_clock s10_main_perip_cnt_clks[] = { {STRATIX10_EMAC_B_FREE_CLK ,"emacb_free_clk" ,NULL , emacb_free_mux,ARRAY_SIZE (emacb_free_mux), 0, 0, 2, 0xB0, 1}, { STRATIX10_EMAC_PTP_FREE_CLK, "emac_ptp_free_clk", NULL, emac_ptp_free_mux, - ARRAY_SIZE(emac_ptp_free_mux), 0, 0, 4, 0xB0, 2}, + ARRAY_SIZE(emac_ptp_free_mux), 0, 0, 2, 0xB0, 2}, { STRATIX10_GPIO_DB_FREE_CLK, "gpio_db_free_clk", NULL, gpio_db_free_mux, ARRAY_SIZE(gpio_db_free_mux), 0, 0, 0, 0xB0, 3}, { STRATIX10_SDMMC_FREE_CLK, "sdmmc_free_clk", NULL, sdmmc_free_mux,
drivers/clk/tegra/clk-pll.c +0 -3
@@ -1601,9 +1601,6 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw)unsigned long flags =0 ;unsigned long input_rate; -if (clk_pll_is_enabled (hw)) -return 0 ; - input_rate =clk_hw_get_rate (clk_hw_get_parent (hw));if (_get_table_rate (hw, &sel, pll->params->fixed_rate, input_rate))
drivers/clk/tegra/clk-tegra210-emc.c +2 -0
@@ -12,6 +12,8 @@#include <linux/io.h> #include <linux/slab.h> +#include "clk.h" +#define CLK_SOURCE_EMC 0x19c#define CLK_SOURCE_EMC_2X_CLK_SRC GENMASK(31, 29)#define CLK_SOURCE_EMC_MC_EMC_SAME_FREQ BIT(16)
drivers/clocksource/timer-gx6605s.c +1 -0
@@ -28,6 +28,7 @@ static irqreturn_t gx6605s_timer_interrupt(int irq, void *dev)void __iomem *base =timer_of_base (to_timer_of (ce));writel_relaxed (GX6605S_STATUS_CLR , base +TIMER_STATUS ); +writel_relaxed (0 , base +TIMER_INI ); ce->event_handler (ce);
drivers/cpuidle/cpuidle-psci.c +2 -2
@@ -64,7 +64,7 @@ static int psci_enter_domain_idle_state(struct cpuidle_device *dev,return -1 ;/* Do runtime PM to manage a hierarchical CPU toplogy. */ -pm_runtime_put_sync_suspend (pd_dev); +RCU_NONIDLE (pm_runtime_put_sync_suspend (pd_dev)); state =psci_get_domain_state ();if (!state)
@@ -72,7 +72,7 @@ static int psci_enter_domain_idle_state(struct cpuidle_device *dev, ret =psci_cpu_suspend_enter (state) ?-1 : idx; -pm_runtime_get_sync (pd_dev); +RCU_NONIDLE (pm_runtime_get_sync (pd_dev));cpu_pm_exit ();
drivers/dma/dmatest.c +21 -5
@@ -129,6 +129,7 @@ struct dmatest_params {* @nr_channels: number of channels under test * @lock: access protection to the fields of this structure * @did_init: module has been initialized completely +* @last_error: test has faced configuration issues */ static struct dmatest_info { /* Test parameters */
@@ -137,6 +138,7 @@ static struct dmatest_info {/* Internal state */ struct list_head channels;unsigned int nr_channels; +int last_error;struct mutex lock;bool did_init; } test_info = {
@@ -1175,10 +1177,22 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp)return ret; }else if (dmatest_run) {if (!is_threaded_test_pending (info)) { -pr_info ("No channels configured, continue with any\n" ); -if (!is_threaded_test_run (info)) -stop_threaded_test (info); -add_threaded_test (info); +/* +* We have nothing to run. This can be due to: +*/ + ret = info->last_error; +if (ret) { +/* 1) Misconfiguration */ +pr_err ("Channel misconfigured, can't continue\n" ); +mutex_unlock (&info->lock); +return ret; + }else { +/* 2) We rely on defaults */ +pr_info ("No channels configured, continue with any\n" ); +if (!is_threaded_test_run (info)) +stop_threaded_test (info); +add_threaded_test (info); + } }start_threaded_tests (info); }else {
@@ -1195,7 +1209,7 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp)struct dmatest_info *info = &test_info;struct dmatest_chan *dtc;char chan_reset_val[20 ]; -int ret =0 ; +int ret;mutex_lock (&info->lock); ret =param_set_copystring (val, kp);
@@ -1250,12 +1264,14 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp) goto add_chan_err; } + info->last_error = ret;mutex_unlock (&info->lock);return ret; add_chan_err:param_set_copystring (chan_reset_val, kp); + info->last_error = ret;mutex_unlock (&info->lock);return ret;
drivers/gpio/gpio-amd-fch.c +1 -1
@@ -92,7 +92,7 @@ static int amd_fch_gpio_get_direction(struct gpio_chip *gc, unsigned int gpio) ret = (readl_relaxed (ptr) &AMD_FCH_GPIO_FLAG_DIRECTION );spin_unlock_irqrestore (&priv->lock, flags); -return ret ?GPIO_LINE_DIRECTION_IN :GPIO_LINE_DIRECTION_OUT ; +return ret ?GPIO_LINE_DIRECTION_OUT :GPIO_LINE_DIRECTION_IN ; } static void amd_fch_gpio_set(struct gpio_chip *gc,
drivers/gpio/gpio-aspeed-sgpio.c +87 -47
248 lines not on this page · raw message
drivers/gpio/gpio-aspeed.c +2 -2
@@ -1114,8 +1114,8 @@ static const struct aspeed_gpio_config ast2500_config =static const struct aspeed_bank_props ast2600_bank_props[] = {/* input output */ - {5 ,0xffffffff ,0x0000ffff },/* U/V/W/X */ - {6 ,0xffff0000 ,0x0fff0000 },/* Y/Z */ + {5 ,0xffffffff ,0xffffff00 },/* U/V/W/X */ + {6 ,0x0000ffff ,0x0000ffff },/* Y/Z */ { }, };
drivers/gpio/gpio-mockup.c +2 -0
@@ -552,6 +552,7 @@ static int __init gpio_mockup_init(void) err =platform_driver_register (&gpio_mockup_driver);if (err) {gpio_mockup_err ("error registering platform driver\n" ); +debugfs_remove_recursive (gpio_mockup_dbg_dir);return err; }
@@ -582,6 +583,7 @@ static int __init gpio_mockup_init(void)gpio_mockup_err ("error registering device" );platform_driver_unregister (&gpio_mockup_driver);gpio_mockup_unregister_pdevs (); +debugfs_remove_recursive (gpio_mockup_dbg_dir);return PTR_ERR (pdev); }
drivers/gpio/gpio-pca953x.c +5 -2
@@ -813,7 +813,7 @@ static irqreturn_t pca953x_irq_handler(int irq, void *devid) {struct pca953x_chip *chip = devid;struct gpio_chip *gc = &chip->gpio_chip; -DECLARE_BITMAP (pending,MAX_LINE ); + DECLARE_BITMAP(pending, MAX_LINE) = {};int level;bool ret;
@@ -938,6 +938,7 @@ static int device_pca95xx_init(struct pca953x_chip *chip, u32 invert)static int device_pca957x_init (struct pca953x_chip *chip,u32 invert) {DECLARE_BITMAP (val,MAX_LINE ); +unsigned int i;int ret; ret =device_pca95xx_init (chip, invert);
@@ -945,7 +946,9 @@ static int device_pca957x_init(struct pca953x_chip *chip, u32 invert) goto out;/* To enable register 6, 7 to control pull up and pull down */ -memset (val,0x02 ,NBANK (chip)); +for (i =0 ; i <NBANK (chip); i++) +bitmap_set_value8 (val,0x02 , i *BANK_SZ ); + ret =pca953x_write_regs (chip,PCA957X_BKEN , val);if (ret) goto out;
drivers/gpio/gpio-siox.c +1 -0
@@ -245,6 +245,7 @@ static int gpio_siox_probe(struct siox_device *sdevice) girq->chip = &ddata->ichip; girq->default_type =IRQ_TYPE_NONE ; girq->handler = handle_level_irq; + girq->threaded = true; ret =devm_gpiochip_add_data (dev, &ddata->gchip,NULL );if (ret)
drivers/gpio/gpio-sprd.c +3 -0
@@ -149,17 +149,20 @@ static int sprd_gpio_irq_set_type(struct irq_data *data,sprd_gpio_update (chip, offset,SPRD_GPIO_IS ,0 );sprd_gpio_update (chip, offset,SPRD_GPIO_IBE ,0 );sprd_gpio_update (chip, offset,SPRD_GPIO_IEV ,1 ); +sprd_gpio_update (chip, offset,SPRD_GPIO_IC ,1 );irq_set_handler_locked (data, handle_edge_irq);break ;case IRQ_TYPE_EDGE_FALLING :sprd_gpio_update (chip, offset,SPRD_GPIO_IS ,0 );sprd_gpio_update (chip, offset,SPRD_GPIO_IBE ,0 );sprd_gpio_update (chip, offset,SPRD_GPIO_IEV ,0 ); +sprd_gpio_update (chip, offset,SPRD_GPIO_IC ,1 );irq_set_handler_locked (data, handle_edge_irq);break ;case IRQ_TYPE_EDGE_BOTH :sprd_gpio_update (chip, offset,SPRD_GPIO_IS ,0 );sprd_gpio_update (chip, offset,SPRD_GPIO_IBE ,1 ); +sprd_gpio_update (chip, offset,SPRD_GPIO_IC ,1 );irq_set_handler_locked (data, handle_edge_irq);break ;case IRQ_TYPE_LEVEL_HIGH :
drivers/gpio/gpio-tc3589x.c +1 -1
@@ -212,7 +212,7 @@ static void tc3589x_gpio_irq_sync_unlock(struct irq_data *d)continue ; tc3589x_gpio->oldregs[i][j] = new; -tc3589x_reg_write (tc3589x, regmap[i] + j *8 , new); +tc3589x_reg_write (tc3589x, regmap[i] + j, new); } }
drivers/gpio/gpiolib.c +30 -4
@@ -836,6 +836,21 @@ static __poll_t lineevent_poll(struct file *filep,return events; } +static ssize_t lineevent_get_size (void ) +{ +#ifdef __x86_64__ +/* i386 has no padding after 'id' */ +if (in_ia32_syscall ()) { +struct compat_gpioeevent_data { +compat_u64 timestamp; +u32 id; + }; + +return sizeof (struct compat_gpioeevent_data ); + } +#endif +return sizeof (struct gpioevent_data ); +} static ssize_t lineevent_read(struct file *filep, char __user *buf,
@@ -845,9 +860,20 @@ static ssize_t lineevent_read(struct file *filep,struct lineevent_state *le = filep->private_data;struct gpioevent_data ge;ssize_t bytes_read =0 ; +ssize_t ge_size;int ret; -if (count <sizeof (ge)) +/* +* When compatible system call is being used the struct gpioevent_data, +* in case of at least ia32, has different size due to the alignment +* differences. Because we have first member 64 bits followed by one of +* 32 bits there is no gap between them. The only difference is the +* padding at the end of the data structure. Hence, we calculate the +* actual sizeof() and pass this as an argument to copy_to_user() to +* drop unneeded bytes from the output. +*/ + ge_size =lineevent_get_size (); +if (count < ge_size)return -EINVAL ; do {
@@ -883,10 +909,10 @@ static ssize_t lineevent_read(struct file *filep,break ; } -if (copy_to_user (buf + bytes_read, &ge,sizeof (ge))) +if (copy_to_user (buf + bytes_read, &ge, ge_size))return -EFAULT ; - bytes_read +=sizeof (ge); - }while (count >= bytes_read +sizeof (ge)); + bytes_read += ge_size; + }while (count >= bytes_read + ge_size);return bytes_read; }
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +1 -1
@@ -297,7 +297,7 @@ int amdgpu_display_crtc_set_config(struct drm_mode_set *set,take the current one */ if (active && !adev->have_disp_power_ref) { adev->have_disp_power_ref = true; - goto out; +return ret; }/* if we have no active crtcs, then drop the power ref we got before */
drivers/gpu/drm/i915/gvt/vgpu.c +5 -1
@@ -367,6 +367,7 @@ void intel_gvt_destroy_idle_vgpu(struct intel_vgpu *vgpu)static struct intel_vgpu *__intel_gvt_create_vgpu (struct intel_gvt *gvt,struct intel_vgpu_creation_params *param) { +struct drm_i915_private *dev_priv = gvt->gt->i915;struct intel_vgpu *vgpu;int ret;
@@ -434,7 +435,10 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,if (ret) goto out_clean_sched_policy; - ret =intel_gvt_hypervisor_set_edid (vgpu,PORT_D ); +if (IS_BROADWELL (dev_priv)) + ret =intel_gvt_hypervisor_set_edid (vgpu,PORT_B ); +else + ret =intel_gvt_hypervisor_set_edid (vgpu,PORT_D );if (ret) goto out_clean_sched_policy;
drivers/gpu/drm/sun4i/sun8i_mixer.c +1 -1
@@ -307,7 +307,7 @@ static struct regmap_config sun8i_mixer_regmap_config = { .reg_bits = 32, .val_bits = 32, .reg_stride = 4, - .max_register = 0xbfffc, /* guessed */ + .max_register = 0xffffc, /* guessed */ };static int sun8i_mixer_of_get_id (struct device_node *node)
drivers/i2c/busses/i2c-cpm.c +3 -0
@@ -65,6 +65,9 @@ struct i2c_ram {char res1[4 ];/* Reserved */ ushort rpbase;/* Relocation pointer */ char res2[2 ];/* Reserved */ +/* The following elements are only for CPM2 */ +char res3[4 ];/* Reserved */ +uint sdmatmp;/* Internal */ };#define I2COM_START 0x80
drivers/i2c/busses/i2c-i801.c +1 -0
@@ -1913,6 +1913,7 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)pci_set_drvdata (dev, priv); +dev_pm_set_driver_flags (&dev->dev,DPM_FLAG_NO_DIRECT_COMPLETE );pm_runtime_set_autosuspend_delay (&dev->dev,1000 );pm_runtime_use_autosuspend (&dev->dev);pm_runtime_put_autosuspend (&dev->dev);
drivers/i2c/busses/i2c-npcm7xx.c +9 -0
@@ -2163,6 +2163,15 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,if (bus->cmd_err == -EAGAIN ) ret =i2c_recover_bus (adap); +/* +* After any type of error, check if LAST bit is still set, +* due to a HW issue. +* It cannot be cleared without resetting the module. +*/ +if (bus->cmd_err && + (NPCM_I2CRXF_CTL_LAST_PEC &ioread8 (bus->reg +NPCM_I2CRXF_CTL ))) +npcm_i2c_reset (bus); +#if IS_ENABLED (CONFIG_I2C_SLAVE )/* reenable slave if it was enabled */ if (bus->slave)
drivers/iio/adc/qcom-spmi-adc5.c +1 -1
@@ -786,7 +786,7 @@ static int adc5_probe(struct platform_device *pdev)static struct platform_driver adc5_driver = { .driver = { - .name ="qcom-spmi-adc5.c" , + .name ="qcom-spmi-adc5" , .of_match_table = adc5_match_table, }, .probe = adc5_probe,
drivers/input/mouse/trackpoint.c +2 -0
@@ -282,6 +282,8 @@ static int trackpoint_start_protocol(struct psmouse *psmouse,case TP_VARIANT_ALPS :case TP_VARIANT_ELAN :case TP_VARIANT_NXP : +case TP_VARIANT_JYT_SYNAPTICS : +case TP_VARIANT_SYNAPTICS :if (variant_id) *variant_id = param[0 ];if (firmware_id)
drivers/input/serio/i8042-x86ia64io.h +7 -0
@@ -721,6 +721,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nopnp_table[] = { DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), }, }, + { + /* Acer Aspire 5 A515 */ + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "Grumpy_PK"), + DMI_MATCH(DMI_BOARD_VENDOR, "PK"), + }, + }, { } };
drivers/iommu/amd/init.c +10 -46
80 lines not on this page · raw message
drivers/iommu/exynos-iommu.c +6 -2
@@ -1295,13 +1295,17 @@ static int exynos_iommu_of_xlate(struct device *dev,return -ENODEV ; data =platform_get_drvdata (sysmmu); -if (!data) +if (!data) { +put_device (&sysmmu->dev);return -ENODEV ; + }if (!owner) { owner =kzalloc (sizeof (*owner),GFP_KERNEL ); -if (!owner) +if (!owner) { +put_device (&sysmmu->dev);return -ENOMEM ; + }INIT_LIST_HEAD (&owner->controllers);mutex_init (&owner->rpm_lock);
drivers/memstick/core/memstick.c +4 -0
@@ -441,6 +441,9 @@ static void memstick_check(struct work_struct *work) }else if (host->card->stop) host->card->stop (host->card); +if (host->removing) + goto out_power_off; + card =memstick_alloc_card (host);if (!card) {
@@ -545,6 +548,7 @@ EXPORT_SYMBOL(memstick_add_host);*/ void memstick_remove_host (struct memstick_host *host) { + host->removing =1 ;flush_workqueue (workqueue);mutex_lock (&host->lock);if (host->card)
drivers/mmc/host/sdhci-pci-core.c +2 -1
@@ -794,7 +794,8 @@ static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)static bool glk_broken_cqhci (struct sdhci_pci_slot *slot) {return slot->chip->pdev->device ==PCI_DEVICE_ID_INTEL_GLK_EMMC && -dmi_match (DMI_BIOS_VENDOR ,"LENOVO" ); + (dmi_match (DMI_BIOS_VENDOR ,"LENOVO" ) || +dmi_match (DMI_SYS_VENDOR ,"IRBIS" )); }static int glk_emmc_probe_slot (struct sdhci_pci_slot *slot)
drivers/net/dsa/ocelot/felix_vsc9959.c +8 -8
@@ -607,17 +607,17 @@ struct vcap_field vsc9959_vcap_is2_keys[] = { [VCAP_IS2_HK_DIP_EQ_SIP] = {118, 1}, /* IP4_TCP_UDP (TYPE=100) */ [VCAP_IS2_HK_TCP] = {119, 1}, - [VCAP_IS2_HK_L4_SPORT] = {120, 16}, - [VCAP_IS2_HK_L4_DPORT] = {136, 16}, + [VCAP_IS2_HK_L4_DPORT] = {120, 16}, + [VCAP_IS2_HK_L4_SPORT] = {136, 16}, [VCAP_IS2_HK_L4_RNG] = {152, 8}, [VCAP_IS2_HK_L4_SPORT_EQ_DPORT] = {160, 1}, [VCAP_IS2_HK_L4_SEQUENCE_EQ0] = {161, 1}, - [VCAP_IS2_HK_L4_URG] = {162, 1}, - [VCAP_IS2_HK_L4_ACK] = {163, 1}, - [VCAP_IS2_HK_L4_PSH] = {164, 1}, - [VCAP_IS2_HK_L4_RST] = {165, 1}, - [VCAP_IS2_HK_L4_SYN] = {166, 1}, - [VCAP_IS2_HK_L4_FIN] = {167, 1}, + [VCAP_IS2_HK_L4_FIN] = {162, 1}, + [VCAP_IS2_HK_L4_SYN] = {163, 1}, + [VCAP_IS2_HK_L4_RST] = {164, 1}, + [VCAP_IS2_HK_L4_PSH] = {165, 1}, + [VCAP_IS2_HK_L4_ACK] = {166, 1}, + [VCAP_IS2_HK_L4_URG] = {167, 1}, [VCAP_IS2_HK_L4_1588_DOM] = {168, 8}, [VCAP_IS2_HK_L4_1588_VER] = {176, 4}, /* IP4_OTHER (TYPE=101) */
drivers/net/ethernet/dec/tulip/de2104x.c +1 -1
@@ -85,7 +85,7 @@ MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copi#define DSL CONFIG_DE2104X_DSL#endif -#define DE_RX_RING_SIZE 64 +#define DE_RX_RING_SIZE 128#define DE_TX_RING_SIZE 64#define DE_RING_BYTES \ ((sizeof(struct de_desc) * DE_RX_RING_SIZE) + \
drivers/net/hyperv/hyperv_net.h +3 -0
@@ -973,6 +973,9 @@ struct net_device_context {/* Serial number of the VF to team with */ u32 vf_serial; +/* Is the current data path through the VF NIC? */ +bool data_path_is_vf; +/* Used to temporarily save the config info across hibernation */ struct netvsc_device_info *saved_netvsc_dev_info; };
drivers/net/hyperv/netvsc_drv.c +20 -1
@@ -2323,7 +2323,16 @@ static int netvsc_register_vf(struct net_device *vf_netdev)return NOTIFY_OK ; } -/* VF up/down change detected, schedule to change data path */ +/* Change the data path when VF UP/DOWN/CHANGE are detected. +* +* Typically a UP or DOWN event is followed by a CHANGE event, so +* net_device_ctx->data_path_is_vf is used to cache the current data path +* to avoid the duplicate call of netvsc_switch_datapath() and the duplicate +* message. +* +* During hibernation, if a VF NIC driver (e.g. mlx5) preserves the network +* interface, there is only the CHANGE event and no UP or DOWN event. +*/ static int netvsc_vf_changed (struct net_device *vf_netdev) {struct net_device_context *net_device_ctx;
@@ -2340,6 +2349,10 @@ static int netvsc_vf_changed(struct net_device *vf_netdev)if (!netvsc_dev)return NOTIFY_DONE ; +if (net_device_ctx->data_path_is_vf == vf_is_up) +return NOTIFY_OK ; + net_device_ctx->data_path_is_vf = vf_is_up; +netvsc_switch_datapath (ndev, vf_is_up);netdev_info (ndev,"Data path switched %s VF: %s\n" , vf_is_up ?"to" :"from" , vf_netdev->name);
@@ -2581,6 +2594,12 @@ static int netvsc_resume(struct hv_device *dev)rtnl_lock (); net_device_ctx =netdev_priv (net); + +/* Reset the data path to the netvsc NIC before re-opening the vmbus +* channel. Later netvsc_netdev_event() will switch the data path to +* the VF upon the UP or CHANGE event. +*/ + net_device_ctx->data_path_is_vf = false; device_info = net_device_ctx->saved_netvsc_dev_info; ret =netvsc_attach (net, device_info);
drivers/net/usb/rndis_host.c +1 -1
@@ -201,7 +201,7 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen)dev_dbg (&info->control->dev,"rndis response error, code %d\n" , retval); } -msleep (20 ); +msleep (40 ); }dev_dbg (&info->control->dev,"rndis response timeout\n" );return -ETIMEDOUT ;
drivers/net/wan/hdlc_cisco.c +1 -0
@@ -118,6 +118,7 @@ static void cisco_keepalive_send(struct net_device *dev, u32 type,skb_put (skb,sizeof (struct cisco_packet )); skb->priority =TC_PRIO_CONTROL ; skb->dev = dev; + skb->protocol =htons (ETH_P_HDLC );skb_reset_network_header (skb);dev_queue_xmit (skb);
drivers/net/wan/hdlc_fr.c +5 -1
@@ -433,6 +433,8 @@ static netdev_tx_t pvc_xmit(struct sk_buff *skb, struct net_device *dev)if (pvc->state.fecn)/* TX Congestion counter */ dev->stats.tx_compressed++; skb->dev = pvc->frad; + skb->protocol =htons (ETH_P_HDLC ); +skb_reset_network_header (skb);dev_queue_xmit (skb);return NETDEV_TX_OK ; }
@@ -555,6 +557,7 @@ static void fr_lmi_send(struct net_device *dev, int fullrep)skb_put (skb, i); skb->priority =TC_PRIO_CONTROL ; skb->dev = dev; + skb->protocol =htons (ETH_P_HDLC );skb_reset_network_header (skb);dev_queue_xmit (skb);
@@ -1041,7 +1044,7 @@ static void pvc_setup(struct net_device *dev) { dev->type =ARPHRD_DLCI ; dev->flags =IFF_POINTOPOINT ; - dev->hard_header_len =10 ; + dev->hard_header_len =0 ; dev->addr_len =2 ;netif_keep_dst (dev); }
@@ -1093,6 +1096,7 @@ static int fr_add_pvc(struct net_device *frad, unsigned int dlci, int type) dev->mtu =HDLC_MAX_MTU ; dev->min_mtu =68 ; dev->max_mtu =HDLC_MAX_MTU ; + dev->needed_headroom =10 ; dev->priv_flags |=IFF_NO_QUEUE ; dev->ml_priv = pvc;
drivers/net/wan/hdlc_ppp.c +1 -0
@@ -251,6 +251,7 @@ static void ppp_tx_cp(struct net_device *dev, u16 pid, u8 code, skb->priority =TC_PRIO_CONTROL ; skb->dev = dev; + skb->protocol =htons (ETH_P_HDLC );skb_reset_network_header (skb);skb_queue_tail (&tx_queue, skb); }
drivers/net/wan/lapbether.c +2 -2
@@ -198,8 +198,6 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb)struct net_device *dev;int size = skb->len; - skb->protocol =htons (ETH_P_X25 ); - ptr =skb_push (skb,2 ); *ptr++ = size %256 ;
@@ -210,6 +208,8 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb) skb->dev = dev = lapbeth->ethdev; + skb->protocol =htons (ETH_P_DEC ); +skb_reset_network_header (skb);dev_hard_header (skb, dev,ETH_P_DEC , bcast_addr,NULL ,0 );
drivers/net/wireless/mediatek/mt76/mt7915/init.c +6 -2
@@ -691,8 +691,12 @@ void mt7915_unregister_device(struct mt7915_dev *dev)spin_lock_bh (&dev->token_lock);idr_for_each_entry (&dev->token, txwi, id) {mt7915_txp_skb_unmap (&dev->mt76, txwi); -if (txwi->skb) -dev_kfree_skb_any (txwi->skb); +if (txwi->skb) { +struct ieee80211_hw *hw; + + hw =mt76_tx_status_get_hw (&dev->mt76, txwi->skb); +ieee80211_free_txskb (hw, txwi->skb); + }mt76_put_txwi (&dev->mt76, txwi); }spin_unlock_bh (&dev->token_lock);
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +1 -1
@@ -844,7 +844,7 @@ mt7915_tx_complete_status(struct mt76_dev *mdev, struct sk_buff *skb,if (sta || !(info->flags &IEEE80211_TX_CTL_NO_ACK ))mt7915_tx_status (sta, hw, info,NULL ); -dev_kfree_skb (skb); +ieee80211_free_txskb (hw, skb); } void mt7915_txp_skb_unmap(struct mt76_dev *dev,
drivers/net/wireless/ti/wlcore/cmd.h +0 -1
@@ -458,7 +458,6 @@ enum wl1271_cmd_key_type {KEY_TKIP =2 ,KEY_AES =3 , KEY_GEM = 4, - KEY_IGTK = 5, }; struct wl1271_cmd_set_keys {
drivers/net/wireless/ti/wlcore/main.c +0 -4
@@ -3550,9 +3550,6 @@ int wlcore_set_key(struct wl1271 *wl, enum set_key_cmd cmd,case WL1271_CIPHER_SUITE_GEM : key_type =KEY_GEM ;break ; -case WLAN_CIPHER_SUITE_AES_CMAC : - key_type =KEY_IGTK ; -break ;default :wl1271_error ("Unknown key algo 0x%x" , key_conf->cipher);
@@ -6222,7 +6219,6 @@ static int wl1271_init_ieee80211(struct wl1271 *wl)WLAN_CIPHER_SUITE_TKIP ,WLAN_CIPHER_SUITE_CCMP , WL1271_CIPHER_SUITE_GEM, - WLAN_CIPHER_SUITE_AES_CMAC, };/* The tx descriptor buffer */
drivers/nvme/host/core.c +15 -0
@@ -3060,10 +3060,24 @@ static int nvme_dev_open(struct inode *inode, struct file *file)return -EWOULDBLOCK ; } +nvme_get_ctrl (ctrl); +if (!try_module_get (ctrl->ops->module)) +return -EINVAL ; + file->private_data = ctrl;return 0 ; } +static int nvme_dev_release (struct inode *inode,struct file *file) +{ +struct nvme_ctrl *ctrl = + container_of(inode->i_cdev, struct nvme_ctrl, cdev); + +module_put (ctrl->ops->module); +nvme_put_ctrl (ctrl); +return 0 ; +} +static int nvme_dev_user_cmd (struct nvme_ctrl *ctrl,void __user *argp) {struct nvme_ns *ns;
@@ -3126,6 +3140,7 @@ static long nvme_dev_ioctl(struct file *file, unsigned int cmd,static const struct file_operations nvme_dev_fops = { .owner =THIS_MODULE , .open = nvme_dev_open, + .release = nvme_dev_release, .unlocked_ioctl = nvme_dev_ioctl, .compat_ioctl = compat_ptr_ioctl, };
drivers/nvme/host/fc.c +4 -2
@@ -3668,12 +3668,14 @@ nvme_fc_create_ctrl(struct device *dev, struct nvmf_ctrl_options *opts)spin_lock_irqsave (&nvme_fc_lock, flags);list_for_each_entry (lport, &nvme_fc_lport_list, port_list) {if (lport->localport.node_name != laddr.nn || - lport->localport.port_name != laddr.pn) + lport->localport.port_name != laddr.pn || + lport->localport.port_state !=FC_OBJSTATE_ONLINE )continue ;list_for_each_entry (rport, &lport->endp_list, endp_list) {if (rport->remoteport.node_name != raddr.nn || - rport->remoteport.port_name != raddr.pn) + rport->remoteport.port_name != raddr.pn || + rport->remoteport.port_state !=FC_OBJSTATE_ONLINE )continue ;/* if fail to get reference fall through. Will error */
drivers/nvme/host/pci.c +9 -8
@@ -942,13 +942,6 @@ static inline void nvme_handle_cqe(struct nvme_queue *nvmeq, u16 idx)struct nvme_completion *cqe = &nvmeq->cqes[idx];struct request *req; -if (unlikely (cqe->command_id >= nvmeq->q_depth)) { -dev_warn (nvmeq->dev->ctrl.device, -"invalid id %d completed on queue %d\n" , - cqe->command_id,le16_to_cpu (cqe->sq_id)); -return ; - } -/* * AEN requests are special as they don't time out and can * survive any kind of queue freeze and often don't respond to
@@ -962,6 +955,13 @@ static inline void nvme_handle_cqe(struct nvme_queue *nvmeq, u16 idx) } req =blk_mq_tag_to_rq (nvme_queue_tagset (nvmeq), cqe->command_id); +if (unlikely (!req)) { +dev_warn (nvmeq->dev->ctrl.device, +"invalid id %d completed on queue %d\n" , + cqe->command_id,le16_to_cpu (cqe->sq_id)); +return ; + } +trace_nvme_sq (req, cqe->sq_head, nvmeq->sq_tail);nvme_end_request (req, cqe->status, cqe->result); }
@@ -3093,7 +3093,8 @@ static const struct pci_device_id nvme_id_table[] = { { PCI_VDEVICE(INTEL, 0xf1a5), /* Intel 600P/P3100 */ .driver_data =NVME_QUIRK_NO_DEEPEST_PS |NVME_QUIRK_MEDIUM_PRIO_SQ | - NVME_QUIRK_NO_TEMP_THRESH_CHANGE }, +NVME_QUIRK_NO_TEMP_THRESH_CHANGE | + NVME_QUIRK_DISABLE_WRITE_ZEROES, }, { PCI_VDEVICE(INTEL, 0xf1a6), /* Intel 760p/Pro 7600p */ .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */
drivers/phy/ti/phy-am654-serdes.c +4 -2
@@ -725,8 +725,10 @@ static int serdes_am654_probe(struct platform_device *pdev)pm_runtime_enable (dev); phy =devm_phy_create (dev,NULL , &ops); -if (IS_ERR (phy)) -return PTR_ERR (phy); +if (IS_ERR (phy)) { + ret =PTR_ERR (phy); + goto clk_err; + }phy_set_drvdata (phy, am654_phy); phy_provider =devm_of_phy_provider_register (dev, serdes_am654_xlate);
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c +4 -0
@@ -259,6 +259,10 @@ bool mtk_is_virt_gpio(struct mtk_pinctrl *hw, unsigned int gpio_n) desc = (const struct mtk_pin_desc *)&hw->soc->pins[gpio_n]; +/* if the GPIO is not supported for eint mode */ +if (desc->eint.eint_m ==NO_EINT_SUPPORT ) +return virt_gpio; +if (desc->funcs && !desc->funcs[desc->eint.eint_m].name) virt_gpio = true;
drivers/pinctrl/mvebu/pinctrl-armada-xp.c +1 -1
@@ -414,7 +414,7 @@ static struct mvebu_mpp_mode mv98dx3236_mpp_modes[] = { MPP_VAR_FUNCTION(0x1, "i2c0", "sck", V_98DX3236_PLUS)),MPP_MODE (15 ,MPP_VAR_FUNCTION (0x0 ,"gpio" ,NULL ,V_98DX3236_PLUS ), -MPP_VAR_FUNCTION (0x4 ,"i2c0" ,"sda" ,V_98DX3236_PLUS )), +MPP_VAR_FUNCTION (0x1 ,"i2c0" ,"sda" ,V_98DX3236_PLUS )),MPP_MODE (16 ,MPP_VAR_FUNCTION (0x0 ,"gpo" ,NULL ,V_98DX3236_PLUS ), MPP_VAR_FUNCTION(0x4, "dev", "oe", V_98DX3236_PLUS)),
drivers/pinctrl/qcom/pinctrl-sm8250.c +1 -1
@@ -1308,7 +1308,7 @@ static const struct msm_pingroup sm8250_groups[] = { [178] = PINGROUP(178, WEST, _, _, _, _, _, _, _, _, _), [179] = PINGROUP(179, WEST, _, _, _, _, _, _, _, _, _), [180] = UFS_RESET(ufs_reset, 0xb8000), - [181] = SDC_PINGROUP(sdc2_clk, 0x7000, 14, 6), + [181] = SDC_PINGROUP(sdc2_clk, 0xb7000, 14, 6), [182] = SDC_PINGROUP(sdc2_cmd, 0xb7000, 11, 3), [183] = SDC_PINGROUP(sdc2_data, 0xb7000, 9, 0), };
drivers/scsi/iscsi_tcp.c +15 -7
@@ -736,6 +736,7 @@ static int iscsi_sw_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,struct iscsi_tcp_conn *tcp_conn = conn->dd_data;struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data;struct sockaddr_in6 addr; +struct socket *sock;int rc;switch (param) {
@@ -747,13 +748,17 @@ static int iscsi_sw_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,spin_unlock_bh (&conn->session->frwd_lock);return -ENOTCONN ; } + sock = tcp_sw_conn->sock; +sock_hold (sock->sk); +spin_unlock_bh (&conn->session->frwd_lock); +if (param ==ISCSI_PARAM_LOCAL_PORT ) - rc =kernel_getsockname (tcp_sw_conn->sock, + rc =kernel_getsockname (sock, (struct sockaddr *)&addr);else - rc =kernel_getpeername (tcp_sw_conn->sock, + rc =kernel_getpeername (sock, (struct sockaddr *)&addr); -spin_unlock_bh (&conn->session->frwd_lock); +sock_put (sock->sk);if (rc <0 )return rc;
@@ -775,6 +780,7 @@ static int iscsi_sw_tcp_host_get_param(struct Scsi_Host *shost,struct iscsi_tcp_conn *tcp_conn;struct iscsi_sw_tcp_conn *tcp_sw_conn;struct sockaddr_in6 addr; +struct socket *sock;int rc;switch (param) {
@@ -789,16 +795,18 @@ static int iscsi_sw_tcp_host_get_param(struct Scsi_Host *shost,return -ENOTCONN ; } tcp_conn = conn->dd_data; - tcp_sw_conn = tcp_conn->dd_data; -if (!tcp_sw_conn->sock) { + sock = tcp_sw_conn->sock; +if (!sock) {spin_unlock_bh (&session->frwd_lock);return -ENOTCONN ; } +sock_hold (sock->sk); +spin_unlock_bh (&session->frwd_lock); - rc =kernel_getsockname (tcp_sw_conn->sock, + rc =kernel_getsockname (sock, (struct sockaddr *)&addr); -spin_unlock_bh (&session->frwd_lock); +sock_put (sock->sk);if (rc <0 )return rc;
drivers/scsi/sd.c +18 -16
@@ -2966,26 +2966,32 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)if (sdkp->device->type ==TYPE_ZBC ) {/* Host-managed */ - q->limits.zoned =BLK_ZONED_HM ; +blk_queue_set_zoned (sdkp->disk,BLK_ZONED_HM ); }else { sdkp->zoned = (buffer[8 ] >>4 ) &3 ; -if (sdkp->zoned ==1 && !disk_has_partitions (sdkp->disk)) { +if (sdkp->zoned ==1 ) {/* Host-aware */ - q->limits.zoned =BLK_ZONED_HA ; +blk_queue_set_zoned (sdkp->disk,BLK_ZONED_HA ); }else { -/* -* Treat drive-managed devices and host-aware devices -* with partitions as regular block devices. -*/ - q->limits.zoned =BLK_ZONED_NONE ; -if (sdkp->zoned ==2 && sdkp->first_scan) -sd_printk (KERN_NOTICE , sdkp, -"Drive-managed SMR disk\n" ); +/* Regular disk or drive managed disk */ +blk_queue_set_zoned (sdkp->disk,BLK_ZONED_NONE ); } } -if (blk_queue_is_zoned (q) && sdkp->first_scan) + +if (!sdkp->first_scan) + goto out; + +if (blk_queue_is_zoned (q)) {sd_printk (KERN_NOTICE , sdkp,"Host-%s zoned block device\n" , q->limits.zoned ==BLK_ZONED_HM ?"managed" :"aware" ); + }else { +if (sdkp->zoned ==1 ) +sd_printk (KERN_NOTICE , sdkp, +"Host-aware SMR disk used as regular disk\n" ); +else if (sdkp->zoned ==2 ) +sd_printk (KERN_NOTICE , sdkp, +"Drive-managed SMR disk\n" ); + } out:kfree (buffer);
@@ -3398,10 +3404,6 @@ static int sd_probe(struct device *dev) sdkp->first_scan =1 ; sdkp->max_medium_access_timeouts =SD_MAX_MEDIUM_TIMEOUTS ; - error =sd_zbc_init_disk (sdkp); -if (error) - goto out_free_index; -sd_revalidate_disk (gd); gd->flags =GENHD_FL_EXT_DEVT ;
drivers/scsi/sd.h +1 -13
@@ -213,7 +213,6 @@ static inline int sd_is_zoned(struct scsi_disk *sdkp)#ifdef CONFIG_BLK_DEV_ZONED -int sd_zbc_init_disk (struct scsi_disk *sdkp);void sd_zbc_release_disk (struct scsi_disk *sdkp);extern int sd_zbc_read_zones (struct scsi_disk *sdkp,unsigned char *buffer);extern void sd_zbc_print_zones (struct scsi_disk *sdkp);
@@ -229,17 +228,6 @@ blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd, sector_t *lba,#else /* CONFIG_BLK_DEV_ZONED */ -static inline int sd_zbc_init (void ) -{ -return 0 ; -} - -static inline int sd_zbc_init_disk (struct scsi_disk *sdkp) -{ -return 0 ; -} - -static inline void sd_zbc_exit (void ) {}static inline void sd_zbc_release_disk (struct scsi_disk *sdkp) {} static inline int sd_zbc_read_zones(struct scsi_disk *sdkp,
@@ -260,7 +248,7 @@ static inline blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,static inline unsigned int sd_zbc_complete (struct scsi_cmnd *cmd,unsigned int good_bytes,struct scsi_sense_hdr *sshdr) { -return 0 ; +return good_bytes; } static inline blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd,
drivers/scsi/sd_zbc.c +74 -57
166 lines not on this page · raw message
drivers/spi/spi-fsl-espi.c +3 -2
@@ -564,13 +564,14 @@ static void fsl_espi_cpu_irq(struct fsl_espi *espi, u32 events)static irqreturn_t fsl_espi_irq (s32 irq,void *context_data) {struct fsl_espi *espi = context_data; -u32 events; +u32 events, mask;spin_lock (&espi->lock);/* Get interrupt events(tx/rx) */ events =fsl_espi_read_reg (espi,ESPI_SPIE ); -if (!events) { + mask =fsl_espi_read_reg (espi,ESPI_SPIM ); +if (!(events & mask)) {spin_unlock (&espi->lock);return IRQ_NONE ; }
drivers/target/target_core_transport.c +2 -1
@@ -1840,7 +1840,8 @@ int target_submit_tmr(struct se_cmd *se_cmd, struct se_session *se_sess,* out unpacked_lun for the original se_cmd. */ if (tm_type ==TMR_ABORT_TASK && (flags &TARGET_SCF_LOOKUP_LUN_FROM_TAG )) { -if (!target_lookup_lun_from_tag (se_sess, tag, &unpacked_lun)) +if (!target_lookup_lun_from_tag (se_sess, tag, + &se_cmd->orig_fe_lun)) goto failure; }
drivers/usb/core/driver.c +34 -16
82 lines not on this page · raw message
drivers/usb/gadget/function/f_ncm.c +2 -28
@@ -1189,7 +1189,6 @@ static int ncm_unwrap_ntb(struct gether *port,const struct ndp_parser_opts *opts = ncm->parser_opts;unsigned crc_len = ncm->is_crc ?sizeof (uint32_t ) :0 ;int dgram_counter; -bool ndp_after_header;/* dwSignature */ if (get_unaligned_le32 (tmp) != opts->nth_sign) {
@@ -1216,7 +1215,6 @@ static int ncm_unwrap_ntb(struct gether *port, } ndp_index =get_ncm (&tmp, opts->ndp_index); - ndp_after_header = false;/* Run through all the NDP's in the NTB */ do {
@@ -1232,8 +1230,6 @@ static int ncm_unwrap_ntb(struct gether *port, ndp_index); goto err; } -if (ndp_index == opts->nth_size) - ndp_after_header = true;/* * walk through NDP
@@ -1312,37 +1308,13 @@ static int ncm_unwrap_ntb(struct gether *port, index2 =get_ncm (&tmp, opts->dgram_item_len); dg_len2 =get_ncm (&tmp, opts->dgram_item_len); -if (index2 ==0 || dg_len2 ==0 ) -break ; -/* wDatagramIndex[1] */ -if (ndp_after_header) { -if (index2 < opts->nth_size + opts->ndp_size) { -INFO (port->func.config->cdev, -"Bad index: %#X\n" , index2); - goto err; - } - }else { -if (index2 < opts->nth_size + opts->dpe_size) { -INFO (port->func.config->cdev, -"Bad index: %#X\n" , index2); - goto err; - } - }if (index2 > block_len - opts->dpe_size) {INFO (port->func.config->cdev,"Bad index: %#X\n" , index2); goto err; } -/* wDatagramLength[1] */ -if ((dg_len2 <14 + crc_len) || - (dg_len2 > frame_max)) { -INFO (port->func.config->cdev, -"Bad dgram length: %#X\n" , dg_len); - goto err; - } -/* * Copy the data into a new skb. * This ensures the truesize is correct
@@ -1359,6 +1331,8 @@ static int ncm_unwrap_ntb(struct gether *port, ndp_len -=2 * (opts->dgram_item_len *2 ); dgram_counter++; +if (index2 ==0 || dg_len2 ==0 ) +break ; }while (ndp_len >2 * (opts->dgram_item_len *2 )); }while (ndp_index);
drivers/usb/usbip/stub_dev.c +0 -6
@@ -461,11 +461,6 @@ static void stub_disconnect(struct usb_device *udev)return ; } -static bool usbip_match (struct usb_device *udev) -{ -return true; -} -#ifdef CONFIG_PM /* These functions need usb_port_suspend and usb_port_resume,
@@ -491,7 +486,6 @@ struct usb_device_driver stub_driver = { .name = "usbip-host", .probe = stub_probe, .disconnect = stub_disconnect, - .match = usbip_match, #ifdef CONFIG_PM .suspend = stub_suspend, .resume = stub_resume,
drivers/xen/events/events_base.c +21 -8
@@ -92,6 +92,8 @@ static bool (*pirq_needs_eoi)(unsigned irq);/* Xen will never allocate port zero for any purpose. */ #define VALID_EVTCHN (chn) ((chn) != 0) +static struct irq_info *legacy_info_ptrs[NR_IRQS_LEGACY ]; +static struct irq_chip xen_dynamic_chip;static struct irq_chip xen_percpu_chip;static struct irq_chip xen_pirq_chip;
@@ -156,7 +158,18 @@ int get_evtchn_to_irq(evtchn_port_t evtchn)/* Get info for IRQ */ struct irq_info *info_for_irq (unsigned irq) { -return irq_get_chip_data (irq); +if (irq <nr_legacy_irqs ()) +return legacy_info_ptrs[irq]; +else +return irq_get_chip_data (irq); +} + +static void set_info_for_irq (unsigned int irq,struct irq_info *info) +{ +if (irq <nr_legacy_irqs ()) + legacy_info_ptrs[irq] = info; +else +irq_set_chip_data (irq, info); }/* Constructors for packed IRQ information. */
@@ -377,7 +390,7 @@ static void xen_irq_init(unsigned irq) info->type =IRQT_UNBOUND ; info->refcnt =-1 ; -irq_set_chip_data (irq, info); +set_info_for_irq (irq, info);list_add_tail (&info->list, &xen_irq_list_head); }
@@ -426,14 +439,14 @@ static int __must_check xen_allocate_irq_gsi(unsigned gsi)static void xen_free_irq (unsigned irq) { -struct irq_info *info =irq_get_chip_data (irq); +struct irq_info *info =info_for_irq (irq);if (WARN_ON (!info))return ;list_del (&info->list); -irq_set_chip_data (irq,NULL ); +set_info_for_irq (irq,NULL );WARN_ON (info->refcnt >0 );
@@ -603,7 +616,7 @@ EXPORT_SYMBOL_GPL(xen_irq_from_gsi);static void __unbind_from_irq (unsigned int irq) {evtchn_port_t evtchn =evtchn_from_irq (irq); -struct irq_info *info =irq_get_chip_data (irq); +struct irq_info *info =info_for_irq (irq);if (info->refcnt >0 ) { info->refcnt--;
@@ -1108,7 +1121,7 @@ int bind_ipi_to_irqhandler(enum ipi_vector ipi,void unbind_from_irqhandler (unsigned int irq,void *dev_id) { -struct irq_info *info =irq_get_chip_data (irq); +struct irq_info *info =info_for_irq (irq);if (WARN_ON (!info))return ;
@@ -1142,7 +1155,7 @@ int evtchn_make_refcounted(evtchn_port_t evtchn)if (irq ==-1 )return -ENOENT ; - info =irq_get_chip_data (irq); + info =info_for_irq (irq);if (!info)return -ENOENT ;
@@ -1170,7 +1183,7 @@ int evtchn_get(evtchn_port_t evtchn)if (irq ==-1 ) goto done; - info =irq_get_chip_data (irq); + info =info_for_irq (irq);if (!info) goto done;
fs/autofs/waitq.c +1 -1
@@ -53,7 +53,7 @@ static int autofs_write(struct autofs_sb_info *sbi,mutex_lock (&sbi->pipe_mutex);while (bytes) { - wr =kernel_write (file, data, bytes, &file->f_pos); + wr =__kernel_write (file, data, bytes,NULL );if (wr <=0 )break ; data += wr;
fs/btrfs/dev-replace.c +39 -1
@@ -599,6 +599,37 @@ static void btrfs_rm_dev_replace_unblocked(struct btrfs_fs_info *fs_info)wake_up (&fs_info->dev_replace.replace_wait); } +/* +* When finishing the device replace, before swapping the source device with the +* target device we must update the chunk allocation state in the target device, +* as it is empty because replace works by directly copying the chunks and not +* through the normal chunk allocation path. +*/ +static int btrfs_set_target_alloc_state (struct btrfs_device *srcdev, +struct btrfs_device *tgtdev) +{ +struct extent_state *cached_state =NULL ; +u64 start =0 ; +u64 found_start; +u64 found_end; +int ret =0 ; + +lockdep_assert_held (&srcdev->fs_info->chunk_mutex); + +while (!find_first_extent_bit (&srcdev->alloc_state, start, + &found_start, &found_end, +CHUNK_ALLOCATED , &cached_state)) { + ret =set_extent_bits (&tgtdev->alloc_state, found_start, + found_end,CHUNK_ALLOCATED ); +if (ret) +break ; + start = found_end +1 ; + } + +free_extent_state (cached_state); +return ret; +} +static int btrfs_dev_replace_finishing (struct btrfs_fs_info *fs_info,int scrub_ret) {
@@ -673,8 +704,14 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, dev_replace->time_stopped =ktime_get_real_seconds (); dev_replace->item_needs_writeback =1 ; -/* replace old device with new one in mapping tree */ +/* +* Update allocation state in the new device and replace the old device +* with the new one in the mapping tree. +*/ if (!scrub_ret) { + scrub_ret =btrfs_set_target_alloc_state (src_device, tgt_device); +if (scrub_ret) + goto error;btrfs_dev_replace_update_device_in_mapping_tree (fs_info, src_device, tgt_device);
@@ -685,6 +722,7 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,btrfs_dev_name (src_device), src_device->devid, rcu_str_deref(tgt_device->name), scrub_ret); +error:up_write (&dev_replace->rwsem);mutex_unlock (&fs_info->chunk_mutex);mutex_unlock (&fs_info->fs_devices->device_list_mutex);
fs/eventpoll.c +31 -41
160 lines not on this page · raw message
fs/fuse/file.c +12 -13
@@ -3091,11 +3091,10 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter)ssize_t ret =0 ;struct file *file = iocb->ki_filp;struct fuse_file *ff = file->private_data; -bool async_dio = ff->fc->async_dio;loff_t pos =0 ;struct inode *inode;loff_t i_size; -size_t count =iov_iter_count (iter); +size_t count =iov_iter_count (iter), shortened =0 ;loff_t offset = iocb->ki_pos;struct fuse_io_priv *io;
@@ -3103,17 +3102,9 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter) inode = file->f_mapping->host; i_size =i_size_read (inode); -if ((iov_iter_rw (iter) ==READ ) && (offset > i_size)) +if ((iov_iter_rw (iter) ==READ ) && (offset >= i_size))return 0 ; -/* optimization for short read */ -if (async_dio &&iov_iter_rw (iter) !=WRITE && offset + count > i_size) { -if (offset >= i_size) -return 0 ; -iov_iter_truncate (iter,fuse_round_up (ff->fc, i_size - offset)); - count =iov_iter_count (iter); - } - io =kmalloc (sizeof (struct fuse_io_priv ),GFP_KERNEL );if (!io)return -ENOMEM ;
@@ -3129,15 +3120,22 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter)* By default, we want to optimize all I/Os with async request * submission to the client filesystem if supported. */ - io->async = async_dio; + io->async = ff->fc->async_dio; io->iocb = iocb; io->blocking =is_sync_kiocb (iocb); +/* optimization for short read */ +if (io->async && !io->write && offset + count > i_size) { +iov_iter_truncate (iter,fuse_round_up (ff->fc, i_size - offset)); + shortened = count -iov_iter_count (iter); + count -= shortened; + } +/* * We cannot asynchronously extend the size of a file. * In such case the aio will behave exactly like sync io. */ -if ((offset + count > i_size) &&iov_iter_rw (iter) ==WRITE ) +if ((offset + count > i_size) && io->write) io->blocking = true;if (io->async && io->blocking) {
@@ -3155,6 +3153,7 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter) }else { ret =__fuse_direct_read (io, iter, &pos); } +iov_iter_reexpand (iter,iov_iter_count (iter) + shortened);if (io->async) {bool blocking = io->blocking;
fs/io_uring.c +6 -2
@@ -3318,7 +3318,7 @@ static int io_epoll_ctl_prep(struct io_kiocb *req,#if defined(CONFIG_EPOLL )if (sqe->ioprio || sqe->buf_index)return -EINVAL ; -if (unlikely (req->ctx->flags &IORING_SETUP_IOPOLL )) +if (unlikely (req->ctx->flags & (IORING_SETUP_IOPOLL |IORING_SETUP_SQPOLL )))return -EINVAL ; req->epoll.epfd =READ_ONCE (sqe->fd);
@@ -3435,7 +3435,7 @@ static int io_fadvise(struct io_kiocb *req, bool force_nonblock)static int io_statx_prep (struct io_kiocb *req,const struct io_uring_sqe *sqe) { -if (unlikely (req->ctx->flags &IORING_SETUP_IOPOLL )) +if (unlikely (req->ctx->flags & (IORING_SETUP_IOPOLL |IORING_SETUP_SQPOLL )))return -EINVAL ;if (sqe->ioprio || sqe->buf_index)return -EINVAL ;
@@ -4310,6 +4310,8 @@ static int io_poll_double_wake(struct wait_queue_entry *wait, unsigned mode,if (mask && !(mask & poll->events))return 0 ; +list_del_init (&wait->entry); +if (poll && poll->head) {bool done;
@@ -5040,6 +5042,8 @@ static int io_async_cancel(struct io_kiocb *req)static int io_files_update_prep (struct io_kiocb *req,const struct io_uring_sqe *sqe) { +if (unlikely (req->ctx->flags &IORING_SETUP_SQPOLL )) +return -EINVAL ;if (unlikely (req->flags & (REQ_F_FIXED_FILE |REQ_F_BUFFER_SELECT )))return -EINVAL ;if (sqe->ioprio || sqe->rw_flags)
fs/nfs/dir.c +3 -0
@@ -579,6 +579,9 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *enxdr_set_scratch_buffer (&stream,page_address (scratch),PAGE_SIZE ); do { + if (entry->label) + entry->label->len = NFS4_MAXLABELLEN; + status = xdr_decode(desc, entry, &stream); if (status != 0) { if (status == -EAGAIN)
fs/nfs/flexfilelayout/flexfilelayout.c +6 -5
@@ -838,6 +838,7 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,struct nfs4_ff_layout_mirror *mirror;struct nfs4_pnfs_ds *ds;int ds_idx; +u32 i; retry:ff_layout_pg_check_layout (pgio, req);
@@ -864,14 +865,14 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio, goto retry; } - mirror =FF_LAYOUT_COMP (pgio->pg_lseg, ds_idx); +for (i =0 ; i < pgio->pg_mirror_count; i++) { + mirror =FF_LAYOUT_COMP (pgio->pg_lseg, i); + pgm = &pgio->pg_mirrors[i]; + pgm->pg_bsize = mirror->mirror_ds->ds_versions[0 ].rsize; + } pgio->pg_mirror_idx = ds_idx; -/* read always uses only one mirror - idx 0 for pgio layer */ - pgm = &pgio->pg_mirrors[0 ]; - pgm->pg_bsize = mirror->mirror_ds->ds_versions[0 ].rsize; -if (NFS_SERVER (pgio->pg_inode)->flags & (NFS_MOUNT_SOFT |NFS_MOUNT_SOFTERR )) pgio->pg_maxretrans = io_maxretrans;
fs/nfs/nfs42proc.c +9 -1
@@ -355,7 +355,15 @@ static ssize_t _nfs42_proc_copy(struct file *src,truncate_pagecache_range (dst_inode, pos_dst, pos_dst + res->write_res.count); - +spin_lock (&dst_inode->i_lock); +NFS_I (dst_inode)->cache_validity |= (NFS_INO_REVAL_PAGECACHE | +NFS_INO_REVAL_FORCED |NFS_INO_INVALID_SIZE | +NFS_INO_INVALID_ATTR |NFS_INO_INVALID_DATA ); +spin_unlock (&dst_inode->i_lock); +spin_lock (&src_inode->i_lock); +NFS_I (src_inode)->cache_validity |= (NFS_INO_REVAL_PAGECACHE | +NFS_INO_REVAL_FORCED |NFS_INO_INVALID_ATIME ); +spin_unlock (&src_inode->i_lock); status = res->write_res.count; out:if (args->sync)
fs/pipe.c +41 -21
85 lines not on this page · raw message
fs/read_write.c +8 -0
@@ -538,6 +538,14 @@ ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_tinc_syscw (current);return ret; } +/* +* This "EXPORT_SYMBOL_GPL()" is more of a "EXPORT_SYMBOL_DONTUSE()", +* but autofs is one of the few internal kernel users that actually +* wants this _and_ can be built as a module. So we need to export +* this symbol for autofs, even though it really isn't appropriate +* for any other kernel modules. +*/ +EXPORT_SYMBOL_GPL (__kernel_write);ssize_t kernel_write (struct file *file,const void *buf,size_t count,loff_t *pos)
fs/splice.c +4 -4
@@ -563,7 +563,7 @@ static int splice_from_pipe_next(struct pipe_inode_info *pipe, struct splice_des sd->need_wakeup = false; } -pipe_wait (pipe); +pipe_wait_readable (pipe); }return 1 ;
@@ -1077,7 +1077,7 @@ static int wait_for_space(struct pipe_inode_info *pipe, unsigned flags)return -EAGAIN ;if (signal_pending (current))return -ERESTARTSYS ; -pipe_wait (pipe); +pipe_wait_writable (pipe); } }
@@ -1454,7 +1454,7 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags) ret = -EAGAIN ;break ; } -pipe_wait (pipe); +pipe_wait_readable (pipe); }pipe_unlock (pipe);
@@ -1493,7 +1493,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) ret = -ERESTARTSYS ;break ; } -pipe_wait (pipe); +pipe_wait_writable (pipe); }pipe_unlock (pipe);
fs/vboxsf/super.c +1 -1
@@ -384,7 +384,7 @@ static int vboxsf_setup(void)static int vboxsf_parse_monolithic (struct fs_context *fc,void *data) { -char *options = data; +unsigned char *options = data; if (options && options[0] == VBSF_MOUNT_SIGNATURE_BYTE_0 && options[1] == VBSF_MOUNT_SIGNATURE_BYTE_1 &&
include/linux/blkdev.h +2 -0
@@ -354,6 +354,8 @@ struct queue_limits {typedef int (*report_zones_cb )(struct blk_zone *zone,unsigned int idx,void *data); +void blk_queue_set_zoned (struct gendisk *disk,enum blk_zoned_model model); +#ifdef CONFIG_BLK_DEV_ZONED #define BLK_ALL_ZONES ((unsigned int)-1)
include/linux/memstick.h +1 -0
@@ -281,6 +281,7 @@ struct memstick_host {struct memstick_dev *card;unsigned int retries; +bool removing;/* Notify the host that some requests are pending. */ void (*request)(struct memstick_host *host);
include/linux/pipe_fs_i.h +3 -2
@@ -240,8 +240,9 @@ extern unsigned int pipe_max_size;extern unsigned long pipe_user_pages_hard;extern unsigned long pipe_user_pages_soft; -/* Drop the inode semaphore and wait for a pipe event, atomically */ -void pipe_wait (struct pipe_inode_info *pipe); +/* Wait for a pipe to be readable/writable while dropping the pipe lock */ +void pipe_wait_readable (struct pipe_inode_info *); +void pipe_wait_writable (struct pipe_inode_info *);struct pipe_inode_info *alloc_pipe_info (void );void free_pipe_info (struct pipe_inode_info *);
kernel/trace/ftrace.c +2 -4
@@ -6877,16 +6877,14 @@ static void ftrace_ops_assist_func(unsigned long ip, unsigned long parent_ip, {int bit; -if ((op->flags &FTRACE_OPS_FL_RCU ) && !rcu_is_watching ()) -return ; - bit =trace_test_and_set_recursion (TRACE_LIST_START ,TRACE_LIST_MAX );if (bit <0 )return ;preempt_disable_notrace (); - op->func (ip, parent_ip, op, regs); +if (!(op->flags &FTRACE_OPS_FL_RCU ) ||rcu_is_watching ()) + op->func (ip, parent_ip, op, regs);preempt_enable_notrace ();trace_clear_recursion (bit);
kernel/trace/trace.c +25 -23
78 lines not on this page · raw message
kernel/trace/trace_output.c +6 -6
@@ -497,7 +497,7 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)trace_find_cmdline (entry->pid, comm); -trace_seq_printf (s,"%8.8s-%-5d %3d" , +trace_seq_printf (s,"%8.8s-%-7d %3d" , comm, entry->pid, cpu);return trace_print_lat_fmt (s, entry);
@@ -588,15 +588,15 @@ int trace_print_context(struct trace_iterator *iter)trace_find_cmdline (entry->pid, comm); -trace_seq_printf (s,"%16s-%-5d " , comm, entry->pid); +trace_seq_printf (s,"%16s-%-7d " , comm, entry->pid);if (tr->trace_flags &TRACE_ITER_RECORD_TGID ) {unsigned int tgid =trace_find_tgid (entry->pid);if (!tgid) -trace_seq_printf (s,"(-----) " ); +trace_seq_printf (s,"(-------) " );else -trace_seq_printf (s,"(%5d) " , tgid); +trace_seq_printf (s,"(%7d) " , tgid); }trace_seq_printf (s,"[%03d] " , iter->cpu);
@@ -636,7 +636,7 @@ int trace_print_lat_context(struct trace_iterator *iter)trace_find_cmdline (entry->pid, comm);trace_seq_printf ( - s,"%16s %5d %3d %d %08x %08lx " , + s,"%16s %7d %3d %d %08x %08lx " , comm, entry->pid, iter->cpu, entry->flags, entry->preempt_count, iter->idx); }else {
@@ -917,7 +917,7 @@ static enum print_line_t trace_ctxwake_print(struct trace_iterator *iter,S =task_index_to_char (field->prev_state);trace_find_cmdline (field->next_pid, comm); trace_seq_printf(&iter->seq, - " %5d:%3d:%c %s [%03d] %5d:%3d:%c %s\n", + " %7d:%3d:%c %s [%03d] %7d:%3d:%c %s\n", field->prev_pid, field->prev_prio, S, delim,
lib/random32.c +1 -1
@@ -48,7 +48,7 @@ static inline void prandom_state_selftest(void) }#endif -DEFINE_PER_CPU(struct rnd_state, net_rand_state); +DEFINE_PER_CPU(struct rnd_state, net_rand_state) __latent_entropy;/** * prandom_u32_state - seeded pseudo-random number generator.
net/mac80211/rx.c +2 -1
@@ -451,7 +451,8 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,else if (status->bw ==RATE_INFO_BW_5 ) channel_flags |=IEEE80211_CHAN_QUARTER ; -if (status->band ==NL80211_BAND_5GHZ ) +if (status->band ==NL80211_BAND_5GHZ || + status->band ==NL80211_BAND_6GHZ ) channel_flags |=IEEE80211_CHAN_OFDM |IEEE80211_CHAN_5GHZ ;else if (status->encoding !=RX_ENC_LEGACY ) channel_flags |=IEEE80211_CHAN_DYN |IEEE80211_CHAN_2GHZ ;
net/mac80211/vht.c +4 -4
@@ -168,10 +168,7 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata,/* take some capabilities as-is */ cap_info =le32_to_cpu (vht_cap_ie->vht_cap_info); vht_cap->cap = cap_info; - vht_cap->cap &=IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 | -IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 | -IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 | -IEEE80211_VHT_CAP_RXLDPC | + vht_cap->cap &=IEEE80211_VHT_CAP_RXLDPC |IEEE80211_VHT_CAP_VHT_TXOP_PS |IEEE80211_VHT_CAP_HTC_VHT | IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK |
@@ -180,6 +177,9 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata,IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN |IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN ; + vht_cap->cap |=min_t (u32, cap_info &IEEE80211_VHT_CAP_MAX_MPDU_MASK , + own_cap.cap &IEEE80211_VHT_CAP_MAX_MPDU_MASK ); +/* and some based on our own capabilities */ switch (own_cap.cap &IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK ) {case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ :
scripts/dtc/Makefile +1 -1
@@ -10,7 +10,7 @@ dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \ dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o # Source files need to get at the userspace version of libfdt_env.h to compile -HOST_EXTRACFLAGS := -I $(srctree)/$(src)/libfdt +HOST_EXTRACFLAGS += -I $(srctree)/$(src)/libfdt ifeq ($(shell pkg-config --exists yaml-0.1 2>/dev/null && echo yes),) ifneq ($(CHECK_DT_BINDING)$(CHECK_DTBS),)
scripts/kallsyms.c +15 -1
@@ -82,6 +82,7 @@ static char *sym_name(const struct sym_entry *s)static bool is_ignored_symbol (const char *name,char type) { +/* Symbol names that exactly match to the following are ignored.*/ static const char *const ignored_symbols[] = {/* * Symbols which vary between passes. Passes 1 and 2 must have
@@ -104,6 +105,7 @@ static bool is_ignored_symbol(const char *name, char type)NULL }; +/* Symbol names that begin with the following are ignored.*/ static const char *const ignored_prefixes[] = {"$" ,/* local symbols for ARM, MIPS, etc. */ ".LASANPC" ,/* s390 kasan local symbols */
@@ -112,6 +114,7 @@ static bool is_ignored_symbol(const char *name, char type)NULL }; +/* Symbol names that end with the following are ignored.*/ static const char *const ignored_suffixes[] = {"_from_arm" ,/* arm */ "_from_thumb" ,/* arm */
@@ -119,9 +122,15 @@ static bool is_ignored_symbol(const char *name, char type) NULL }; +/* Symbol names that contain the following are ignored.*/ +static const char *const ignored_matches[] = { +".long_branch." ,/* ppc stub */ +".plt_branch." ,/* ppc stub */ +NULL + }; +const char *const *p; -/* Exclude symbols which vary between passes. */ for (p = ignored_symbols; *p; p++)if (!strcmp (name, *p))return true;
@@ -137,6 +146,11 @@ static bool is_ignored_symbol(const char *name, char type)return true; } +for (p = ignored_matches; *p; p++) { +if (strstr (name, *p)) +return true; + } +if (type =='U' || type =='u' )return true;/* exclude debugging symbols */
tools/io_uring/io_uring-bench.c +2 -2
@@ -130,7 +130,7 @@ static int io_uring_register_files(struct submitter *s) s->nr_files); } -static int gettid (void ) +static int lk_gettid (void ) {return syscall (__NR_gettid); }
@@ -281,7 +281,7 @@ static void *submitter_fn(void *data)struct io_sq_ring *ring = &s->sq_ring;int ret, prepped; -printf ("submitter=%d\n" ,gettid ()); +printf ("submitter=%d\n" ,lk_gettid ());srand48_r (pthread_self (), &s->rand);
tools/lib/bpf/Makefile +1 -1
@@ -59,7 +59,7 @@ FEATURE_USER = .libbpf FEATURE_TESTS = libelf libelf-mmap zlib bpf reallocarray FEATURE_DISPLAY = libelf zlib bpf -INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi +INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/tools/include/uapi FEATURE_CHECK_CFLAGS-bpf = $(INCLUDES) check_feat := 1