mirror of https://gitee.com/openkylin/linux.git
s390/thp: implement pmdp_set_wrprotect()
On s390, an architecture-specific implementation of the function pmdp_set_wrprotect() is missing and the generic version is currently being used. The generic version does not flush the tlb as it would be needed on s390 when modifying an active pmd, which can lead to subtle tlb errors on s390 when using transparent hugepages. This patch adds an s390-specific implementation of pmdp_set_wrprotect() including the missing tlb flush. Cc: stable@vger.kernel.org Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
9a9284153d
commit
be3286507d
|
@ -1365,6 +1365,18 @@ static inline void pmdp_invalidate(struct vm_area_struct *vma,
|
||||||
__pmd_idte(address, pmdp);
|
__pmd_idte(address, pmdp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define __HAVE_ARCH_PMDP_SET_WRPROTECT
|
||||||
|
static inline void pmdp_set_wrprotect(struct mm_struct *mm,
|
||||||
|
unsigned long address, pmd_t *pmdp)
|
||||||
|
{
|
||||||
|
pmd_t pmd = *pmdp;
|
||||||
|
|
||||||
|
if (pmd_write(pmd)) {
|
||||||
|
__pmd_idte(address, pmdp);
|
||||||
|
set_pmd_at(mm, address, pmdp, pmd_wrprotect(pmd));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline pmd_t mk_pmd_phys(unsigned long physpage, pgprot_t pgprot)
|
static inline pmd_t mk_pmd_phys(unsigned long physpage, pgprot_t pgprot)
|
||||||
{
|
{
|
||||||
pmd_t __pmd;
|
pmd_t __pmd;
|
||||||
|
|
Loading…
Reference in New Issue