From: Sasha Levin <sashal@kernel.org> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Nicholas Piggin <npiggin@gmail.com>, "David S . Miller" <davem@davemloft.net>, Michael Ellerman <mpe@ellerman.id.au>, Sasha Levin <sashal@kernel.org>, sparclinux@vger.kernel.org Subject: [PATCH AUTOSEL 4.19 03/60] sparc64: remove mm_cpumask clearing to fix kthread_use_mm race Date: Mon, 26 Oct 2020 20:03:18 -0400 [thread overview] Message-ID: <20201027000415.1026364-3-sashal@kernel.org> (raw) In-Reply-To: <20201027000415.1026364-1-sashal@kernel.org> From: Nicholas Piggin <npiggin@gmail.com> [ Upstream commit bafb056ce27940c9994ea905336aa8f27b4f7275 ] The de facto (and apparently uncommented) standard for using an mm had, thanks to this code in sparc if nothing else, been that you must have a reference on mm_users *and that reference must have been obtained with mmget()*, i.e., from a thread with a reference to mm_users that had used the mm. The introduction of mmget_not_zero() in commit d2005e3f41d4 ("userfaultfd: don't pin the user memory in userfaultfd_file_create()") allowed mm_count holders to aoperate on user mappings asynchronously from the actual threads using the mm, but they were not to load those mappings into their TLB (i.e., walking vmas and page tables is okay, kthread_use_mm() is not). io_uring 2b188cc1bb857 ("Add io_uring IO interface") added code which does a kthread_use_mm() from a mmget_not_zero() refcount. The problem with this is code which previously assumed mm == current->mm and mm->mm_users == 1 implies the mm will remain single-threaded at least until this thread creates another mm_users reference, has now broken. arch/sparc/kernel/smp_64.c: if (atomic_read(&mm->mm_users) == 1) { cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); goto local_flush_and_out; } vs fs/io_uring.c if (unlikely(!(ctx->flags & IORING_SETUP_SQPOLL) || !mmget_not_zero(ctx->sqo_mm))) return -EFAULT; kthread_use_mm(ctx->sqo_mm); mmget_not_zero() could come in right after the mm_users == 1 test, then kthread_use_mm() which sets its CPU in the mm_cpumask. That update could be lost if cpumask_copy() occurs afterward. I propose we fix this by allowing mmget_not_zero() to be a first-class reference, and not have this obscure undocumented and unchecked restriction. The basic fix for sparc64 is to remove its mm_cpumask clearing code. The optimisation could be effectively restored by sending IPIs to mm_cpumask members and having them remove themselves from mm_cpumask. This is more tricky so I leave it as an exercise for someone with a sparc64 SMP. powerpc has a (currently similarly broken) example. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200914045219.3736466-4-npiggin@gmail.com Signed-off-by: Sasha Levin <sashal@kernel.org> --- arch/sparc/kernel/smp_64.c | 65 ++++++++------------------------------ 1 file changed, 14 insertions(+), 51 deletions(-) diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index d3ea1f3c06a00..a7d7b7ade42fc 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c @@ -1039,38 +1039,9 @@ void smp_fetch_global_pmu(void) * are flush_tlb_*() routines, and these run after flush_cache_*() * which performs the flushw. * - * The SMP TLB coherency scheme we use works as follows: - * - * 1) mm->cpu_vm_mask is a bit mask of which cpus an address - * space has (potentially) executed on, this is the heuristic - * we use to avoid doing cross calls. - * - * Also, for flushing from kswapd and also for clones, we - * use cpu_vm_mask as the list of cpus to make run the TLB. - * - * 2) TLB context numbers are shared globally across all processors - * in the system, this allows us to play several games to avoid - * cross calls. - * - * One invariant is that when a cpu switches to a process, and - * that processes tsk->active_mm->cpu_vm_mask does not have the - * current cpu's bit set, that tlb context is flushed locally. - * - * If the address space is non-shared (ie. mm->count == 1) we avoid - * cross calls when we want to flush the currently running process's - * tlb state. This is done by clearing all cpu bits except the current - * processor's in current->mm->cpu_vm_mask and performing the - * flush locally only. This will force any subsequent cpus which run - * this task to flush the context from the local tlb if the process - * migrates to another cpu (again). - * - * 3) For shared address spaces (threads) and swapping we bite the - * bullet for most cases and perform the cross call (but only to - * the cpus listed in cpu_vm_mask). - * - * The performance gain from "optimizing" away the cross call for threads is - * questionable (in theory the big win for threads is the massive sharing of - * address space state across processors). + * mm->cpu_vm_mask is a bit mask of which cpus an address + * space has (potentially) executed on, this is the heuristic + * we use to limit cross calls. */ /* This currently is only used by the hugetlb arch pre-fault @@ -1080,18 +1051,13 @@ void smp_fetch_global_pmu(void) void smp_flush_tlb_mm(struct mm_struct *mm) { u32 ctx = CTX_HWBITS(mm->context); - int cpu = get_cpu(); - if (atomic_read(&mm->mm_users) == 1) { - cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); - goto local_flush_and_out; - } + get_cpu(); smp_cross_call_masked(&xcall_flush_tlb_mm, ctx, 0, 0, mm_cpumask(mm)); -local_flush_and_out: __flush_tlb_mm(ctx, SECONDARY_CONTEXT); put_cpu(); @@ -1114,17 +1080,15 @@ void smp_flush_tlb_pending(struct mm_struct *mm, unsigned long nr, unsigned long { u32 ctx = CTX_HWBITS(mm->context); struct tlb_pending_info info; - int cpu = get_cpu(); + + get_cpu(); info.ctx = ctx; info.nr = nr; info.vaddrs = vaddrs; - if (mm == current->mm && atomic_read(&mm->mm_users) == 1) - cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); - else - smp_call_function_many(mm_cpumask(mm), tlb_pending_func, - &info, 1); + smp_call_function_many(mm_cpumask(mm), tlb_pending_func, + &info, 1); __flush_tlb_pending(ctx, nr, vaddrs); @@ -1134,14 +1098,13 @@ void smp_flush_tlb_pending(struct mm_struct *mm, unsigned long nr, unsigned long void smp_flush_tlb_page(struct mm_struct *mm, unsigned long vaddr) { unsigned long context = CTX_HWBITS(mm->context); - int cpu = get_cpu(); - if (mm == current->mm && atomic_read(&mm->mm_users) == 1) - cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); - else - smp_cross_call_masked(&xcall_flush_tlb_page, - context, vaddr, 0, - mm_cpumask(mm)); + get_cpu(); + + smp_cross_call_masked(&xcall_flush_tlb_page, + context, vaddr, 0, + mm_cpumask(mm)); + __flush_tlb_page(context, vaddr); put_cpu(); -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Sasha Levin <sashal@kernel.org> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Nicholas Piggin <npiggin@gmail.com>, "David S . Miller" <davem@davemloft.net>, Michael Ellerman <mpe@ellerman.id.au>, Sasha Levin <sashal@kernel.org>, sparclinux@vger.kernel.org Subject: [PATCH AUTOSEL 4.19 03/60] sparc64: remove mm_cpumask clearing to fix kthread_use_mm race Date: Tue, 27 Oct 2020 00:03:18 +0000 [thread overview] Message-ID: <20201027000415.1026364-3-sashal@kernel.org> (raw) In-Reply-To: <20201027000415.1026364-1-sashal@kernel.org> From: Nicholas Piggin <npiggin@gmail.com> [ Upstream commit bafb056ce27940c9994ea905336aa8f27b4f7275 ] The de facto (and apparently uncommented) standard for using an mm had, thanks to this code in sparc if nothing else, been that you must have a reference on mm_users *and that reference must have been obtained with mmget()*, i.e., from a thread with a reference to mm_users that had used the mm. The introduction of mmget_not_zero() in commit d2005e3f41d4 ("userfaultfd: don't pin the user memory in userfaultfd_file_create()") allowed mm_count holders to aoperate on user mappings asynchronously from the actual threads using the mm, but they were not to load those mappings into their TLB (i.e., walking vmas and page tables is okay, kthread_use_mm() is not). io_uring 2b188cc1bb857 ("Add io_uring IO interface") added code which does a kthread_use_mm() from a mmget_not_zero() refcount. The problem with this is code which previously assumed mm = current->mm and mm->mm_users = 1 implies the mm will remain single-threaded at least until this thread creates another mm_users reference, has now broken. arch/sparc/kernel/smp_64.c: if (atomic_read(&mm->mm_users) = 1) { cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); goto local_flush_and_out; } vs fs/io_uring.c if (unlikely(!(ctx->flags & IORING_SETUP_SQPOLL) || !mmget_not_zero(ctx->sqo_mm))) return -EFAULT; kthread_use_mm(ctx->sqo_mm); mmget_not_zero() could come in right after the mm_users = 1 test, then kthread_use_mm() which sets its CPU in the mm_cpumask. That update could be lost if cpumask_copy() occurs afterward. I propose we fix this by allowing mmget_not_zero() to be a first-class reference, and not have this obscure undocumented and unchecked restriction. The basic fix for sparc64 is to remove its mm_cpumask clearing code. The optimisation could be effectively restored by sending IPIs to mm_cpumask members and having them remove themselves from mm_cpumask. This is more tricky so I leave it as an exercise for someone with a sparc64 SMP. powerpc has a (currently similarly broken) example. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200914045219.3736466-4-npiggin@gmail.com Signed-off-by: Sasha Levin <sashal@kernel.org> --- arch/sparc/kernel/smp_64.c | 65 ++++++++------------------------------ 1 file changed, 14 insertions(+), 51 deletions(-) diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index d3ea1f3c06a00..a7d7b7ade42fc 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c @@ -1039,38 +1039,9 @@ void smp_fetch_global_pmu(void) * are flush_tlb_*() routines, and these run after flush_cache_*() * which performs the flushw. * - * The SMP TLB coherency scheme we use works as follows: - * - * 1) mm->cpu_vm_mask is a bit mask of which cpus an address - * space has (potentially) executed on, this is the heuristic - * we use to avoid doing cross calls. - * - * Also, for flushing from kswapd and also for clones, we - * use cpu_vm_mask as the list of cpus to make run the TLB. - * - * 2) TLB context numbers are shared globally across all processors - * in the system, this allows us to play several games to avoid - * cross calls. - * - * One invariant is that when a cpu switches to a process, and - * that processes tsk->active_mm->cpu_vm_mask does not have the - * current cpu's bit set, that tlb context is flushed locally. - * - * If the address space is non-shared (ie. mm->count = 1) we avoid - * cross calls when we want to flush the currently running process's - * tlb state. This is done by clearing all cpu bits except the current - * processor's in current->mm->cpu_vm_mask and performing the - * flush locally only. This will force any subsequent cpus which run - * this task to flush the context from the local tlb if the process - * migrates to another cpu (again). - * - * 3) For shared address spaces (threads) and swapping we bite the - * bullet for most cases and perform the cross call (but only to - * the cpus listed in cpu_vm_mask). - * - * The performance gain from "optimizing" away the cross call for threads is - * questionable (in theory the big win for threads is the massive sharing of - * address space state across processors). + * mm->cpu_vm_mask is a bit mask of which cpus an address + * space has (potentially) executed on, this is the heuristic + * we use to limit cross calls. */ /* This currently is only used by the hugetlb arch pre-fault @@ -1080,18 +1051,13 @@ void smp_fetch_global_pmu(void) void smp_flush_tlb_mm(struct mm_struct *mm) { u32 ctx = CTX_HWBITS(mm->context); - int cpu = get_cpu(); - if (atomic_read(&mm->mm_users) = 1) { - cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); - goto local_flush_and_out; - } + get_cpu(); smp_cross_call_masked(&xcall_flush_tlb_mm, ctx, 0, 0, mm_cpumask(mm)); -local_flush_and_out: __flush_tlb_mm(ctx, SECONDARY_CONTEXT); put_cpu(); @@ -1114,17 +1080,15 @@ void smp_flush_tlb_pending(struct mm_struct *mm, unsigned long nr, unsigned long { u32 ctx = CTX_HWBITS(mm->context); struct tlb_pending_info info; - int cpu = get_cpu(); + + get_cpu(); info.ctx = ctx; info.nr = nr; info.vaddrs = vaddrs; - if (mm = current->mm && atomic_read(&mm->mm_users) = 1) - cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); - else - smp_call_function_many(mm_cpumask(mm), tlb_pending_func, - &info, 1); + smp_call_function_many(mm_cpumask(mm), tlb_pending_func, + &info, 1); __flush_tlb_pending(ctx, nr, vaddrs); @@ -1134,14 +1098,13 @@ void smp_flush_tlb_pending(struct mm_struct *mm, unsigned long nr, unsigned long void smp_flush_tlb_page(struct mm_struct *mm, unsigned long vaddr) { unsigned long context = CTX_HWBITS(mm->context); - int cpu = get_cpu(); - if (mm = current->mm && atomic_read(&mm->mm_users) = 1) - cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); - else - smp_cross_call_masked(&xcall_flush_tlb_page, - context, vaddr, 0, - mm_cpumask(mm)); + get_cpu(); + + smp_cross_call_masked(&xcall_flush_tlb_page, + context, vaddr, 0, + mm_cpumask(mm)); + __flush_tlb_page(context, vaddr); put_cpu(); -- 2.25.1
next prev parent reply other threads:[~2020-10-27 0:04 UTC|newest] Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-27 0:03 [PATCH AUTOSEL 4.19 01/60] powerpc/powernv/smp: Fix spurious DBG() warning Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 02/60] powerpc: select ARCH_WANT_IRQS_OFF_ACTIVATE_MM Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` Sasha Levin [this message] 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 03/60] sparc64: remove mm_cpumask clearing to fix kthread_use_mm race Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 04/60] f2fs: add trace exit in exception path Sasha Levin 2020-10-27 0:03 ` [f2fs-dev] " Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 05/60] f2fs: fix uninit-value in f2fs_lookup Sasha Levin 2020-10-27 0:03 ` [f2fs-dev] " Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 06/60] f2fs: fix to check segment boundary during SIT page readahead Sasha Levin 2020-10-27 0:03 ` [f2fs-dev] " Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 07/60] um: change sigio_spinlock to a mutex Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 08/60] MIPS: ftrace: Remove redundant #ifdef CONFIG_DYNAMIC_FTRACE Sasha Levin 2020-10-27 7:59 ` Sergei Shtylyov 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 09/60] ARM: 8997/2: hw_breakpoint: Handle inexact watchpoint addresses Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 10/60] power: supply: bq27xxx: report "not charging" on all types Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 11/60] xfs: fix realtime bitmap/summary file truncation when growing rt volume Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 12/60] video: fbdev: pvr2fb: initialize variables Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 13/60] ath10k: start recovery process when payload length exceeds max htc length for sdio Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 14/60] ath10k: fix VHT NSS calculation when STBC is enabled Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 15/60] drm/brige/megachips: Add checking if ge_b850v3_lvds_init() is working correctly Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 16/60] media: videodev2.h: RGB BT2020 and HSV are always full range Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 17/60] media: platform: Improve queue set up flow for bug fixing Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 18/60] usb: typec: tcpm: During PR_SWAP, source caps should be sent only after tSwapSourceStart Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 19/60] media: tw5864: check status of tw5864_frameinterval_get Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 20/60] media: imx274: fix frame interval handling Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 21/60] mmc: via-sdmmc: Fix data race bug Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 22/60] drm/bridge/synopsys: dsi: add support for non-continuous HS clock Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 23/60] arm64: topology: Stop using MPIDR for topology information Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 24/60] printk: reduce LOG_BUF_SHIFT range for H8300 Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 25/60] ia64: kprobes: Use generic kretprobe trampoline handler Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 26/60] kgdb: Make "kgdbcon" work properly with "kgdb_earlycon" Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 27/60] media: uvcvideo: Fix dereference of out-of-bound list iterator Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 28/60] riscv: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-11-06 5:26 ` Palmer Dabbelt 2020-11-06 5:26 ` Palmer Dabbelt 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 29/60] cpufreq: sti-cpufreq: add stih418 support Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 30/60] USB: adutux: fix debugging Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 31/60] uio: free uio id after uio file node is freed Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 32/60] usb: xhci: omit duplicate actions when suspending a runtime suspended host Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 33/60] arm64/mm: return cpu_all_mask when node is NUMA_NO_NODE Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 34/60] xfs: don't free rt blocks when we're doing a REMAP bunmapi call Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 35/60] ACPI: Add out of bounds and numa_off protections to pxm_to_node() Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 36/60] genirq: Add stub for set_handle_irq() when !GENERIC_IRQ_MULTI_HANDLER Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 37/60] dm: change max_io_len() to use blk_max_size_offset() Sasha Levin 2020-10-27 0:03 ` [dm-devel] " Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 38/60] drivers/net/wan/hdlc_fr: Correctly handle special skb->protocol values Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 39/60] bus/fsl_mc: Do not rely on caller to provide non NULL mc_io Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 40/60] power: supply: test_power: add missing newlines when printing parameters by sysfs Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 41/60] drm/amd/display: HDMI remote sink need mode validation for Linux Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 42/60] btrfs: fix replace of seed device Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 43/60] md/bitmap: md_bitmap_get_counter returns wrong blocks Sasha Levin 2020-10-27 0:03 ` [PATCH AUTOSEL 4.19 44/60] bnxt_en: Log unknown link speed appropriately Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 45/60] rpmsg: glink: Use complete_all for open states Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 46/60] clk: ti: clockdomain: fix static checker warning Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 47/60] net: 9p: initialize sun_server.sun_path to have addr's value only when addr is valid Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 48/60] drivers: watchdog: rdc321x_wdt: Fix race condition bugs Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 49/60] ext4: Detect already used quota file early Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 50/60] gfs2: add validation checks for size of superblock Sasha Levin 2020-10-27 0:04 ` [Cluster-devel] " Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 51/60] cifs: handle -EINTR in cifs_setattr Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 52/60] arm64: dts: renesas: ulcb: add full-pwr-cycle-in-suspend into eMMC nodes Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 53/60] ARM: dts: omap4: Fix sgx clock rate for 4430 Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 54/60] memory: emif: Remove bogus debugfs error handling Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 55/60] ARM: dts: s5pv210: remove DMA controller bus node name to fix dtschema warnings Sasha Levin 2020-10-27 0:04 ` Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 56/60] ARM: dts: s5pv210: move PMU node out of clock controller Sasha Levin 2020-10-27 0:04 ` Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 57/60] ARM: dts: s5pv210: remove dedicated 'audio-subsystem' node Sasha Levin 2020-10-27 0:04 ` Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 58/60] nbd: make the config put is called before the notifying the waiter Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 59/60] sgl_alloc_order: fix memory leak Sasha Levin 2020-10-27 0:04 ` [PATCH AUTOSEL 4.19 60/60] nvme-rdma: fix crash when connect rejected Sasha Levin 2020-10-27 0:04 ` Sasha Levin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20201027000415.1026364-3-sashal@kernel.org \ --to=sashal@kernel.org \ --cc=davem@davemloft.net \ --cc=linux-kernel@vger.kernel.org \ --cc=mpe@ellerman.id.au \ --cc=npiggin@gmail.com \ --cc=sparclinux@vger.kernel.org \ --cc=stable@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.