ANDROID: mm: use raw seqcount variants in vm_write_*
write_seqcount_begin expects to be called from a non-preemptible context to avoid preemption by a read section that can spin due to an odd value. But the readers of vm_sequence never retries and thus writers need not disable preemption. Use the non-lockdep variant as lockdep checks are now in-built to write_seqcount_begin. Bug: 161210518 Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org> Change-Id: If4f0cddd7f0a79136495060d4acc1702abb46817
This commit is contained in:
committed by
Suren Baghdasaryan
parent
531f65ae67
commit
c9201630e8
@@ -1713,22 +1713,13 @@ int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
|
||||
#ifdef CONFIG_SPECULATIVE_PAGE_FAULT
|
||||
static inline void vm_write_begin(struct vm_area_struct *vma)
|
||||
{
|
||||
write_seqcount_begin(&vma->vm_sequence);
|
||||
}
|
||||
static inline void vm_write_begin_nested(struct vm_area_struct *vma,
|
||||
int subclass)
|
||||
{
|
||||
write_seqcount_begin_nested(&vma->vm_sequence, subclass);
|
||||
}
|
||||
static inline void vm_write_end(struct vm_area_struct *vma)
|
||||
{
|
||||
write_seqcount_end(&vma->vm_sequence);
|
||||
}
|
||||
static inline void vm_raw_write_begin(struct vm_area_struct *vma)
|
||||
{
|
||||
/*
|
||||
* The reads never spins and preemption
|
||||
* disablement is not required.
|
||||
*/
|
||||
raw_write_seqcount_begin(&vma->vm_sequence);
|
||||
}
|
||||
static inline void vm_raw_write_end(struct vm_area_struct *vma)
|
||||
static inline void vm_write_end(struct vm_area_struct *vma)
|
||||
{
|
||||
raw_write_seqcount_end(&vma->vm_sequence);
|
||||
}
|
||||
@@ -1736,19 +1727,9 @@ static inline void vm_raw_write_end(struct vm_area_struct *vma)
|
||||
static inline void vm_write_begin(struct vm_area_struct *vma)
|
||||
{
|
||||
}
|
||||
static inline void vm_write_begin_nested(struct vm_area_struct *vma,
|
||||
int subclass)
|
||||
{
|
||||
}
|
||||
static inline void vm_write_end(struct vm_area_struct *vma)
|
||||
{
|
||||
}
|
||||
static inline void vm_raw_write_begin(struct vm_area_struct *vma)
|
||||
{
|
||||
}
|
||||
static inline void vm_raw_write_end(struct vm_area_struct *vma)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_SPECULATIVE_PAGE_FAULT */
|
||||
|
||||
extern void truncate_pagecache(struct inode *inode, loff_t new);
|
||||
|
||||
Reference in New Issue
Block a user