Merge 5.9-rc1 into android-mainline
Linux 5.9-rc1 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I1cfd3565631a1fa0d0411d93d4131ed92ec4ff23
This commit is contained in:
4
Makefile
4
Makefile
@@ -1,8 +1,8 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 8
|
PATCHLEVEL = 9
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION =
|
EXTRAVERSION = -rc1
|
||||||
NAME = Kleptomaniac Octopus
|
NAME = Kleptomaniac Octopus
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
|
|
||||||
|
#define __HAVE_ARCH_PMD_ALLOC_ONE
|
||||||
#define __HAVE_ARCH_PMD_FREE
|
#define __HAVE_ARCH_PMD_FREE
|
||||||
#define __HAVE_ARCH_PGD_FREE
|
#define __HAVE_ARCH_PGD_FREE
|
||||||
#include <asm-generic/pgalloc.h>
|
#include <asm-generic/pgalloc.h>
|
||||||
@@ -67,6 +68,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
|
|||||||
(__u32)(__pa((unsigned long)pmd) >> PxD_VALUE_SHIFT)));
|
(__u32)(__pa((unsigned long)pmd) >> PxD_VALUE_SHIFT)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
|
||||||
|
{
|
||||||
|
return (pmd_t *)__get_free_pages(GFP_PGTABLE_KERNEL, PMD_ORDER);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
|
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
|
||||||
{
|
{
|
||||||
if (pmd_flag(*pmd) & PxD_FLAG_ATTACHED) {
|
if (pmd_flag(*pmd) & PxD_FLAG_ATTACHED) {
|
||||||
|
527
fs/io_uring.c
527
fs/io_uring.c
File diff suppressed because it is too large
Load Diff
@@ -3346,7 +3346,7 @@ static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags)
|
|||||||
if (flags & RWF_NOWAIT) {
|
if (flags & RWF_NOWAIT) {
|
||||||
if (!(ki->ki_filp->f_mode & FMODE_NOWAIT))
|
if (!(ki->ki_filp->f_mode & FMODE_NOWAIT))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
kiocb_flags |= IOCB_NOWAIT;
|
kiocb_flags |= IOCB_NOWAIT | IOCB_NOIO;
|
||||||
}
|
}
|
||||||
if (flags & RWF_HIPRI)
|
if (flags & RWF_HIPRI)
|
||||||
kiocb_flags |= IOCB_HIPRI;
|
kiocb_flags |= IOCB_HIPRI;
|
||||||
|
@@ -2542,7 +2542,21 @@ bool get_signal(struct ksignal *ksig)
|
|||||||
|
|
||||||
relock:
|
relock:
|
||||||
spin_lock_irq(&sighand->siglock);
|
spin_lock_irq(&sighand->siglock);
|
||||||
current->jobctl &= ~JOBCTL_TASK_WORK;
|
/*
|
||||||
|
* Make sure we can safely read ->jobctl() in task_work add. As Oleg
|
||||||
|
* states:
|
||||||
|
*
|
||||||
|
* It pairs with mb (implied by cmpxchg) before READ_ONCE. So we
|
||||||
|
* roughly have
|
||||||
|
*
|
||||||
|
* task_work_add: get_signal:
|
||||||
|
* STORE(task->task_works, new_work); STORE(task->jobctl);
|
||||||
|
* mb(); mb();
|
||||||
|
* LOAD(task->jobctl); LOAD(task->task_works);
|
||||||
|
*
|
||||||
|
* and we can rely on STORE-MB-LOAD [ in task_work_add].
|
||||||
|
*/
|
||||||
|
smp_store_mb(current->jobctl, current->jobctl & ~JOBCTL_TASK_WORK);
|
||||||
if (unlikely(current->task_works)) {
|
if (unlikely(current->task_works)) {
|
||||||
spin_unlock_irq(&sighand->siglock);
|
spin_unlock_irq(&sighand->siglock);
|
||||||
task_work_run();
|
task_work_run();
|
||||||
|
@@ -42,7 +42,13 @@ task_work_add(struct task_struct *task, struct callback_head *work, int notify)
|
|||||||
set_notify_resume(task);
|
set_notify_resume(task);
|
||||||
break;
|
break;
|
||||||
case TWA_SIGNAL:
|
case TWA_SIGNAL:
|
||||||
if (lock_task_sighand(task, &flags)) {
|
/*
|
||||||
|
* Only grab the sighand lock if we don't already have some
|
||||||
|
* task_work pending. This pairs with the smp_store_mb()
|
||||||
|
* in get_signal(), see comment there.
|
||||||
|
*/
|
||||||
|
if (!(READ_ONCE(task->jobctl) & JOBCTL_TASK_WORK) &&
|
||||||
|
lock_task_sighand(task, &flags)) {
|
||||||
task->jobctl |= JOBCTL_TASK_WORK;
|
task->jobctl |= JOBCTL_TASK_WORK;
|
||||||
signal_wake_up(task, 0);
|
signal_wake_up(task, 0);
|
||||||
unlock_task_sighand(task, &flags);
|
unlock_task_sighand(task, &flags);
|
||||||
|
Reference in New Issue
Block a user