--Andy
> On Apr 18, 2020, at 12:42 PM, Linus Torvalds <torvalds(a)linux-foundation.org> wrote:
>
>>> On Fri, Apr 17, 2020 at 5:12 PM Dan Williams <dan.j.williams(a)intel.com> wrote:
>>>
>>> @@ -106,12 +108,10 @@ static __always_inline __must_check unsigned long
>>> memcpy_mcsafe(void *dst, const void *src, size_t cnt)
>>> {
>>> #ifdef CONFIG_X86_MCE
>>> - i(static_branch_unlikely(&mcsafe_key))
>>> - return __memcpy_mcsafe(dst, src, cnt);
>>> - else
>>> + if (static_branch_unlikely(&mcsafe_slow_key))
>>> + return memcpy_mcsafe_slow(dst, src, cnt);
>>> #endif
>>> - memcpy(dst, src, cnt);
>>> - return 0;
>>> + return memcpy_mcsafe_fast(dst, src, cnt);
>>> }
>
> It strikes me that I see no advantages to making this an inline function at all.
>
> Even for the good case - where it turns into just a memcpy because MCE
> is entirely disabled - it doesn't seem to matter.
>
> The only case that really helps is when the memcpy can be turned into
> a single access. Which - and I checked - does exist, with people doing
>
> r = memcpy_mcsafe(&sb_seq_count, &sb(wc)->seq_count, sizeof(uint64_t));
>
> to read a single 64-bit field which looks aligned to me.
>
> But that code is incredible garbage anyway, since even on a broken
> machine, there's no actual reason to use the slow variant for that
> whole access that I can tell. The macs-safe copy routines do not do
> anything worthwhile for a single access.
Maybe I’m missing something obvious, but what’s the alternative? The _mcsafe variants don’t just avoid the REP mess — they also tell the kernel that this particular access is recoverable via extable. With a regular memory access, the CPU may not explode, but do_machine_check() will, at very best, OOPS, and even that requires a certain degree of optimism. A panic is more likely.
From: Robbie Ko <robbieko(a)synology.com>
[ Upstream commit 8ecebf4d767e2307a946c8905278d6358eda35c3 ]
Commit e9894fd3e3b3 ("Btrfs: fix snapshot vs nocow writting") forced
nocow writes to fallback to COW, during writeback, when a snapshot is
created. This resulted in writes made before creating the snapshot to
unexpectedly fail with ENOSPC during writeback when success (0) was
returned to user space through the write system call.
The steps leading to this problem are:
1. When it's not possible to allocate data space for a write, the
buffered write path checks if a NOCOW write is possible. If it is,
it will not reserve space and success (0) is returned to user space.
2. Then when a snapshot is created, the root's will_be_snapshotted
atomic is incremented and writeback is triggered for all inode's that
belong to the root being snapshotted. Incrementing that atomic forces
all previous writes to fallback to COW during writeback (running
delalloc).
3. This results in the writeback for the inodes to fail and therefore
setting the ENOSPC error in their mappings, so that a subsequent
fsync on them will report the error to user space. So it's not a
completely silent data loss (since fsync will report ENOSPC) but it's
a very unexpected and undesirable behaviour, because if a clean
shutdown/unmount of the filesystem happens without previous calls to
fsync, it is expected to have the data present in the files after
mounting the filesystem again.
So fix this by adding a new atomic named snapshot_force_cow to the
root structure which prevents this behaviour and works the following way:
1. It is incremented when we start to create a snapshot after triggering
writeback and before waiting for writeback to finish.
2. This new atomic is now what is used by writeback (running delalloc)
to decide whether we need to fallback to COW or not. Because we
incremented this new atomic after triggering writeback in the
snapshot creation ioctl, we ensure that all buffered writes that
happened before snapshot creation will succeed and not fallback to
COW (which would make them fail with ENOSPC).
3. The existing atomic, will_be_snapshotted, is kept because it is used
to force new buffered writes, that start after we started
snapshotting, to reserve data space even when NOCOW is possible.
This makes these writes fail early with ENOSPC when there's no
available space to allocate, preventing the unexpected behaviour of
writeback later failing with ENOSPC due to a fallback to COW mode.
Fixes: e9894fd3e3b3 ("Btrfs: fix snapshot vs nocow writting")
Signed-off-by: Robbie Ko <robbieko(a)synology.com>
Reviewed-by: Filipe Manana <fdmanana(a)suse.com>
Signed-off-by: David Sterba <dsterba(a)suse.com>
Signed-off-by: Anand Jain <anand.jain(a)oracle.com>
Conflicts:
fs/btrfs/disk-io.c
---
fs/btrfs/ctree.h | 1 +
fs/btrfs/disk-io.c | 1 +
fs/btrfs/inode.c | 25 ++++---------------------
fs/btrfs/ioctl.c | 16 ++++++++++++++++
4 files changed, 22 insertions(+), 21 deletions(-)
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index de951987fd23..19a668e9164b 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -1257,6 +1257,7 @@ struct btrfs_root {
int send_in_progress;
struct btrfs_subvolume_writers *subv_writers;
atomic_t will_be_snapshotted;
+ atomic_t snapshot_force_cow;
/* For qgroup metadata space reserve */
atomic64_t qgroup_meta_rsv;
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 495430e4f84b..ace58d6a270b 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1200,6 +1200,7 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info,
refcount_set(&root->refs, 1);
atomic_set(&root->will_be_snapshotted, 0);
atomic64_set(&root->qgroup_meta_rsv, 0);
+ atomic_set(&root->snapshot_force_cow, 0);
root->log_transid = 0;
root->log_transid_committed = -1;
root->last_log_commit = 0;
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index c9e7b92d0f21..e985e820724e 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -1335,7 +1335,7 @@ static noinline int run_delalloc_nocow(struct inode *inode,
u64 disk_num_bytes;
u64 ram_bytes;
int extent_type;
- int ret, err;
+ int ret;
int type;
int nocow;
int check_prev = 1;
@@ -1460,11 +1460,8 @@ static noinline int run_delalloc_nocow(struct inode *inode,
* if there are pending snapshots for this root,
* we fall into common COW way.
*/
- if (!nolock) {
- err = btrfs_start_write_no_snapshotting(root);
- if (!err)
- goto out_check;
- }
+ if (!nolock && atomic_read(&root->snapshot_force_cow))
+ goto out_check;
/*
* force cow if csum exists in the range.
* this ensure that csum for a given extent are
@@ -1473,9 +1470,6 @@ static noinline int run_delalloc_nocow(struct inode *inode,
ret = csum_exist_in_range(fs_info, disk_bytenr,
num_bytes);
if (ret) {
- if (!nolock)
- btrfs_end_write_no_snapshotting(root);
-
/*
* ret could be -EIO if the above fails to read
* metadata.
@@ -1488,11 +1482,8 @@ static noinline int run_delalloc_nocow(struct inode *inode,
WARN_ON_ONCE(nolock);
goto out_check;
}
- if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr)) {
- if (!nolock)
- btrfs_end_write_no_snapshotting(root);
+ if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr))
goto out_check;
- }
nocow = 1;
} else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
extent_end = found_key.offset +
@@ -1505,8 +1496,6 @@ static noinline int run_delalloc_nocow(struct inode *inode,
out_check:
if (extent_end <= start) {
path->slots[0]++;
- if (!nolock && nocow)
- btrfs_end_write_no_snapshotting(root);
if (nocow)
btrfs_dec_nocow_writers(fs_info, disk_bytenr);
goto next_slot;
@@ -1528,8 +1517,6 @@ static noinline int run_delalloc_nocow(struct inode *inode,
end, page_started, nr_written, 1,
NULL);
if (ret) {
- if (!nolock && nocow)
- btrfs_end_write_no_snapshotting(root);
if (nocow)
btrfs_dec_nocow_writers(fs_info,
disk_bytenr);
@@ -1549,8 +1536,6 @@ static noinline int run_delalloc_nocow(struct inode *inode,
ram_bytes, BTRFS_COMPRESS_NONE,
BTRFS_ORDERED_PREALLOC);
if (IS_ERR(em)) {
- if (!nolock && nocow)
- btrfs_end_write_no_snapshotting(root);
if (nocow)
btrfs_dec_nocow_writers(fs_info,
disk_bytenr);
@@ -1589,8 +1574,6 @@ static noinline int run_delalloc_nocow(struct inode *inode,
EXTENT_CLEAR_DATA_RESV,
PAGE_UNLOCK | PAGE_SET_PRIVATE2);
- if (!nolock && nocow)
- btrfs_end_write_no_snapshotting(root);
cur_offset = extent_end;
/*
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 73a0fc60e395..56123ce3b9f0 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -655,6 +655,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
struct btrfs_pending_snapshot *pending_snapshot;
struct btrfs_trans_handle *trans;
int ret;
+ bool snapshot_force_cow = false;
if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state))
return -EINVAL;
@@ -671,6 +672,11 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
goto free_pending;
}
+ /*
+ * Force new buffered writes to reserve space even when NOCOW is
+ * possible. This is to avoid later writeback (running dealloc) to
+ * fallback to COW mode and unexpectedly fail with ENOSPC.
+ */
atomic_inc(&root->will_be_snapshotted);
smp_mb__after_atomic();
btrfs_wait_for_no_snapshotting_writes(root);
@@ -679,6 +685,14 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
if (ret)
goto dec_and_free;
+ /*
+ * All previous writes have started writeback in NOCOW mode, so now
+ * we force future writes to fallback to COW mode during snapshot
+ * creation.
+ */
+ atomic_inc(&root->snapshot_force_cow);
+ snapshot_force_cow = true;
+
btrfs_wait_ordered_extents(root, U64_MAX, 0, (u64)-1);
btrfs_init_block_rsv(&pending_snapshot->block_rsv,
@@ -744,6 +758,8 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
fail:
btrfs_subvolume_release_metadata(fs_info, &pending_snapshot->block_rsv);
dec_and_free:
+ if (snapshot_force_cow)
+ atomic_dec(&root->snapshot_force_cow);
if (atomic_dec_and_test(&root->will_be_snapshotted))
wake_up_atomic_t(&root->will_be_snapshotted);
free_pending:
--
2.25.1
On Thu, Oct 08, 2020 at 11:12:37AM +0100, Chris Wilson wrote:
> Quoting Ville Syrjälä (2020-10-08 11:04:22)
> > On Thu, Oct 08, 2020 at 10:54:36AM +0100, Chris Wilson wrote:
> > > The GPU is trashing the low pages of its reserved memory upon reset. If
> > > we are using this memory for ringbuffers, then we will dutiful resubmit
> > > the trashed rings after the reset causing further resets, and worse. We
> > > must exclude this range from our own use. The value of 128KiB was found
> > > by empirical measurement on gen9.
> > >
> > > Signed-off-by: Chris Wilson <chris(a)chris-wilson.co.uk>
> > > Cc: stable(a)vger.kernel.org
> > > ---
> > > v2 comes with a selftest to see how widespread the issue is
> >
> > Do we need something to make sure FBC isn't scribbling into
> > stolen during the test?
>
> igt runs the tests with disable_display=1, that is still being honoured
> right?
It just marks all connectors as disconnected now. If coming straight
from boot presumaly whatever the BIOS lit up could still be on at that
point. Though I guess we would have typically done a module reload
for this? rmmod should shut things down IIRC. Also wouldn't think the
BIOS would even enables FBC.
>
> I did think about looking up the address to see if the drm_mm_node is in
> use to try and filter out such users. For starters, I just want to
> confirm that CI is seeing what I'm seeing.
> -Chris
--
Ville Syrjälä
Intel
If more than two jobs end up timeout-ing concurrently, only one of them
(the one attached to the scheduler acquiring the lock) is fully handled.
The other one remains in a dangling state where it's no longer part of
the scheduling queue, but still blocks something in scheduler, leading
to repetitive timeouts when new jobs are queued.
Let's make sure all bad jobs are properly handled by the thread
acquiring the lock.
v3:
- Add Steven's R-b
- Don't take the sched_lock when stopping the schedulers
v2:
- Fix the subject prefix
- Stop the scheduler before returning from panfrost_job_timedout()
- Call cancel_delayed_work_sync() after drm_sched_stop() to make sure
no timeout handlers are in flight when we reset the GPU (Steven Price)
- Make sure we release the reset lock before restarting the
schedulers (Steven Price)
Fixes: f3ba91228e8e ("drm/panfrost: Add initial panfrost driver")
Cc: <stable(a)vger.kernel.org>
Signed-off-by: Boris Brezillon <boris.brezillon(a)collabora.com>
Reviewed-by: Steven Price <steven.price(a)arm.com>
---
drivers/gpu/drm/panfrost/panfrost_job.c | 62 +++++++++++++++++++++----
1 file changed, 53 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
index 30e7b7196dab..d0469e944143 100644
--- a/drivers/gpu/drm/panfrost/panfrost_job.c
+++ b/drivers/gpu/drm/panfrost/panfrost_job.c
@@ -25,7 +25,8 @@
struct panfrost_queue_state {
struct drm_gpu_scheduler sched;
-
+ bool stopped;
+ struct mutex lock;
u64 fence_context;
u64 emit_seqno;
};
@@ -369,6 +370,24 @@ void panfrost_job_enable_interrupts(struct panfrost_device *pfdev)
job_write(pfdev, JOB_INT_MASK, irq_mask);
}
+static bool panfrost_scheduler_stop(struct panfrost_queue_state *queue,
+ struct drm_sched_job *bad)
+{
+ bool stopped = false;
+
+ mutex_lock(&queue->lock);
+ if (!queue->stopped) {
+ drm_sched_stop(&queue->sched, bad);
+ if (bad)
+ drm_sched_increase_karma(bad);
+ queue->stopped = true;
+ stopped = true;
+ }
+ mutex_unlock(&queue->lock);
+
+ return stopped;
+}
+
static void panfrost_job_timedout(struct drm_sched_job *sched_job)
{
struct panfrost_job *job = to_panfrost_job(sched_job);
@@ -392,19 +411,39 @@ static void panfrost_job_timedout(struct drm_sched_job *sched_job)
job_read(pfdev, JS_TAIL_LO(js)),
sched_job);
+ /* Scheduler is already stopped, nothing to do. */
+ if (!panfrost_scheduler_stop(&pfdev->js->queue[js], sched_job))
+ return;
+
if (!mutex_trylock(&pfdev->reset_lock))
return;
for (i = 0; i < NUM_JOB_SLOTS; i++) {
struct drm_gpu_scheduler *sched = &pfdev->js->queue[i].sched;
- drm_sched_stop(sched, sched_job);
- if (js != i)
- /* Ensure any timeouts on other slots have finished */
+ /*
+ * If the queue is still active, make sure we wait for any
+ * pending timeouts.
+ */
+ if (!pfdev->js->queue[i].stopped)
cancel_delayed_work_sync(&sched->work_tdr);
- }
- drm_sched_increase_karma(sched_job);
+ /*
+ * If the scheduler was not already stopped, there's a tiny
+ * chance a timeout has expired just before we stopped it, and
+ * drm_sched_stop() does not flush pending works. Let's flush
+ * them now so the timeout handler doesn't get called in the
+ * middle of a reset.
+ */
+ if (panfrost_scheduler_stop(&pfdev->js->queue[i], NULL))
+ cancel_delayed_work_sync(&sched->work_tdr);
+
+ /*
+ * Now that we cancelled the pending timeouts, we can safely
+ * reset the stopped state.
+ */
+ pfdev->js->queue[i].stopped = false;
+ }
spin_lock_irqsave(&pfdev->js->job_lock, flags);
for (i = 0; i < NUM_JOB_SLOTS; i++) {
@@ -421,11 +460,11 @@ static void panfrost_job_timedout(struct drm_sched_job *sched_job)
for (i = 0; i < NUM_JOB_SLOTS; i++)
drm_sched_resubmit_jobs(&pfdev->js->queue[i].sched);
+ mutex_unlock(&pfdev->reset_lock);
+
/* restart scheduler after GPU is usable again */
for (i = 0; i < NUM_JOB_SLOTS; i++)
drm_sched_start(&pfdev->js->queue[i].sched, true);
-
- mutex_unlock(&pfdev->reset_lock);
}
static const struct drm_sched_backend_ops panfrost_sched_ops = {
@@ -558,6 +597,7 @@ int panfrost_job_open(struct panfrost_file_priv *panfrost_priv)
int ret, i;
for (i = 0; i < NUM_JOB_SLOTS; i++) {
+ mutex_init(&js->queue[i].lock);
sched = &js->queue[i].sched;
ret = drm_sched_entity_init(&panfrost_priv->sched_entity[i],
DRM_SCHED_PRIORITY_NORMAL, &sched,
@@ -570,10 +610,14 @@ int panfrost_job_open(struct panfrost_file_priv *panfrost_priv)
void panfrost_job_close(struct panfrost_file_priv *panfrost_priv)
{
+ struct panfrost_device *pfdev = panfrost_priv->pfdev;
+ struct panfrost_job_slot *js = pfdev->js;
int i;
- for (i = 0; i < NUM_JOB_SLOTS; i++)
+ for (i = 0; i < NUM_JOB_SLOTS; i++) {
drm_sched_entity_destroy(&panfrost_priv->sched_entity[i]);
+ mutex_destroy(&js->queue[i].lock);
+ }
}
int panfrost_job_is_idle(struct panfrost_device *pfdev)
--
2.26.2
This is the start of the stable review cycle for the 5.8.14 release.
There are 85 patches in this series, all will be posted as a response
to this one. If anyone has any issues with these being applied, please
let me know.
Responses should be made by Wed, 07 Oct 2020 14:20:55 +0000.
Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.8.14-rc1…
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.8.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Linux 5.8.14-rc1
Al Viro <viro(a)zeniv.linux.org.uk>
ep_create_wakeup_source(): dentry name can change under you...
Al Viro <viro(a)zeniv.linux.org.uk>
epoll: EPOLL_CTL_ADD: close the race in decision to take fast path
Al Viro <viro(a)zeniv.linux.org.uk>
epoll: replace ->visited/visited_list with generation count
Al Viro <viro(a)zeniv.linux.org.uk>
epoll: do not insert into poll queues until all sanity checks are done
Damien Le Moal <damien.lemoal(a)wdc.com>
scsi: sd: sd_zbc: Fix ZBC disk initialization
Damien Le Moal <damien.lemoal(a)wdc.com>
scsi: sd: sd_zbc: Fix handling of host-aware ZBC disks
Zhenyu Wang <zhenyuw(a)linux.intel.com>
drm/i915/gvt: Fix port number for BDW on EDID region setup
Andy Shevchenko <andriy.shevchenko(a)linux.intel.com>
gpiolib: Fix line event handling in syscall compatible mode
Thibaut Sautereau <thibaut.sautereau(a)ssi.gouv.fr>
random32: Restore __latent_entropy attribute on net_rand_state
Linus Torvalds <torvalds(a)linux-foundation.org>
pipe: remove pipe_wait() and fix wakeup race with splice
Adrian Huang <ahuang12(a)lenovo.com>
iommu/amd: Fix the overwritten field in IVMD header
Andy Shevchenko <andriy.shevchenko(a)linux.intel.com>
gpio: pca953x: Correctly initialize registers 6 and 7 for PCA957x
Hanks Chen <hanks.chen(a)mediatek.com>
pinctrl: mediatek: check mtk_is_virt_gpio input parameter
Dmitry Baryshkov <dmitry.baryshkov(a)linaro.org>
pinctrl: qcom: sm8250: correct sdc2_clk
Linus Torvalds <torvalds(a)linux-foundation.org>
autofs: use __kernel_write() for the autofs pipe writing
Uwe Kleine-König <u.kleine-koenig(a)pengutronix.de>
scripts/dtc: only append to HOST_EXTRACFLAGS instead of overwriting
yangerkun <yangerkun(a)huawei.com>
blk-mq: call commit_rqs while list empty but error happen
Vincent Huang <vincent.huang(a)tw.synaptics.com>
Input: trackpoint - enable Synaptics trackpoints
Tali Perry <tali.perry1(a)gmail.com>
i2c: npcm7xx: Clear LAST bit after a failed transaction.
Nicolas VINCENT <nicolas.vincent(a)vossloh.com>
i2c: cpm: Fix i2c_ram structure
Tao Ren <rentao.bupt(a)gmail.com>
gpio: aspeed: fix ast2600 bank properties
Jeremy Kerr <jk(a)codeconstruct.com.au>
gpio/aspeed-sgpio: don't enable all interrupts by default
Jeremy Kerr <jk(a)codeconstruct.com.au>
gpio/aspeed-sgpio: enable access to all 80 input & output sgpios
Ye Li <ye.li(a)nxp.com>
gpio: pca953x: Fix uninitialized pending variable
Yu Kuai <yukuai3(a)huawei.com>
iommu/exynos: add missing put_device() call in exynos_iommu_of_xlate()
Sudhakar Panneerselvam <sudhakar.panneerselvam(a)oracle.com>
scsi: target: Fix lun lookup for TARGET_SCF_LOOKUP_LUN_FROM_TAG case
Marek Szyprowski <m.szyprowski(a)samsung.com>
clk: samsung: exynos4: mark 'chipid' clock as CLK_IGNORE_UNUSED
Vladimir Murzin <vladimir.murzin(a)arm.com>
dmaengine: dmatest: Prevent to run on misconfigured channel
Thierry Reding <treding(a)nvidia.com>
clk: tegra: Fix missing prototype for tegra210_clk_register_emc()
Thierry Reding <treding(a)nvidia.com>
clk: tegra: Always program PLL_E when enabled
Trond Myklebust <trond.myklebust(a)hammerspace.com>
pNFS/flexfiles: Ensure we initialise the mirror bsizes correctly on read
Olga Kornievskaia <kolga(a)netapp.com>
NFSv4.2: fix client's attribute cache management for copy_file_range
Jeffrey Mitchell <jeffrey.mitchell(a)starlab.io>
nfs: Fix security label length not being reset
Chris Packham <chris.packham(a)alliedtelesis.co.nz>
pinctrl: mvebu: Fix i2c sda definition for 98DX3236
Dan Carpenter <dan.carpenter(a)oracle.com>
phy: ti: am654: Fix a leak in serdes_am654_probe()
Taiping Lai <taiping.lai(a)unisoc.com>
gpio: sprd: Clear interrupt when setting the type as edge
Masahiro Yamada <masahiroy(a)kernel.org>
scripts/kallsyms: skip ppc compiler stub *.long_branch.* / *.plt_branch.*
James Smart <james.smart(a)broadcom.com>
nvme-fc: fail new connections to a deleted host or remote port
Xianting Tian <tian.xianting(a)h3c.com>
nvme-pci: fix NULL req in completion handler
Xiaoliang Yang <xiaoliang.yang_1(a)nxp.com>
net: dsa: felix: fix some key offsets for IP4_TCP_UDP VCAP IS2 entries
Chris Packham <chris.packham(a)alliedtelesis.co.nz>
spi: fsl-espi: Only process interrupts for expected events
Ulf Hansson <ulf.hansson(a)linaro.org>
cpuidle: psci: Fix suspicious RCU usage
Jens Axboe <axboe(a)kernel.dk>
io_uring: mark statx/files_update/epoll_ctl as non-SQPOLL
Douglas Gilbert <dgilbert(a)interlog.com>
tools/io_uring: fix compile breakage
Sebastian Andrzej Siewior <bigeasy(a)linutronix.de>
tracing: Make the space reserved for the pid wider
Felix Fietkau <nbd(a)nbd.name>
mac80211: do not allow bigger VHT MPDUs than the hardware supports
Aloka Dixit <alokad(a)codeaurora.org>
mac80211: Fix radiotap header channel flag for 6GHz band
Xie He <xie.he.0141(a)gmail.com>
drivers/net/wan/hdlc: Set skb->protocol before transmitting
Xie He <xie.he.0141(a)gmail.com>
drivers/net/wan/lapbether: Make skb->protocol consistent with the header
Al Viro <viro(a)zeniv.linux.org.uk>
fuse: fix the ->direct_IO() treatment of iov_iter
Chaitanya Kulkarni <chaitanya.kulkarni(a)wdc.com>
nvme-core: get/put ctrl and transport module in nvme_dev_open/release()
David Milburn <dmilburn(a)redhat.com>
nvme-pci: disable the write zeros command for Intel 600P/P3100
Olympia Giannou <ogiannou(a)gmail.com>
rndis_host: increase sleep time in the query-response loop
Lucy Yan <lucyyan(a)google.com>
net: dec: de2104x: Increase receive ring size for Tulip
Dexuan Cui <decui(a)microsoft.com>
hv_netvsc: Cache the current data path to avoid duplicate call and message
Martin Cerveny <m.cerveny(a)computer.org>
drm/sun4i: mixer: Extend regmap max_register
Mauro Carvalho Chehab <mchehab+huawei(a)kernel.org>
Revert "wlcore: Adding suppoprt for IGTK key in wlcore driver"
Xie He <xie.he.0141(a)gmail.com>
drivers/net/wan/hdlc_fr: Add needed_headroom for PVC devices
Naveen N. Rao <naveen.n.rao(a)linux.vnet.ibm.com>
libbpf: Remove arch-specific include path in Makefile
Felix Fietkau <nbd(a)nbd.name>
mt76: mt7915: use ieee80211_free_txskb to free tx skbs
Hans de Goede <hdegoede(a)redhat.com>
vboxsf: Fix the check for the old binary mount-arguments struct
Guo Ren <guoren(a)linux.alibaba.com>
clocksource/drivers/timer-gx6605s: Fixup counter reload
Juergen Gross <jgross(a)suse.com>
xen/events: don't use chip_data for legacy IRQs
Jean Delvare <jdelvare(a)suse.de>
drm/amdgpu: restore proper ref count in amdgpu_display_crtc_set_config
Kai-Heng Feng <kai.heng.feng(a)canonical.com>
memstick: Skip allocating card when removing host
Steven Rostedt (VMware) <rostedt(a)goodmis.org>
tracing: Fix trace_find_next_entry() accounting of temp buffer size
Steven Rostedt (VMware) <rostedt(a)goodmis.org>
ftrace: Move RCU is watching check after recursion check
Dmitry Baryshkov <dmitry.baryshkov(a)linaro.org>
iio: adc: qcom-spmi-adc5: fix driver name
Jiri Kosina <jkosina(a)suse.cz>
Input: i8042 - add nopnp quirk for Acer Aspire 5 A515
Jean Delvare <jdelvare(a)suse.de>
i2c: i801: Exclude device from suspend direct complete optimization
Mark Mielke <mark.mielke(a)gmail.com>
scsi: iscsi: iscsi_tcp: Avoid holding spinlock while calling getpeername()
Dinh Nguyen <dinguyen(a)kernel.org>
clk: socfpga: stratix10: fix the divider for the emac_ptp_free_clk
Marek Szyprowski <m.szyprowski(a)samsung.com>
clk: samsung: Keep top BPLL mux on Exynos542x enabled
Ed Wildgoose <lists(a)wildgooses.com>
gpio: amd-fch: correct logic of GPIO_LINE_DIRECTION
dillon min <dillon.minfei(a)gmail.com>
gpio: tc35894: fix up tc35894 interrupt configuration
Bartosz Golaszewski <bgolaszewski(a)baylibre.com>
gpio: mockup: fix resource leak in error path
Ahmad Fatoum <a.fatoum(a)pengutronix.de>
gpio: siox: explicitly support only threaded irqs
M. Vefa Bicakci <m.v.b(a)runbox.com>
usbcore/driver: Accommodate usbip
M. Vefa Bicakci <m.v.b(a)runbox.com>
usbcore/driver: Fix incorrect downcast
M. Vefa Bicakci <m.v.b(a)runbox.com>
usbcore/driver: Fix specific driver selection
M. Vefa Bicakci <m.v.b(a)runbox.com>
Revert "usbip: Implement a match function to fix usbip"
Bryan O'Donoghue <bryan.odonoghue(a)linaro.org>
USB: gadget: f_ncm: Fix NDP16 datagram validation
Hans de Goede <hdegoede(a)redhat.com>
mmc: sdhci: Workaround broken command queuing on Intel GLK based IRBIS models
Filipe Manana <fdmanana(a)suse.com>
btrfs: fix filesystem corruption after a device replace
Jens Axboe <axboe(a)kernel.dk>
io_uring: always delete double poll wait entry on match
-------------
Diffstat:
.../devicetree/bindings/gpio/sgpio-aspeed.txt | 5 +-
Makefile | 4 +-
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, 761 insertions(+), 462 deletions(-)