Merge branch 'akpm' (patches from Andrew)
Pull updates from Andrew Morton: "A few fixes and stragglers. Subsystems affected by this patch series: mm/memory-failure, ocfs2, lib/lzo, misc" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: amdgpu: a NULL ->mm does not mean a thread is a kthread lib/lzo: fix ambiguous encoding bug in lzo-rle ocfs2: fix build failure when TCP/IP is disabled mm/memory-failure: send SIGBUS(BUS_MCEERR_AR) only to current thread mm/memory-failure: prioritize prctl(PR_MCE_KILL) over vm.memory_failure_early_kill
This commit is contained in:
Коммит
b1a6274994
|
@ -159,11 +159,15 @@ Byte sequences
|
|||
distance = 16384 + (H << 14) + D
|
||||
state = S (copy S literals after this block)
|
||||
End of stream is reached if distance == 16384
|
||||
In version 1 only, to prevent ambiguity with the RLE case when
|
||||
((distance & 0x803f) == 0x803f) && (261 <= length <= 264), the
|
||||
compressor must not emit block copies where distance and length
|
||||
meet these conditions.
|
||||
|
||||
In version 1 only, this instruction is also used to encode a run of
|
||||
zeros if distance = 0xbfff, i.e. H = 1 and the D bits are all 1.
|
||||
zeros if distance = 0xbfff, i.e. H = 1 and the D bits are all 1.
|
||||
In this case, it is followed by a fourth byte, X.
|
||||
run length = ((X << 3) | (0 0 0 0 0 L L L)) + 4.
|
||||
run length = ((X << 3) | (0 0 0 0 0 L L L)) + 4
|
||||
|
||||
0 0 1 L L L L L (32..63)
|
||||
Copy of small block within 16kB distance (preferably less than 34B)
|
||||
|
|
|
@ -196,7 +196,7 @@ uint8_t amdgpu_amdkfd_get_xgmi_hops_count(struct kgd_dev *dst, struct kgd_dev *s
|
|||
pagefault_disable(); \
|
||||
if ((mmptr) == current->mm) { \
|
||||
valid = !get_user((dst), (wptr)); \
|
||||
} else if (current->mm == NULL) { \
|
||||
} else if (current->flags & PF_KTHREAD) { \
|
||||
kthread_use_mm(mmptr); \
|
||||
valid = !get_user((dst), (wptr)); \
|
||||
kthread_unuse_mm(mmptr); \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config OCFS2_FS
|
||||
tristate "OCFS2 file system support"
|
||||
depends on NET && SYSFS && CONFIGFS_FS
|
||||
depends on INET && SYSFS && CONFIGFS_FS
|
||||
select JBD2
|
||||
select CRC32
|
||||
select QUOTA
|
||||
|
|
|
@ -268,6 +268,19 @@ m_len_done:
|
|||
*op++ = (M4_MARKER | ((m_off >> 11) & 8)
|
||||
| (m_len - 2));
|
||||
else {
|
||||
if (unlikely(((m_off & 0x403f) == 0x403f)
|
||||
&& (m_len >= 261)
|
||||
&& (m_len <= 264))
|
||||
&& likely(bitstream_version)) {
|
||||
// Under lzo-rle, block copies
|
||||
// for 261 <= length <= 264 and
|
||||
// (distance & 0x80f3) == 0x80f3
|
||||
// can result in ambiguous
|
||||
// output. Adjust length
|
||||
// to 260 to prevent ambiguity.
|
||||
ip -= m_len - 260;
|
||||
m_len = 260;
|
||||
}
|
||||
m_len -= M4_MAX_LEN;
|
||||
*op++ = (M4_MARKER | ((m_off >> 11) & 8));
|
||||
while (unlikely(m_len > 255)) {
|
||||
|
|
|
@ -212,15 +212,13 @@ static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags)
|
|||
short addr_lsb = tk->size_shift;
|
||||
int ret = 0;
|
||||
|
||||
if ((t->mm == current->mm) || !(flags & MF_ACTION_REQUIRED))
|
||||
pr_err("Memory failure: %#lx: Sending SIGBUS to %s:%d due to hardware memory corruption\n",
|
||||
pr_err("Memory failure: %#lx: Sending SIGBUS to %s:%d due to hardware memory corruption\n",
|
||||
pfn, t->comm, t->pid);
|
||||
|
||||
if (flags & MF_ACTION_REQUIRED) {
|
||||
if (t->mm == current->mm)
|
||||
ret = force_sig_mceerr(BUS_MCEERR_AR,
|
||||
WARN_ON_ONCE(t != current);
|
||||
ret = force_sig_mceerr(BUS_MCEERR_AR,
|
||||
(void __user *)tk->addr, addr_lsb);
|
||||
/* send no signal to non-current processes */
|
||||
} else {
|
||||
/*
|
||||
* Don't use force here, it's convenient if the signal
|
||||
|
@ -402,9 +400,15 @@ static struct task_struct *find_early_kill_thread(struct task_struct *tsk)
|
|||
{
|
||||
struct task_struct *t;
|
||||
|
||||
for_each_thread(tsk, t)
|
||||
if ((t->flags & PF_MCE_PROCESS) && (t->flags & PF_MCE_EARLY))
|
||||
return t;
|
||||
for_each_thread(tsk, t) {
|
||||
if (t->flags & PF_MCE_PROCESS) {
|
||||
if (t->flags & PF_MCE_EARLY)
|
||||
return t;
|
||||
} else {
|
||||
if (sysctl_memory_failure_early_kill)
|
||||
return t;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -413,21 +417,26 @@ static struct task_struct *find_early_kill_thread(struct task_struct *tsk)
|
|||
* to be signaled when some page under the process is hwpoisoned.
|
||||
* Return task_struct of the dedicated thread (main thread unless explicitly
|
||||
* specified) if the process is "early kill," and otherwise returns NULL.
|
||||
*
|
||||
* Note that the above is true for Action Optional case, but not for Action
|
||||
* Required case where SIGBUS should sent only to the current thread.
|
||||
*/
|
||||
static struct task_struct *task_early_kill(struct task_struct *tsk,
|
||||
int force_early)
|
||||
{
|
||||
struct task_struct *t;
|
||||
if (!tsk->mm)
|
||||
return NULL;
|
||||
if (force_early)
|
||||
return tsk;
|
||||
t = find_early_kill_thread(tsk);
|
||||
if (t)
|
||||
return t;
|
||||
if (sysctl_memory_failure_early_kill)
|
||||
return tsk;
|
||||
return NULL;
|
||||
if (force_early) {
|
||||
/*
|
||||
* Comparing ->mm here because current task might represent
|
||||
* a subthread, while tsk always points to the main thread.
|
||||
*/
|
||||
if (tsk->mm == current->mm)
|
||||
return current;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
return find_early_kill_thread(tsk);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче