mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-11-15 19:56:03 +00:00
The s390 implementation of ptep_modify_prot_start() currently does preempt_disable(), and the preempt_enable() is done later in ptep_modify_prot_commit(). This logic is not really required, because the PTE lock must be held over the complete prot_start/commit transaction, as described in the comment of the generic implementation of ptep_modify_prot_start(). That comment also mentions that this interface should be batchable, and modify_prot_start_ptes() might start a transaction over a batch of PTEs, implemented as a simple loop over ptep_modify_prot_start(). In this case, the preempt_disable() in ptep_modify_prot_start() would be called multiple times, before the corresponding preempt_enable() calls happen, and this can lead to a preempt_count overflow. To fix this, simply remove the preempt_disable/enable() calls in ptep_modify_prot_start/commit(), and rely on the PTE lock being held. Commit |
History
|
|
|---|---|---|
| .. | ||
| cmm.c | ||
| dump_pagetables.c | ||
| extable.c | ||
| extmem.c | ||
| fault.c | ||
| gmap.c | ||
| gmap_helpers.c | ||
| hugetlbpage.c | ||
| init.c | ||
| maccess.c | ||
| Makefile | ||
| mmap.c | ||
| page-states.c | ||
| pageattr.c | ||
| pfault.c | ||
| pgalloc.c | ||
| pgtable.c | ||
| physaddr.c | ||
| vmem.c | ||