tlb: Fix access and (soft-)dirty bit management
Subsystems (15)
Will Deacon
maintainercover tlb: Fix access and (soft-)dirty bit management
Hi all,
This series attempts to fix some issues relating to our access and (soft-)dirty bit management relating to TLB invalidation. It's a bit all over the place because I kept running into new issues as I was trying to figure it out.
The first patch fixes a crash we've seen in practice. The other patches are all addressing things that I found by code inspection and I would _really_ appreciate others having a look. In particular, what can go wrong in practice if a CPU has a stale, writable entry in the TLB for a pte which is !pte_write()? It feels intuitively bad, but I couldn't find anywhere that would explode (the CoW path looks alright, for example).
Cheers,
Will
--->8
Will Deacon (6):
arm64: pgtable: Fix pte_accessible()
arm64: pgtable: Ensure dirty bit is preserved across pte_wrprotect()
tlb: mmu_gather: Remove unused start/end arguments from
tlb_finish_mmu()
mm: proc: Invalidate TLB after clearing soft-dirty page state
tlb: mmu_gather: Introduce tlb_gather_mmu_fullmm()
mm: proc: Avoid fullmm flush for young/dirty bit toggling
arch/arm64/include/asm/pgtable.h | 31 +++++++++++++++---------------- arch/ia64/include/asm/tlb.h | 2 +- arch/x86/kernel/ldt.c | 2 +- fs/exec.c | 2 +- fs/proc/task_mmu.c | 22 +++++++++++++--------- include/asm-generic/tlb.h | 6 ++++-- include/linux/mm_types.h | 4 ++-- mm/hugetlb.c | 2 +- mm/madvise.c | 6 +++--- mm/memory.c | 4 ++-- mm/mmap.c | 6 +++--- mm/mmu_gather.c | 21 +++++++++++++++------ mm/oom_kill.c | 4 ++-- 13 files changed, 63 insertions(+), 49 deletions(-)
Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Will Deacon
maintainerPATCH 1/6 arm64: pgtable: Fix pte_accessible()
pte_accessible() is used by ptep_clear_flush() to figure out whether TLB invalidation is necessary when unmapping pages for reclaim. Although our implementation is correct according to the architecture, returning true only for valid, young ptes in the absence of racing page-table modifications, this is in fact flawed due to lazy invalidation of old ptes in ptep_clear_flush_young() where we elide the expensive DSB instruction for completing the TLB invalidation.
Rather than penalise the aging path, adjust pte_accessible() to return true for any valid pte, even if the access flag is cleared.
--- arch/arm64/include/asm/pgtable.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
arch/arm64/include/asm/pgtable.h +1 -3
@@ -115,8 +115,6 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];#define pte_valid (pte) (!!(pte_val(pte) & PTE_VALID))#define pte_valid_not_user (pte) \ ((pte_val(pte) & (PTE_VALID | PTE_USER)) == PTE_VALID) -#define pte_valid_young (pte) \ - ((pte_val(pte) & (PTE_VALID | PTE_AF)) == (PTE_VALID | PTE_AF))#define pte_valid_user (pte) \ ((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER))
@@ -126,7 +124,7 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];* remapped as PROT_NONE but are yet to be flushed from the TLB. */ #define pte_accessible (mm, pte) \ - (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid_young(pte)) + (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte))/* * p??_access_permitted() is true for valid user mappings (subject to the
Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Re: [PATCH 1/6] arm64: pgtable: Fix pte_accessible()
Quoted 8 lines · Will Deacon
pte_accessible()is used byptep_clear_flush()to figure out whether TLB invalidation is necessary when unmapping pages for reclaim. Although our implementation is correct according to the architecture, returning true only for valid, young ptes in the absence of racing page-table modifications, this is in fact flawed due to lazy invalidation of old ptes inptep_clear_flush_young()where we elide the expensive DSB instruction for completing the TLB invalidation.
Quoted 7 lines
Rather than penalise the aging path, adjust
pte_accessible()to return true for any valid pte, even if the access flag is cleared.Cc <[email protected]>Fixes 76c714be0e5e ("arm64: pgtable: implement pte_accessible()")Reported-by Yu Zhao <[email protected]>Signed-off-by Will Deacon <[email protected]>
Re: [PATCH 1/6] arm64: pgtable: Fix pte_accessible()
In reply to Will DeaconQuoted 10 lines · Will Deacon
pte_accessible()is used byptep_clear_flush()to figure out whether TLB invalidation is necessary when unmapping pages for reclaim. Although our implementation is correct according to the architecture, returning true only for valid, young ptes in the absence of racing page-table modifications, this is in fact flawed due to lazy invalidation of old ptes inptep_clear_flush_young()where we elide the expensive DSB instruction for completing the TLB invalidation.Rather than penalise the aging path, adjust
pte_accessible()to return true for any valid pte, even if the access flag is cleared.
The chance of a system hitting reclaim is proportional to how long it's been running, and that of having mapped but yet to be accessed PTEs is reciprocal, so to speak. I don't reboot my devices everyday, and therefore:
Quoted 33 lines
Cc <[email protected]>Fixes 76c714be0e5e ("arm64: pgtable: implement pte_accessible()")Reported-by Yu Zhao <[email protected]>Signed-off-by Will Deacon <[email protected]>--- arch/arm64/include/asm/pgtable.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)arch/arm64/include/asm/pgtable.h +1
-3@@ -115,8 +115,6 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];#define pte_valid (pte) (!!(pte_val(pte) & PTE_VALID))#define pte_valid_not_user (pte) \ ((pte_val(pte) & (PTE_VALID | PTE_USER)) == PTE_VALID) -#define pte_valid_young (pte) \ - ((pte_val(pte) & (PTE_VALID | PTE_AF)) == (PTE_VALID | PTE_AF))#define pte_valid_user (pte) \ ((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER))@@ -126,7 +124,7 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];* remapped as PROT_NONE but are yet to be flushed from the TLB. */ #define pte_accessible (mm, pte) \ - (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid_young(pte)) + (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte))/* * p??_access_permitted() is true for valid user mappings (subject to the Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Re: [PATCH 1/6] arm64: pgtable: Fix pte_accessible()
In reply to Will DeaconQuoted 8 lines · Will Deacon
pte_accessible()is used byptep_clear_flush()to figure out whether TLB invalidation is necessary when unmapping pages for reclaim. Although our implementation is correct according to the architecture, returning true only for valid, young ptes in the absence of racing page-table modifications, this is in fact flawed due to lazy invalidation of old ptes inptep_clear_flush_young()where we elide the expensive DSB instruction for completing the TLB invalidation.
Quoted 7 lines
Rather than penalise the aging path, adjust
pte_accessible()to return true for any valid pte, even if the access flag is cleared.Cc <[email protected]>Fixes 76c714be0e5e ("arm64: pgtable: implement pte_accessible()")Reported-by Yu Zhao <[email protected]>Signed-off-by Will Deacon <[email protected]>
Re: [PATCH 1/6] arm64: pgtable: Fix pte_accessible()
In reply to Will DeaconQuoted 4 lines · Will Deacon
pte_accessible()is used byptep_clear_flush()to figure out whether TLB invalidation is necessary when unmapping pages for reclaim. Although our implementation is correct according to the architecture, returning true only for valid, young ptes in the absence of racing page-table
Just curious, a PTE mapping would go into the TLB only if it is an young one with PTE_AF bit set per the architecture ?
Quoted 3 lines
modifications, this is in fact flawed due to lazy invalidation of old ptes in
ptep_clear_flush_young()where we elide the expensive DSB instruction for completing the TLB invalidation.
IOW, an old PTE might have missed the required TLB invalidation via ptep_clear_flush_young() because it's done in lazy mode. Hence just include old valid PTEs in pte_accessible() so that TLB invalidation could be done in ptep_clear_flush() path instead. May be TLB flush could be done for every PTE, irrespective of its PTE_AF bit in ptep_clear_flush_young().
Quoted 3 lines
Rather than penalise the aging path, adjust
pte_accessible()to return true for any valid pte, even if the access flag is cleared.
But will not this cause more (possibly not required) TLB invalidation in normal unmapping paths ? The cover letter mentions that this patch fixes a real world crash. Should not the crash also be described here in the commit message as this patch is marked for stable and has a "Fixes: " tag.
Quoted 32 lines
Cc <[email protected]>Fixes 76c714be0e5e ("arm64: pgtable: implement pte_accessible()")Reported-by Yu Zhao <[email protected]>Signed-off-by Will Deacon <[email protected]>--- arch/arm64/include/asm/pgtable.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)arch/arm64/include/asm/pgtable.h +1
-3@@ -115,8 +115,6 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];#define pte_valid (pte) (!!(pte_val(pte) & PTE_VALID))#define pte_valid_not_user (pte) \ ((pte_val(pte) & (PTE_VALID | PTE_USER)) == PTE_VALID) -#define pte_valid_young (pte) \ - ((pte_val(pte) & (PTE_VALID | PTE_AF)) == (PTE_VALID | PTE_AF))#define pte_valid_user (pte) \ ((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER))@@ -126,7 +124,7 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];* remapped as PROT_NONE but are yet to be flushed from the TLB. */ #define pte_accessible (mm, pte) \ - (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid_young(pte)) + (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte))/* * p??_access_permitted() is true for valid user mappings (subject to the
Will Deacon
maintainerPATCH 2/6 arm64: pgtable: Ensure dirty bit is preserved across pte_wrprotect()
In reply to Will DeaconWith hardware dirty bit management, calling pte_wrprotect() on a writable, dirty PTE will lose the dirty state and return a read-only, clean entry.
Move the logic from ptep_set_wrprotect() into pte_wrprotect() to ensure that the dirty bit is preserved for writable entries, as this is required for soft-dirty bit management if we enable it in the future.
--- arch/arm64/include/asm/pgtable.h | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-)
arch/arm64/include/asm/pgtable.h +14 -13
@@ -162,13 +162,6 @@ static inline pmd_t set_pmd_bit(pmd_t pmd, pgprot_t prot)return pmd; } -static inline pte_t pte_wrprotect (pte_t pte) -{ - pte =clear_pte_bit (pte,__pgprot (PTE_WRITE )); - pte =set_pte_bit (pte,__pgprot (PTE_RDONLY )); -return pte; -} -static inline pte_t pte_mkwrite (pte_t pte) { pte =set_pte_bit (pte,__pgprot (PTE_WRITE ));
@@ -194,6 +187,20 @@ static inline pte_t pte_mkdirty(pte_t pte)return pte; } +static inline pte_t pte_wrprotect (pte_t pte) +{ +/* +* If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY +* clear), set the PTE_DIRTY bit. +*/ +if (pte_hw_dirty (pte)) + pte =pte_mkdirty (pte); + + pte =clear_pte_bit (pte,__pgprot (PTE_WRITE )); + pte =set_pte_bit (pte,__pgprot (PTE_RDONLY )); +return pte; +} +static inline pte_t pte_mkold (pte_t pte) {return clear_pte_bit (pte,__pgprot (PTE_AF ));
@@ -843,12 +850,6 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addres pte =READ_ONCE (*ptep); do { old_pte = pte; - /* - * If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY - * clear), set the PTE_DIRTY bit. - */ - if (pte_hw_dirty(pte)) - pte = pte_mkdirty(pte); pte = pte_wrprotect(pte); pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep), pte_val(old_pte), pte_val(pte));
Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Re: [PATCH 2/6] arm64: pgtable: Ensure dirty bit is preserved across pte_wrprotect()
Quoted 8 lines · Will Deacon
With hardware dirty bit management, calling
pte_wrprotect()on a writable, dirty PTE will lose the dirty state and return a read-only, clean entry.Move the logic from
ptep_set_wrprotect()intopte_wrprotect()to ensure that the dirty bit is preserved for writable entries, as this is required for soft-dirty bit management if we enable it in the future.Cc <[email protected]>
It this stable material if it would be a problem once ARM64 supports softdirty in future?
Quoted 60 lines
Signed-off-by Will Deacon <[email protected]>--- arch/arm64/include/asm/pgtable.h | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-)arch/arm64/include/asm/pgtable.h +14
-13@@ -162,13 +162,6 @@ static inline pmd_t set_pmd_bit(pmd_t pmd, pgprot_t prot)return pmd; } -static inline pte_t pte_wrprotect (pte_t pte) -{ - pte =clear_pte_bit (pte,__pgprot (PTE_WRITE )); - pte =set_pte_bit (pte,__pgprot (PTE_RDONLY )); -return pte; -} -static inline pte_t pte_mkwrite (pte_t pte) { pte =set_pte_bit (pte,__pgprot (PTE_WRITE ));@@ -194,6 +187,20 @@ static inline pte_t pte_mkdirty(pte_t pte)return pte; } +static inline pte_t pte_wrprotect (pte_t pte) +{ +/* +* If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY +* clear), set the PTE_DIRTY bit. +*/ +if (pte_hw_dirty (pte)) + pte =pte_mkdirty (pte); + + pte =clear_pte_bit (pte,__pgprot (PTE_WRITE )); + pte =set_pte_bit (pte,__pgprot (PTE_RDONLY )); +return pte; +} +static inline pte_t pte_mkold (pte_t pte) {return clear_pte_bit (pte,__pgprot (PTE_AF ));@@ -843,12 +850,6 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addres pte =READ_ONCE (*ptep); do { old_pte = pte; - /* - * If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY - * clear), set the PTE_DIRTY bit. - */ - if (pte_hw_dirty(pte)) - pte = pte_mkdirty(pte); pte = pte_wrprotect(pte); pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep), pte_val(old_pte), pte_val(pte));Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Catalin Marinas
maintainerRe: [PATCH 2/6] arm64: pgtable: Ensure dirty bit is preserved across pte_wrprotect()
Quoted 4 lines · Minchan Kim
Quoted 3 lines · Will Deacon
With hardware dirty bit management, calling
pte_wrprotect()on a writable, dirty PTE will lose the dirty state and return a read-only, clean entry.
Quoted 8 lines
Quoted 5 lines
Move the logic from
ptep_set_wrprotect()intopte_wrprotect()to ensure that the dirty bit is preserved for writable entries, as this is required for soft-dirty bit management if we enable it in the future.Cc <[email protected]>It this stable material if it would be a problem once ARM64 supports softdirty in future?
I don't think so. Arm64 did not have a hardware dirty mechanism from the start, it was added later but in a way as to coexist with other CPUs or peripherals that don't support it. So instead of setting a PTE_DIRTY bit as one would expect, the CPU clears the PTE_RDONLY on write access to a writable PTE (the PTE_DBM/PTE_WRITE bit set). So our pte_wrprotect() needs to set PTE_RDONLY and clear PTE_DBM (PTE_WRITE) but !PTE_RDONLY is our only information of a pte having been dirtied, so we have to transfer it to a software PTE_DIRTY bit. This is different from a soft-dirty pte bit if we add it in the future.
Signature · 1 line
Catalin
Re: [PATCH 2/6] arm64: pgtable: Ensure dirty bit is preserved across pte_wrprotect()
In reply to Will DeaconQuoted 2 lines · Will Deacon
With hardware dirty bit management, calling
pte_wrprotect()on a writable, dirty PTE will lose the dirty state and return a read-only, clean entry.
My assumption at the time was that the caller of pte_wrprotect() already moved the 'dirty' information to the underlying page. Most pte_wrprotect() calls also do a pte_mkclean(). However, it doesn't seem to always be the case (soft-dirty but we don't support it yet).
I was worried that we may inadvertently set the dirty bit when doing a pte_wrprotect() on a freshly created pte (not read from memory, for example __split_huge_pmd_locked()) but I think all our __P* and __S* attributes start with a PTE_RDONLY, therefore the pte_hw_dirty() returns false. A test for mm/debug_vm_pgtable.c, something like:
for (i = 0, i < ARRAY_SIZE(protection_map); i++) {
pte = pfn_pte(pfn, protection_map(i));
WARN_ON(pte_dirty(pte_wrprotect(pte));
}(I'll leave this to Anshuman ;))
Quoted 6 lines
Move the logic from
ptep_set_wrprotect()intopte_wrprotect()to ensure that the dirty bit is preserved for writable entries, as this is required for soft-dirty bit management if we enable it in the future.Cc <[email protected]>Signed-off-by Will Deacon <[email protected]>
I think this could go back as far as the hardware AF/DBM support (v4.3):
If you limit this fix to 4.14, you probably don't need additional commits. Otherwise, at least this one:
3bbf7157ac66 ("arm64: Convert pte handling from inline asm to using (cmp)xchg")
and a slightly more intrusive:
73e86cb03cf2 ("arm64: Move PTE_RDONLY bit handling out of set_pte_at()")
We also had some attempts at fixing ptep_set_wrprotect():
64c26841b349 ("arm64: Ignore hardware dirty bit updates in ptep_set_wrprotect()")
Fixed subsequently by:
8781bcbc5e69 ("arm64: mm: Fix pte_mkclean, pte_mkdirty semantics")
I have a hope that at some point we'll understand how this all works ;).
For this patch:
Will Deacon
maintainerPATCH 3/6 tlb: mmu_gather: Remove unused start/end arguments from tlb_finish_mmu()
In reply to Will Deacontlb_finish_mmu() takes two confusing and unused 'start'/'end' address arguments. Remove them.
--- arch/ia64/include/asm/tlb.h | 2 +- arch/x86/kernel/ldt.c | 2 +- fs/exec.c | 2 +- fs/proc/task_mmu.c | 2 +- include/linux/mm_types.h | 3 +-- mm/hugetlb.c | 2 +- mm/madvise.c | 6 +++--- mm/memory.c | 4 ++-- mm/mmap.c | 4 ++-- mm/mmu_gather.c | 5 +---- mm/oom_kill.c | 4 ++-- 11 files changed, 16 insertions(+), 20 deletions(-)
arch/ia64/include/asm/tlb.h +1 -1
@@ -36,7 +36,7 @@* tlb_end_vma(tlb, vma); * } * } -* tlb_finish_mmu(tlb, start, end); // finish unmap for address space MM +* tlb_finish_mmu(tlb); // finish unmap for address space MM */ #include <linux/mm.h> #include <linux/pagemap.h>
arch/x86/kernel/ldt.c +1 -1
@@ -400,7 +400,7 @@ static void free_ldt_pgtables(struct mm_struct *mm)tlb_gather_mmu (&tlb, mm, start, end);free_pgd_range (&tlb, start, end, start, end); -tlb_finish_mmu (&tlb, start, end); +tlb_finish_mmu (&tlb);#endif }
fs/exec.c +1 -1
@@ -724,7 +724,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift)free_pgd_range (&tlb, old_start, old_end, new_end, vma->vm_next ? vma->vm_next->vm_start :USER_PGTABLES_CEILING ); } -tlb_finish_mmu (&tlb, old_start, old_end); +tlb_finish_mmu (&tlb);/* * Shrink the vma to just the new range. Always succeeds.
fs/proc/task_mmu.c +1 -1
@@ -1260,7 +1260,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, &cp);if (type ==CLEAR_REFS_SOFT_DIRTY )mmu_notifier_invalidate_range_end (&range); -tlb_finish_mmu (&tlb,0 ,-1 ); +tlb_finish_mmu (&tlb);mmap_read_unlock (mm); out_mm:mmput (mm);
include/linux/mm_types.h +1 -2
@@ -585,8 +585,7 @@ static inline cpumask_t *mm_cpumask(struct mm_struct *mm)struct mmu_gather ;extern void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm,unsigned long start,unsigned long end); -extern void tlb_finish_mmu (struct mmu_gather *tlb, -unsigned long start,unsigned long end); +extern void tlb_finish_mmu (struct mmu_gather *tlb);static inline void init_tlb_flush_pending (struct mm_struct *mm) {
mm/hugetlb.c +1 -1
@@ -3985,7 +3985,7 @@ void unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,tlb_gather_mmu (&tlb, mm, tlb_start, tlb_end);__unmap_hugepage_range (&tlb, vma, start, end, ref_page); -tlb_finish_mmu (&tlb, tlb_start, tlb_end); +tlb_finish_mmu (&tlb); }/*
mm/madvise.c +3 -3
@@ -508,7 +508,7 @@ static long madvise_cold(struct vm_area_struct *vma,lru_add_drain ();tlb_gather_mmu (&tlb, mm, start_addr, end_addr);madvise_cold_page_range (&tlb, vma, start_addr, end_addr); -tlb_finish_mmu (&tlb, start_addr, end_addr); +tlb_finish_mmu (&tlb);return 0 ; }
@@ -560,7 +560,7 @@ static long madvise_pageout(struct vm_area_struct *vma,lru_add_drain ();tlb_gather_mmu (&tlb, mm, start_addr, end_addr);madvise_pageout_page_range (&tlb, vma, start_addr, end_addr); -tlb_finish_mmu (&tlb, start_addr, end_addr); +tlb_finish_mmu (&tlb);return 0 ; }
@@ -732,7 +732,7 @@ static int madvise_free_single_vma(struct vm_area_struct *vma, &madvise_free_walk_ops, &tlb);tlb_end_vma (&tlb, vma);mmu_notifier_invalidate_range_end (&range); -tlb_finish_mmu (&tlb, range.start, range.end); +tlb_finish_mmu (&tlb);return 0 ; }
mm/memory.c +2 -2
@@ -1529,7 +1529,7 @@ void zap_page_range(struct vm_area_struct *vma, unsigned long start,for ( ; vma && vma->vm_start < range.end; vma = vma->vm_next)unmap_single_vma (&tlb, vma, start, range.end,NULL );mmu_notifier_invalidate_range_end (&range); -tlb_finish_mmu (&tlb, start, range.end); +tlb_finish_mmu (&tlb); }/**
@@ -1555,7 +1555,7 @@ static void zap_page_range_single(struct vm_area_struct *vma, unsigned long addrmmu_notifier_invalidate_range_start (&range);unmap_single_vma (&tlb, vma, address, range.end, details);mmu_notifier_invalidate_range_end (&range); -tlb_finish_mmu (&tlb, address, range.end); +tlb_finish_mmu (&tlb); }/**
mm/mmap.c +2 -2
@@ -2678,7 +2678,7 @@ static void unmap_region(struct mm_struct *mm,unmap_vmas (&tlb, vma, start, end);free_pgtables (&tlb, vma, prev ? prev->vm_end :FIRST_USER_ADDRESS , next ? next->vm_start :USER_PGTABLES_CEILING ); -tlb_finish_mmu (&tlb, start, end); +tlb_finish_mmu (&tlb); }/*
@@ -3221,7 +3221,7 @@ void exit_mmap(struct mm_struct *mm)/* Use -1 here to ensure all VMAs in the mm are unmapped */ unmap_vmas (&tlb, vma,0 ,-1 );free_pgtables (&tlb, vma,FIRST_USER_ADDRESS ,USER_PGTABLES_CEILING ); -tlb_finish_mmu (&tlb,0 ,-1 ); +tlb_finish_mmu (&tlb);/* * Walk the list again, actually closing and freeing it,
mm/mmu_gather.c +1 -4
@@ -290,14 +290,11 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,/** * tlb_finish_mmu - finish an mmu_gather structure * @tlb: the mmu_gather structure to finish -* @start: start of the region that will be removed from the page-table -* @end: end of the region that will be removed from the page-table * * Called at the end of the shootdown operation to free up any resources that * were required. */ -void tlb_finish_mmu (struct mmu_gather *tlb, -unsigned long start,unsigned long end) +void tlb_finish_mmu (struct mmu_gather *tlb) {/* * If there are parallel threads are doing PTE changes on same range
mm/oom_kill.c +2 -2
@@ -546,13 +546,13 @@ bool __oom_reap_task_mm(struct mm_struct *mm) vma->vm_end);tlb_gather_mmu (&tlb, mm, range.start, range.end);if (mmu_notifier_invalidate_range_start_nonblock (&range)) { -tlb_finish_mmu (&tlb, range.start, range.end); +tlb_finish_mmu (&tlb); ret = false;continue ; }unmap_page_range (&tlb, vma, range.start, range.end,NULL );mmu_notifier_invalidate_range_end (&range); -tlb_finish_mmu (&tlb, range.start, range.end); +tlb_finish_mmu (&tlb); } }
Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Re: [PATCH 3/6] tlb: mmu_gather: Remove unused start/end arguments from tlb_finish_mmu()
Quoted 3 lines · Will Deacon
tlb_finish_mmu()takes two confusing and unused 'start'/'end' address arguments. Remove them.
Ack, but please add the history to it.
Those arguments were used, up until 7a30df49f63a ("mm: mmu_gather:
remove __tlb_reset_range() for force flush").
And the thing is, using a range flush in theory might be better, but for simplicity it's now doing a "fullmm" one, which is why those arguments no longer matter.
(And I think we track the range better now too, which may be another reason they aren't needed)
Linus
Linus
Will Deacon
maintainerRe: [PATCH 3/6] tlb: mmu_gather: Remove unused start/end arguments from tlb_finish_mmu()
Quoted 10 lines · Linus Torvalds
Quoted 3 lines · Will Deacon
tlb_finish_mmu()takes two confusing and unused 'start'/'end' address arguments. Remove them.Ack, but please add the history to it.
Those arguments were used, up until
7a30df49f63a("mm:mmu_gather:
remove__tlb_reset_range()for force flush").
Quoted 6 lines
And the thing is, using a range flush in theory might be better, but for simplicity it's now doing a "fullmm" one, which is why those arguments no longer matter.
(And I think we track the range better now too, which may be another reason they aren't needed)
Yes, thanks for digging that up. I'll add it to the commit message in v2.
Will
Will Deacon
maintainerPATCH 4/6 mm: proc: Invalidate TLB after clearing soft-dirty page state
In reply to Will DeaconSince commit 0758cd830494 ("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided in tlb_finish_mmu() if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed by clear_refs_write() in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries where pte_write() is false, yet a writable mapping remains in the TLB.
Fix this by calling tlb_remove_tlb_entry() for each entry being write-protected when cleating soft-dirty.
--- fs/proc/task_mmu.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)
fs/proc/task_mmu.c +11 -7
@@ -1032,11 +1032,12 @@ enum clear_refs_types {struct clear_refs_private {enum clear_refs_types type; +struct mmu_gather *tlb; };#ifdef CONFIG_MEM_SOFT_DIRTY static inline void clear_soft_dirty (struct vm_area_struct *vma, -unsigned long addr,pte_t *pte) +unsigned long addr,pte_t *pte,struct mmu_gather *tlb) {/* * The soft-dirty tracker uses #PF-s to catch writes
@@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);
@@ -1060,14 +1062,14 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, }#else static inline void clear_soft_dirty (struct vm_area_struct *vma, -unsigned long addr,pte_t *pte) +unsigned long addr,pte_t *pte,struct mmu_gather *tlb) { }#endif #if defined(CONFIG_MEM_SOFT_DIRTY ) && defined(CONFIG_TRANSPARENT_HUGEPAGE )static inline void clear_soft_dirty_pmd (struct vm_area_struct *vma, -unsigned long addr,pmd_t *pmdp) +unsigned long addr,pmd_t *pmdp,struct mmu_gather *tlb) {pmd_t old, pmd = *pmdp;
@@ -1081,6 +1083,7 @@ static inline void clear_soft_dirty_pmd(struct vm_area_struct *vma, pmd =pmd_wrprotect (pmd); pmd =pmd_clear_soft_dirty (pmd); +tlb_remove_pmd_tlb_entry (tlb, pmdp, addr);set_pmd_at (vma->vm_mm, addr, pmdp, pmd); }else if (is_migration_entry (pmd_to_swp_entry (pmd))) {
@@ -1090,7 +1093,7 @@ static inline void clear_soft_dirty_pmd(struct vm_area_struct *vma, }#else static inline void clear_soft_dirty_pmd (struct vm_area_struct *vma, -unsigned long addr,pmd_t *pmdp) +unsigned long addr,pmd_t *pmdp,struct mmu_gather *tlb) { }#endif
@@ -1107,7 +1110,7 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr, ptl =pmd_trans_huge_lock (pmd, vma);if (ptl) {if (cp->type ==CLEAR_REFS_SOFT_DIRTY ) { -clear_soft_dirty_pmd (vma, addr, pmd); +clear_soft_dirty_pmd (vma, addr, pmd, cp->tlb); goto out; }
@@ -1133,7 +1136,7 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr, ptent = *pte;if (cp->type ==CLEAR_REFS_SOFT_DIRTY ) { -clear_soft_dirty (vma, addr, pte); +clear_soft_dirty (vma, addr, pte, cp->tlb);continue ; }
@@ -1212,7 +1215,8 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,if (mm) {struct mmu_notifier_range range;struct clear_refs_private cp = { - .type = type, + .type = type, + .tlb = &tlb, };if (type ==CLEAR_REFS_MM_HIWATER_RSS ) {
Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Peter Zijlstra
maintainerRe: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
Quoted 14 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.Fix this by calling
tlb_remove_tlb_entry()for each entry being write-protected when cleating soft-dirty.
fs/proc/task_mmu.c static inline void clear_soft_dirty(struct vm_area_struct *vma, · line 1060
Quoted 7 lines
fs/proc/task_mmu.c +1
-0@@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);
Oh!
Yesterday when you had me look at this code; I figured the sane thing to do was to make it look more like mprotect().
Why did you chose to make it work with mmu_gather instead? I'll grant you that it's probably the smaller patch, but I still think it's weird to use mmu_gather here.
Also, is tlb_remote_tlb_entry() actually correct? If you look at __tlb_remove_tlb_entry() you'll find that Power-Hash-32 will clear the entry, which might not be what we want here, we want to update the entrty.
Peter Zijlstra
maintainerRe: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
Quoted 1 line · Peter Zijlstra
If you look at
__tlb_remove_tlb_entry()
... you'll also find we can probably do this ... :-)
arch/sparc/include/asm/tlb_64.h +0 -1
@@ -24,7 +24,6 @@ void flush_tlb_pending(void);#define tlb_start_vma (tlb, vma) do { } while (0)#define tlb_end_vma (tlb, vma) do { } while (0) -#define __tlb_remove_tlb_entry (tlb, ptep, address) do { } while (0)#define tlb_flush (tlb) flush_tlb_pending()/*
arch/x86/include/asm/tlb.h +0 -1
@@ -4,7 +4,6 @@#define tlb_start_vma (tlb, vma) do { } while (0)#define tlb_end_vma (tlb, vma) do { } while (0) -#define __tlb_remove_tlb_entry (tlb, ptep, address) do { } while (0)#define tlb_flush tlb_flushstatic inline void tlb_flush (struct mmu_gather *tlb);
Will Deacon
maintainerRe: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
In reply to Peter ZijlstraQuoted 25 lines · Peter Zijlstra
Quoted 14 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.Fix this by calling
tlb_remove_tlb_entry()for each entry being write-protected when cleating soft-dirty.fs/proc/task_mmu.c static inline void clear_soft_dirty(struct vm_area_struct *vma, · line 1060
Quoted 7 lines
fs/proc/task_mmu.c +1
-0@@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);Oh!
Quoted 2 lines
Yesterday when you had me look at this code; I figured the sane thing to do was to make it look more like
mprotect().
Ah, so you mean ditch the mmu_gather altogether?
Quoted 8 lines
Why did you chose to make it work with
mmu_gatherinstead? I'll grant you that it's probably the smaller patch, but I still think it's weird to usemmu_gatherhere.Also, is
tlb_remote_tlb_entry()actually correct? If you look at__tlb_remove_tlb_entry()you'll find that Power-Hash-32 will clear the entry, which might not be what we want here, we want to update the entrty.
Hmm, I didn't spot that, although ptep_modify_prot_start() does actually clear the pte so we could just move this up a few lines.
Will
Quoted 3 lines
Peter Zijlstra
maintainerRe: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
Quoted 26 lines · Will Deacon
Quoted 25 lines · Peter Zijlstra
Quoted 14 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.Fix this by calling
tlb_remove_tlb_entry()for each entry being write-protected when cleating soft-dirty.fs/proc/task_mmu.c static inline void clear_soft_dirty(struct vm_area_struct *vma, · line 1060
Quoted 7 lines
fs/proc/task_mmu.c +1
-0@@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);Oh!
Quoted 4 lines
Quoted 2 lines
Yesterday when you had me look at this code; I figured the sane thing to do was to make it look more like
mprotect().Ah, so you mean ditch the
mmu_gatheraltogether?
Yes. Alternatively, if we decide mmu_gather is 'right', then we should probably look at converting mprotect().
That is, I see no reason why this and mprotect should differ on this point.
Quoted 11 lines
Quoted 8 lines
Why did you chose to make it work with
mmu_gatherinstead? I'll grant you that it's probably the smaller patch, but I still think it's weird to usemmu_gatherhere.Also, is
tlb_remote_tlb_entry()actually correct? If you look at__tlb_remove_tlb_entry()you'll find that Power-Hash-32 will clear the entry, which might not be what we want here, we want to update the entrty.Hmm, I didn't spot that, although
ptep_modify_prot_start()does actually clear the pte so we could just move this up a few lines.
Yes, but hash-entry != pte. If I'm not mistaken (and I could very well be, it's Friday and Power-MMUs being the maze they are), the end result here is an updated PTE but an empty hash-entry.
Will Deacon
maintainerRe: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
Hi Peter,
Quoted 30 lines · Peter Zijlstra
Quoted 29 lines · Will Deacon
Quoted 27 lines · Peter Zijlstra
Quoted 14 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.Fix this by calling
tlb_remove_tlb_entry()for each entry being write-protected when cleating soft-dirty.fs/proc/task_mmu.c static inline void clear_soft_dirty(struct vm_area_struct *vma, · line 1060
Quoted 7 lines
fs/proc/task_mmu.c +1
-0@@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);Oh!
Yesterday when you had me look at this code; I figured the sane thing to do was to make it look more like
mprotect().
Quoted 7 lines
Quoted 1 line
Ah, so you mean ditch the
mmu_gatheraltogether?Yes. Alternatively, if we decide
mmu_gatheris 'right', then we should probably look at convertingmprotect().That is, I see no reason why this and mprotect should differ on this point.
I agree that we should aim for consistency, but it's worth pointing out that madvise() uses the gather API in the same way that I'm proposing here (see MADV_COLD/MADV_PAGEOUT).
Another thing to keep in mind is that, unlike mprotect(), we do actually want to elide the TLB invalidation clear_refs_write() when all we're doing is making the pages old. The gather API lends itself quite nicely to this, as we can only update the range when actually doing the write protection on the soft-dirty path.
Quoted 9 lines
Quoted 9 lines
Quoted 8 lines
Why did you chose to make it work with
mmu_gatherinstead? I'll grant you that it's probably the smaller patch, but I still think it's weird to usemmu_gatherhere.Also, is
tlb_remote_tlb_entry()actually correct? If you look at__tlb_remove_tlb_entry()you'll find that Power-Hash-32 will clear the entry, which might not be what we want here, we want to update the entrty.
Quoted 6 lines
Quoted 2 lines
Hmm, I didn't spot that, although
ptep_modify_prot_start()does actually clear the pte so we could just move this up a few lines.Yes, but hash-entry != pte. If I'm not mistaken (and I could very well be, it's Friday and Power-MMUs being the maze they are), the end result here is an updated PTE but an empty hash-entry.
I had a look at the PPC code and, afaict, this should be fine. The next access will fault, and we'll populate the hash entry from the pte afaict.
Am I missing something?
If we _really_ wanted to, then we could extend the mmu gather API to add something like tlb_update_tlb_entry(), which would call tlb_remove_tlb_entry() under the hood, and set a flag on the gather structure so that tlb_finish_mmu() ends up calling update_mmu_cache() to preload the hash.
However, I think this is purely a performance thing, and I'm wary about pro-actively extending the API to optimise for the PPC hash.
Will
Re: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
In reply to Peter ZijlstraQuoted 25 lines · Peter Zijlstra
Quoted 14 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.Fix this by calling
tlb_remove_tlb_entry()for each entry being write-protected when cleating soft-dirty.fs/proc/task_mmu.c static inline void clear_soft_dirty(struct vm_area_struct *vma, · line 1060
Quoted 7 lines
fs/proc/task_mmu.c +1
-0@@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);Oh!
Quoted 6 lines
Yesterday when you had me look at this code; I figured the sane thing to do was to make it look more like
mprotect().Why did you chose to make it work with
mmu_gatherinstead? I'll grant you that it's probably the smaller patch, but I still think it's weird to usemmu_gatherhere.
I agree. The reason why clear_refs_write used the gather API was [1] and seems like to overkill to me.
We could just do like [inc|dec]_tlb_flush_pending with flush_tlb_mm at right before dec_tlb_flush_pending instead of gather.
thought?
[1] b3a81d0841a95, mm: fix KSM data corruption
Will Deacon
maintainerRe: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
Quoted 29 lines · Minchan Kim
Quoted 28 lines · Peter Zijlstra
Quoted 14 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.Fix this by calling
tlb_remove_tlb_entry()for each entry being write-protected when cleating soft-dirty.fs/proc/task_mmu.c static inline void clear_soft_dirty(struct vm_area_struct *vma, · line 1060
Quoted 7 lines
fs/proc/task_mmu.c +1
-0@@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);Oh!
Yesterday when you had me look at this code; I figured the sane thing to do was to make it look more like
mprotect().
Quoted 6 lines
Quoted 3 lines
Why did you chose to make it work with
mmu_gatherinstead? I'll grant you that it's probably the smaller patch, but I still think it's weird to usemmu_gatherhere.I agree. The reason why
clear_refs_writeused the gather API was [1] and seems like to overkill to me.
I don't see why it's overkill. Prior to that commit, it called flush_tlb_mm() directly.
Quoted 4 lines
We could just do like [inc|dec]_tlb_flush_pending with
flush_tlb_mmat right beforedec_tlb_flush_pendinginstead of gather.thought?
I'm not sure why this is better; it's different to the madvise() path, and will need special logic to avoid the flush in the case where we're just doing aging.
Will
Quoted 1 line
[1]
b3a81d0841a95, mm: fix KSM data corruption
Re: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
Quoted 34 lines · Will Deacon
Quoted 33 lines · Minchan Kim
Quoted 31 lines · Peter Zijlstra
Quoted 14 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.Fix this by calling
tlb_remove_tlb_entry()for each entry being write-protected when cleating soft-dirty.fs/proc/task_mmu.c static inline void clear_soft_dirty(struct vm_area_struct *vma, · line 1060
Quoted 7 lines
fs/proc/task_mmu.c +1
-0@@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);Oh!
Yesterday when you had me look at this code; I figured the sane thing to do was to make it look more like
mprotect().Why did you chose to make it work with
mmu_gatherinstead? I'll grant you that it's probably the smaller patch, but I still think it's weird to usemmu_gatherhere.
Quoted 5 lines
Quoted 2 lines
I agree. The reason why
clear_refs_writeused the gather API was [1] and seems like to overkill to me.I don't see why it's overkill. Prior to that commit, it called
flush_tlb_mm()directly.
The TLB gather was added for increasing tlb flush pending count for stability bug, not for performance optimiataion(The commit never had any number to support it and didn't have the logic to handle each pte with tlb gather) and then it introduced a bug now so I take it as overkill since it made complication from the beginning *unnecessary*.
Quoted 9 lines
Quoted 5 lines
We could just do like [inc|dec]_tlb_flush_pending with
flush_tlb_mmat right beforedec_tlb_flush_pendinginstead of gather.thought?
I'm not sure why this is better; it's different to the
madvise()path, and will need special logic to avoid the flush in the case where we're just doing aging.
I thought it's better to fix the bug first as *simple* patch and then do optimization based on it.
Anyway, following to Yu's comment, we don't need gather API and even the flush if we give up the accuarcy(but I want to have it).
Re: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
In reply to Will DeaconQuoted 8 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.
I don't think we need a TLB flush in this context, same reason as we don't have one in copy_present_pte() which uses ptep_set_wrprotect() to write-protect a src PTE.
ptep_modify_prot_start/commit() and ptep_set_wrprotect() guarantee either the dirty bit is set (when a PTE is still writable) or a PF happens (when a PTE has become r/o) when h/w page table walker races with kernel that modifies a PTE using the two APIs.
Quoted 99 lines
Fix this by calling
tlb_remove_tlb_entry()for each entry being write-protected when cleating soft-dirty.Signed-off-by Will Deacon <[email protected]>--- fs/proc/task_mmu.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)fs/proc/task_mmu.c +11
-7@@ -1032,11 +1032,12 @@ enum clear_refs_types {struct clear_refs_private {enum clear_refs_types type; +struct mmu_gather *tlb; };#ifdef CONFIG_MEM_SOFT_DIRTY static inline void clear_soft_dirty (struct vm_area_struct *vma, -unsigned long addr,pte_t *pte) +unsigned long addr,pte_t *pte,struct mmu_gather *tlb) {/* * The soft-dirty tracker uses #PF-s to catch writes @@ -1053,6 +1054,7 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_wrprotect (old_pte); ptent =pte_clear_soft_dirty (ptent);ptep_modify_prot_commit (vma, addr, pte, old_pte, ptent); +tlb_remove_tlb_entry (tlb, pte, addr); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent);set_pte_at (vma->vm_mm, addr, pte, ptent);@@ -1060,14 +1062,14 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, }#else static inline void clear_soft_dirty (struct vm_area_struct *vma, -unsigned long addr,pte_t *pte) +unsigned long addr,pte_t *pte,struct mmu_gather *tlb) { }#endif #if defined(CONFIG_MEM_SOFT_DIRTY ) && defined(CONFIG_TRANSPARENT_HUGEPAGE )static inline void clear_soft_dirty_pmd (struct vm_area_struct *vma, -unsigned long addr,pmd_t *pmdp) +unsigned long addr,pmd_t *pmdp,struct mmu_gather *tlb) {pmd_t old, pmd = *pmdp;@@ -1081,6 +1083,7 @@ static inline void clear_soft_dirty_pmd(struct vm_area_struct *vma, pmd =pmd_wrprotect (pmd); pmd =pmd_clear_soft_dirty (pmd); +tlb_remove_pmd_tlb_entry (tlb, pmdp, addr);set_pmd_at (vma->vm_mm, addr, pmdp, pmd); }else if (is_migration_entry (pmd_to_swp_entry (pmd))) {@@ -1090,7 +1093,7 @@ static inline void clear_soft_dirty_pmd(struct vm_area_struct *vma, }#else static inline void clear_soft_dirty_pmd (struct vm_area_struct *vma, -unsigned long addr,pmd_t *pmdp) +unsigned long addr,pmd_t *pmdp,struct mmu_gather *tlb) { }#endif @@ -1107,7 +1110,7 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr, ptl =pmd_trans_huge_lock (pmd, vma);if (ptl) {if (cp->type ==CLEAR_REFS_SOFT_DIRTY ) { -clear_soft_dirty_pmd (vma, addr, pmd); +clear_soft_dirty_pmd (vma, addr, pmd, cp->tlb); goto out; }@@ -1133,7 +1136,7 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr, ptent = *pte;if (cp->type ==CLEAR_REFS_SOFT_DIRTY ) { -clear_soft_dirty (vma, addr, pte); +clear_soft_dirty (vma, addr, pte, cp->tlb);continue ; }@@ -1212,7 +1215,8 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,if (mm) {struct mmu_notifier_range range;struct clear_refs_private cp = { - .type = type, + .type = type, + .tlb = &tlb, };if (type ==CLEAR_REFS_MM_HIWATER_RSS ) {Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Re: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
Quoted 10 lines · Yu Zhao
Quoted 8 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.
Quoted 8 lines
I don't think we need a TLB flush in this context, same reason as we don't have one in
copy_present_pte()which usesptep_set_wrprotect()to write-protect a src PTE.ptep_modify_prot_start/commit() and
ptep_set_wrprotect()guarantee either the dirty bit is set (when a PTE is still writable) or a PF happens (when a PTE has become r/o) when h/w page table walker races with kernel that modifies a PTE using the two APIs.
After we remove the writable bit, if we end up with a clean PTE, any subsequent write will trigger a page fault. We can't have a stale writable tlb entry. The architecture-specific APIs guarantee this.
If we end up with a dirty PTE, then yes, there will be a stale writable tlb entry. But this won't be a problem because when we write-protect a page (not PTE), we always check both pte_dirty() and pte_write(), i.e., write_protect_page() and page_mkclean_one(). When they see this dirty PTE, they will flush. And generally, only callers of pte_mkclean() should flush tlb; otherwise we end up one extra if callers of pte_mkclean() and pte_wrprotect() both flush.
Now let's take a step back and see why we got tlb_gather/finish_mmu() here in the first place. Commit b3a81d0841a95 ("mm: fix KSM data corruption") explains the problem clearly. But to fix a problem created by two threads clearing pte_write() and pte_dirty() independently, we only need one of them to set mm_tlb_flush_pending(). Given only removing the writable bit requires tlb flush, that thread should be the one, as I just explained. Adding tlb_gather/finish_mmu() is unnecessary in that fix. And there is no point in having the original flush_tlb_mm() either, given data integrity is already guaranteed. Of course, with it we have more accurate access tracking.
Does a similar problem exist for page_mkclean_one()? Possibly. It checks pte_dirty() and pte_write() but not mm_tlb_flush_pending(). At the moment, madvise_free_pte_range() only supports anonymous memory, which doesn't do writeback. But the missing mm_tlb_flush_pending() just seems to be an accident waiting to happen. E.g., clean_record_pte() calls pte_mkclean() and does batched flush. I don't know what it's for, but if it's called on file VMAs, a similar race involving 4 CPUs can happen. This time CPU 1 runs clean_record_pte() and CPU 3 runs page_mkclean_one().
Re: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
Quoted 10 lines · Yu Zhao
Quoted 9 lines · Yu Zhao
Quoted 8 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.
I double checked my conclusion and I think it holds. But let me correct some typos and add a summary.
Quoted 1 line
Quoted 1 line
I don't think we need a TLB flush in this context, same reason as we
^^^^^ gather
Quoted 20 lines
Quoted 7 lines
don't have one in
copy_present_pte()which usesptep_set_wrprotect()to write-protect a src PTE.ptep_modify_prot_start/commit() and
ptep_set_wrprotect()guarantee either the dirty bit is set (when a PTE is still writable) or a PF happens (when a PTE has become r/o) when h/w page table walker races with kernel that modifies a PTE using the two APIs.After we remove the writable bit, if we end up with a clean PTE, any subsequent write will trigger a page fault. We can't have a stale writable tlb entry. The architecture-specific APIs guarantee this.
If we end up with a dirty PTE, then yes, there will be a stale writable tlb entry. But this won't be a problem because when we write-protect a page (not PTE), we always check both
pte_dirty()andpte_write(), i.e.,write_protect_page()andpage_mkclean_one(). When they see this dirty PTE, they will flush. And generally, only callers ofpte_mkclean()should flush tlb; otherwise we end up one extra if callers ofpte_mkclean()andpte_wrprotect()both flush.
Quoted 6 lines
Now let's take a step back and see why we got tlb_gather/finish_mmu() here in the first place. Commit
b3a81d0841a95("mm: fix KSM data corruption") explains the problem clearly. But to fix a problem created by two threads clearingpte_write()andpte_dirty()independently, we only need one of them to setmm_tlb_flush_pending(). Given only removing the writable bit requires
^^^^^^^^ dirty
Quoted 4 lines
tlb flush, that thread should be the one, as I just explained. Adding tlb_gather/finish_mmu() is unnecessary in that fix. And there is no point in having the original
flush_tlb_mm()either, given data integrity is already guaranteed.
(i.e., writable tlb entries are flushed when removing the dirty bit.)
Quoted 11 lines
Of course, with it we have more accurate access tracking.
Does a similar problem exist for
page_mkclean_one()? Possibly. It checkspte_dirty()andpte_write()but notmm_tlb_flush_pending(). At the moment,madvise_free_pte_range()only supports anonymous memory, which doesn't do writeback. But the missingmm_tlb_flush_pending()just seems to be an accident waiting to happen. E.g.,clean_record_pte()callspte_mkclean()and does batched flush. I don't know what it's for, but if it's called on file VMAs, a similar race involving 4 CPUs can happen. This time CPU 1 runsclean_record_pte()and CPU 3 runspage_mkclean_one().
To summarize, IMO, we should 1) remove tlb_gather/finish_mmu() here;
2) check mm_tlb_flush_pending() in page_mkclean_one() and dax_entry_mkclean().
Will Deacon
maintainerRe: [PATCH 4/6] mm: proc: Invalidate TLB after clearing soft-dirty page state
In reply to Yu ZhaoQuoted 11 lines · Yu Zhao
Quoted 10 lines · Yu Zhao
Quoted 8 lines · Will Deacon
Since commit
0758cd830494("asm-generic/tlb: avoid potential double flush"), TLB invalidation is elided intlb_finish_mmu()if no entries were batched via the tlb_remove_*() functions. Consequently, the page-table modifications performed byclear_refs_write()in response to a write to /proc/<pid>/clear_refs do not perform TLB invalidation. Although this is fine when simply aging the ptes, in the case of clearing the "soft-dirty" state we can end up with entries wherepte_write()is false, yet a writable mapping remains in the TLB.
Quoted 3 lines
Quoted 3 lines
I don't think we need a TLB flush in this context, same reason as we don't have one in
copy_present_pte()which usesptep_set_wrprotect()to write-protect a src PTE.
Hmm. Afaict, copy_present_pte() is only called on the fork() path when VM_WIPEONFORK is set. I think that's a bit different to the fault case, and even then, there is a fullmm flush after the copy.
Quoted 9 lines
Quoted 4 lines
ptep_modify_prot_start/commit() and
ptep_set_wrprotect()guarantee either the dirty bit is set (when a PTE is still writable) or a PF happens (when a PTE has become r/o) when h/w page table walker races with kernel that modifies a PTE using the two APIs.After we remove the writable bit, if we end up with a clean PTE, any subsequent write will trigger a page fault. We can't have a stale writable tlb entry. The architecture-specific APIs guarantee this.
Quoted 7 lines
If we end up with a dirty PTE, then yes, there will be a stale writable tlb entry. But this won't be a problem because when we write-protect a page (not PTE), we always check both
pte_dirty()andpte_write(), i.e.,write_protect_page()andpage_mkclean_one(). When they see this dirty PTE, they will flush. And generally, only callers ofpte_mkclean()should flush tlb; otherwise we end up one extra if callers ofpte_mkclean()andpte_wrprotect()both flush.
I just find this sort of analysis incredibly fragile: we're justifying the lack of TLB invalidation on a case-by-case basis rather than some general rules that mean it is not required by construction. Even if all current users don't need it, what means that will still be true in six months time? It's not like this stuff is easy to trigger in practice if we get it wrong.
Will
Will Deacon
maintainerPATCH 5/6 tlb: mmu_gather: Introduce tlb_gather_mmu_fullmm()
In reply to Will DeaconPassing the range '0, -1' to tlb_gather_mmu() sets the 'fullmm' flag, which indicates that the mm_struct being operated on is going away. In this case, some architectures (such as arm64) can elide TLB invalidation by ensuring that the TLB tag (ASID) associated with this mm is not immediately reclaimed. Although this behaviour is documented in asm-generic/tlb.h, it's subtle and easily missed. Consequently, the /proc walker for manipulating the young and soft-dirty bits passes this range regardless.
Introduce tlb_gather_mmu_fullmm() to make it clearer that this is for the entire mm and WARN() if tlb_gather_mmu() is called with an 'end' address greated than TASK_SIZE.
--- fs/proc/task_mmu.c | 2 +- include/asm-generic/tlb.h | 6 ++++-- include/linux/mm_types.h | 1 + mm/mmap.c | 2 +- mm/mmu_gather.c | 16 ++++++++++++++-- 5 files changed, 21 insertions(+), 6 deletions(-)
fs/proc/task_mmu.c +1 -1
@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm; } -tlb_gather_mmu (&tlb, mm,0 ,-1 ); +tlb_gather_mmu_fullmm (&tlb, mm);if (type ==CLEAR_REFS_SOFT_DIRTY ) {for (vma = mm->mmap; vma; vma = vma->vm_next) {if (!(vma->vm_flags &VM_SOFTDIRTY ))
include/asm-generic/tlb.h +4 -2
@@ -46,7 +46,9 @@* * The mmu_gather API consists of: * -* - tlb_gather_mmu() / tlb_finish_mmu(); start and finish a mmu_gather +* - tlb_gather_mmu() / tlb_gather_mmu_fullmm() / tlb_finish_mmu() +* +* start and finish a mmu_gather * * Finish in particular will issue a (final) TLB invalidate and free * all (remaining) queued pages.
@@ -91,7 +93,7 @@* * - mmu_gather::fullmm * -* A flag set by tlb_gather_mmu() to indicate we're going to free +* A flag set by tlb_gather_mmu_fullmm() to indicate we're going to free * the entire mm; this allows a number of optimizations. * * - We can ignore tlb_{start,end}_vma(); because we don't
include/linux/mm_types.h +1 -0
@@ -585,6 +585,7 @@ static inline cpumask_t *mm_cpumask(struct mm_struct *mm)struct mmu_gather ;extern void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm,unsigned long start,unsigned long end); +extern void tlb_gather_mmu_fullmm (struct mmu_gather *tlb,struct mm_struct *mm);extern void tlb_finish_mmu (struct mmu_gather *tlb);static inline void init_tlb_flush_pending (struct mm_struct *mm)
mm/mmap.c +1 -1
@@ -3216,7 +3216,7 @@ void exit_mmap(struct mm_struct *mm)lru_add_drain ();flush_cache_mm (mm); -tlb_gather_mmu (&tlb, mm,0 ,-1 ); +tlb_gather_mmu_fullmm (&tlb, mm);/* update_hiwater_rss(mm) here? but nobody should be looking */ /* Use -1 here to ensure all VMAs in the mm are unmapped */ unmap_vmas (&tlb, vma,0 ,-1 );
mm/mmu_gather.c +14 -2
@@ -261,8 +261,8 @@ void tlb_flush_mmu(struct mmu_gather *tlb)* respectively when @mm is without users and we're going to destroy * the full address space (exit/execve). */ -void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm, -unsigned long start,unsigned long end) +static void __tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm, +unsigned long start,unsigned long end) { tlb->mm = mm;
@@ -287,6 +287,18 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,inc_tlb_flush_pending (tlb->mm); } +void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm, +unsigned long start,unsigned long end) +{ +WARN_ON (end >TASK_SIZE ); +__tlb_gather_mmu (tlb, mm, start, end); +} + +void tlb_gather_mmu_fullmm (struct mmu_gather *tlb,struct mm_struct *mm) +{ +__tlb_gather_mmu (tlb, mm,0 ,-1 ); +} +/** * tlb_finish_mmu - finish an mmu_gather structure * @tlb: the mmu_gather structure to finish
Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Re: [PATCH 5/6] tlb: mmu_gather: Introduce tlb_gather_mmu_fullmm()
Quoted 4 lines · Will Deacon
Introduce
tlb_gather_mmu_fullmm()to make it clearer that this is for the entire mm andWARN()iftlb_gather_mmu()is called with an 'end' address greated thanTASK_SIZE.
Ack (but with a spello note - "greated").
Linus
Re: [PATCH 5/6] tlb: mmu_gather: Introduce tlb_gather_mmu_fullmm()
Oh - wait.
Not ack.
Not because this is wrong, but because I think you should remove the start/end arguments here too.
The _only_ thing they were used for was that "fullmm" flag, afaik. So now they no longer make sense.
Hmm?
Linus
Quoted 10 lines · Linus Torvalds
Quoted 4 lines · Will Deacon
Introduce
tlb_gather_mmu_fullmm()to make it clearer that this is for the entire mm andWARN()iftlb_gather_mmu()is called with an 'end' address greated thanTASK_SIZE.Ack (but with a spello note - "greated").
Linus
Will Deacon
maintainerRe: [PATCH 5/6] tlb: mmu_gather: Introduce tlb_gather_mmu_fullmm()
Quoted 11 lines · Linus Torvalds
Oh - wait.
Not ack.
Not because this is wrong, but because I think you should remove the start/end arguments here too.
The _only_ thing they were used for was that "fullmm" flag, afaik. So now they no longer make sense.
Hmm?
Oh nice, well spotted. I'll drop them for v2.
Cheers,
Will
[tip: core/mm] tlb: mmu_gather: Remove start/end arguments from tlb_gather_mmu()
In reply to Linus TorvaldsThe following commit has been merged into the core/mm branch of tip:
The following commit has been merged into the core/mm branch of tip:
Commit-ID: a72afd873089c697053e9daa85ff343b3140d2e7 Gitweb: https://git.kernel.org/tip/a72afd873089c697053e9daa85ff343b3140d2e7 Author: Will Deacon <[email protected]> AuthorDate: Wed, 27 Jan 2021 23:53:45 Committer: Peter Zijlstra <[email protected]> CommitterDate: Fri, 29 Jan 2021 20:02:29 +01:00
tlb: mmu_gather: Remove start/end arguments from tlb_gather_mmu()
The 'start' and 'end' arguments to tlb_gather_mmu() are no longer needed now that there is a separate function for 'fullmm' flushing.
Remove the unused arguments and update all callers.
--- arch/ia64/include/asm/tlb.h | 2 +- arch/x86/kernel/ldt.c | 2 +- fs/exec.c | 2 +- include/linux/mm_types.h | 3 +-- mm/hugetlb.c | 16 +--------------- mm/madvise.c | 6 +++--- mm/memory.c | 4 ++-- mm/mmap.c | 2 +- mm/mmu_gather.c | 22 ++++++++-------------- mm/oom_kill.c | 2 +- 10 files changed, 20 insertions(+), 41 deletions(-)
arch/ia64/include/asm/tlb.h +1 -1
@@ -23,7 +23,7 @@* unmapping a portion of the virtual address space, these hooks are called according to * the following template: * -* tlb <- tlb_gather_mmu(mm, start, end); // start unmap for address space MM +* tlb <- tlb_gather_mmu(mm); // start unmap for address space MM * { * for each vma that needs a shootdown do { * tlb_start_vma(tlb, vma);
arch/x86/kernel/ldt.c +1 -1
@@ -398,7 +398,7 @@ static void free_ldt_pgtables(struct mm_struct *mm)if (!boot_cpu_has (X86_FEATURE_PTI ))return ; -tlb_gather_mmu (&tlb, mm, start, end); +tlb_gather_mmu (&tlb, mm);free_pgd_range (&tlb, start, end, start, end);tlb_finish_mmu (&tlb);#endif
fs/exec.c +1 -1
@@ -708,7 +708,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift)return -ENOMEM ;lru_add_drain (); -tlb_gather_mmu (&tlb, mm, old_start, old_end); +tlb_gather_mmu (&tlb, mm);if (new_end > old_start) {/* * when the old and new regions overlap clear from new_end.
include/linux/mm_types.h +1 -2
@@ -588,8 +588,7 @@ static inline cpumask_t *mm_cpumask(struct mm_struct *mm) }struct mmu_gather ; -extern void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm, -unsigned long start,unsigned long end); +extern void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm);extern void tlb_gather_mmu_fullmm (struct mmu_gather *tlb,struct mm_struct *mm);extern void tlb_finish_mmu (struct mmu_gather *tlb);
mm/hugetlb.c +1 -15
@@ -3967,23 +3967,9 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb,void unmap_hugepage_range (struct vm_area_struct *vma,unsigned long start,unsigned long end,struct page *ref_page) { -struct mm_struct *mm;struct mmu_gather tlb; -unsigned long tlb_start = start; -unsigned long tlb_end = end; -/* -* If shared PMDs were possibly used within this vma range, adjust -* start/end for worst case tlb flushing. -* Note that we can not be sure if PMDs are shared until we try to -* unmap pages. However, we want to make sure TLB flushing covers -* the largest possible range. -*/ -adjust_range_if_pmd_sharing_possible (vma, &tlb_start, &tlb_end); - - mm = vma->vm_mm; - -tlb_gather_mmu (&tlb, mm, tlb_start, tlb_end); +tlb_gather_mmu (&tlb, vma->vm_mm);__unmap_hugepage_range (&tlb, vma, start, end, ref_page);tlb_finish_mmu (&tlb); }
mm/madvise.c +3 -3
@@ -506,7 +506,7 @@ static long madvise_cold(struct vm_area_struct *vma,return -EINVAL ;lru_add_drain (); -tlb_gather_mmu (&tlb, mm, start_addr, end_addr); +tlb_gather_mmu (&tlb, mm);madvise_cold_page_range (&tlb, vma, start_addr, end_addr);tlb_finish_mmu (&tlb);
@@ -558,7 +558,7 @@ static long madvise_pageout(struct vm_area_struct *vma,return 0 ;lru_add_drain (); -tlb_gather_mmu (&tlb, mm, start_addr, end_addr); +tlb_gather_mmu (&tlb, mm);madvise_pageout_page_range (&tlb, vma, start_addr, end_addr);tlb_finish_mmu (&tlb);
@@ -723,7 +723,7 @@ static int madvise_free_single_vma(struct vm_area_struct *vma, range.start, range.end);lru_add_drain (); -tlb_gather_mmu (&tlb, mm, range.start, range.end); +tlb_gather_mmu (&tlb, mm);update_hiwater_rss (mm);mmu_notifier_invalidate_range_start (&range);
mm/memory.c +2 -2
@@ -1534,7 +1534,7 @@ void zap_page_range(struct vm_area_struct *vma, unsigned long start,lru_add_drain ();mmu_notifier_range_init (&range,MMU_NOTIFY_CLEAR ,0 , vma, vma->vm_mm, start, start + size); -tlb_gather_mmu (&tlb, vma->vm_mm, start, range.end); +tlb_gather_mmu (&tlb, vma->vm_mm);update_hiwater_rss (vma->vm_mm);mmu_notifier_invalidate_range_start (&range);for ( ; vma && vma->vm_start < range.end; vma = vma->vm_next)
@@ -1561,7 +1561,7 @@ static void zap_page_range_single(struct vm_area_struct *vma, unsigned long addrlru_add_drain ();mmu_notifier_range_init (&range,MMU_NOTIFY_CLEAR ,0 , vma, vma->vm_mm, address, address + size); -tlb_gather_mmu (&tlb, vma->vm_mm, address, range.end); +tlb_gather_mmu (&tlb, vma->vm_mm);update_hiwater_rss (vma->vm_mm);mmu_notifier_invalidate_range_start (&range);unmap_single_vma (&tlb, vma, address, range.end, details);
mm/mmap.c +1 -1
@@ -2671,7 +2671,7 @@ static void unmap_region(struct mm_struct *mm,struct mmu_gather tlb;lru_add_drain (); -tlb_gather_mmu (&tlb, mm, start, end); +tlb_gather_mmu (&tlb, mm);update_hiwater_rss (mm);unmap_vmas (&tlb, vma, start, end); free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS,
mm/mmu_gather.c +8 -14
@@ -253,21 +253,17 @@ void tlb_flush_mmu(struct mmu_gather *tlb)* tlb_gather_mmu - initialize an mmu_gather structure for page-table tear-down * @tlb: the mmu_gather structure to initialize * @mm: the mm_struct of the target address space -* @start: start of the region that will be removed from the page-table -* @end: end of the region that will be removed from the page-table +* @fullmm: @mm is without users and we're going to destroy the full address +* space (exit/execve) * * Called to initialize an (on-stack) mmu_gather structure for page-table -* tear-down from @mm. The @start and @end are set to 0 and -1 -* respectively when @mm is without users and we're going to destroy -* the full address space (exit/execve). +* tear-down from @mm. */ static void __tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm, -unsigned long start,unsigned long end) +bool fullmm) { tlb->mm = mm; - -/* Is it from 0 to ~0? */ - tlb->fullmm = !(start | (end+1 )); + tlb->fullmm = fullmm;#ifndef CONFIG_MMU_GATHER_NO_GATHER tlb->need_flush_all =0 ;
@@ -287,16 +283,14 @@ static void __tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,inc_tlb_flush_pending (tlb->mm); } -void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm, -unsigned long start,unsigned long end) +void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm) { -WARN_ON (!(start | (end +1 )));/* Use _fullmm() instead */ -__tlb_gather_mmu (tlb, mm, start, end); +__tlb_gather_mmu (tlb, mm, false); }void tlb_gather_mmu_fullmm (struct mmu_gather *tlb,struct mm_struct *mm) { -__tlb_gather_mmu (tlb, mm,0 ,-1 ); +__tlb_gather_mmu (tlb, mm, true); }/**
mm/oom_kill.c +1 -1
@@ -546,7 +546,7 @@ bool __oom_reap_task_mm(struct mm_struct *mm)mmu_notifier_range_init (&range,MMU_NOTIFY_UNMAP ,0 , vma, mm, vma->vm_start, vma->vm_end); -tlb_gather_mmu (&tlb, mm, range.start, range.end); +tlb_gather_mmu (&tlb, mm);if (mmu_notifier_invalidate_range_start_nonblock (&range)) {tlb_finish_mmu (&tlb); ret = false;
kernel test robot
build bot[tlb] e242a269fa: WARNING:at_mm/mmu_gather.c:#tlb_gather_mmu
In reply to Will DeaconFYI, we noticed the following commit (built with gcc-9):
Greeting,
FYI, we noticed the following commit (built with gcc-9):
commit: e242a269fa4b7aee0b157ce5b1d7d12179fc3c44 ("[PATCH 5/6] tlb: mmu_gather: Introduce tlb_gather_mmu_fullmm()")
url: https://github.com/0day-ci/linux/commits/Will-Deacon/tlb-Fix-access-and-soft-dirty-bit-management/20201120-223809
base: https://git.kernel.org/cgit/linux/kernel/git/arm64/linux.git for-next/core
in testcase: locktorture
version:
with following parameters:
runtime: 300s test: default
test-description: This torture test consists of creating a number of kernel threads which acquire the lock and hold it for specific amount of time, thus simulating different critical region behaviors.
test-url: https://www.kernel.org/doc/Documentation/locking/locktorture.txt
on test machine: qemu-system-x86_64 -enable-kvm -cpu SandyBridge -smp 2 -m 8G
caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace):
+----------------------------------------------------------------------------+------------+------------+ | | 8303731515 | e242a269fa | +----------------------------------------------------------------------------+------------+------------+ | boot_successes | 4 | 0 | | boot_failures | 0 | 28 | | WARNING:at_mm/mmu_gather.c:#tlb_gather_mmu | 0 | 28 | | RIP:tlb_gather_mmu | 0 | 28 | +----------------------------------------------------------------------------+------------+------------+
If you fix the issue, kindly add following tag
[ 14.182822] WARNING: CPU: 0 PID: 1 at mm/mmu_gather.c:293 tlb_gather_mmu+0x40/0x99 [ 14.184719] Modules linked in: [ 14.185638] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.0-rc3-00061-ge242a269fa4b #2 [ 14.186126] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014 [ 14.188226] RIP: 0010:tlb_gather_mmu+0x40/0x99 [ 14.189429] Code: 3c 25 00 91 01 00 4c 8b 07 41 0f ba e0 1d 73 15 f6 87 ab 08 00 00 08 b8 00 00 00 c0 bf 00 e0 ff ff 48 0f 44 c7 48 39 c8 73 02 <0f> 0b 48 ff c1 48 89 33 48 89 df 48 09 d1 8a 53 20 48 c7 43 30 00 [ 14.189467] RSP: 0000:ffff8881002b3a30 EFLAGS: 00010207 [ 14.190751] RAX: 00007ffffffff000 RBX: ffff8881002b3a40 RCX: ffff888000000000 [ 14.192368] RDX: ffff880000000000 RSI: ffff8881002a0640 RDI: ffff8881002a8000 [ 14.192790] RBP: ffff8881002a0640 R08: 0000000000004000 R09: ffff8881002a8ca8 [ 14.194615] R10: ffff8881002b3b58 R11: 0000000000000000 R12: ffff8881002a07a0 [ 14.196127] R13: ffff888100835000 R14: 0000000000000000 R15: 0000000000000000 [ 14.197900] FS: 0000000000000000(0000) GS:ffff888237a00000(0000) knlGS:0000000000000000 [ 14.199456] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 14.200897] CR2: 0000000000000000 CR3: 0000000002628000 CR4: 00000000000406b0 [ 14.202629] Call Trace: [ 14.202838] free_ldt_pgtables+0x3c/0x85 [ 14.204130] ? hlock_class+0x1a/0x5d [ 14.205173] ? kvm_clock_read+0x14/0x1c [ 14.206122] ? kvm_sched_clock_read+0x5/0xd [ 14.207226] ? paravirt_sched_clock+0x11/0x14 [ 14.208351] ? sched_clock_local+0xc/0x75 [ 14.209454] ? sched_clock_cpu+0x9f/0xaf [ 14.210435] ? hlock_class+0x1a/0x5d [ 14.211370] exit_mmap+0xb9/0x16b [ 14.212349] ? __mutex_unlock_slowpath+0x43/0x20d [ 14.212794] __mmput+0x37/0xbf [ 14.213596] dma_resv_lockdep+0x240/0x265 [ 14.214699] ? sched_clock_local+0xc/0x75 [ 14.215866] ? dma_resv_lockdep+0x124/0x265 [ 14.216125] ? hlock_class+0x1a/0x5d [ 14.217141] ? dma_resv_lockdep+0x186/0x265 [ 14.218305] ? dma_buf_init+0xca/0xca [ 14.219361] do_one_initcall+0xa2/0x1c8 [ 14.219461] kernel_init_freeable+0x203/0x248 [ 14.220614] ? rest_init+0xcd/0xcd [ 14.221619] kernel_init+0xa/0xfa [ 14.222657] ret_from_fork+0x1f/0x30 [ 14.222793] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.0-rc3-00061-ge242a269fa4b #2 [ 14.224914] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014 [ 14.226096] Call Trace: [ 14.226096] dump_stack+0x57/0x6a [ 14.226096] __warn+0xbb/0xe7 [ 14.226096] ? tlb_gather_mmu+0x40/0x99 [ 14.226096] report_bug+0x96/0xd6 [ 14.226096] handle_bug+0x3c/0x5d [ 14.226096] exc_invalid_op+0x14/0x61 [ 14.226096] asm_exc_invalid_op+0x12/0x20 [ 14.226096] RIP: 0010:tlb_gather_mmu+0x40/0x99 [ 14.226096] Code: 3c 25 00 91 01 00 4c 8b 07 41 0f ba e0 1d 73 15 f6 87 ab 08 00 00 08 b8 00 00 00 c0 bf 00 e0 ff ff 48 0f 44 c7 48 39 c8 73 02 <0f> 0b 48 ff c1 48 89 33 48 89 df 48 09 d1 8a 53 20 48 c7 43 30 00 [ 14.226096] RSP: 0000:ffff8881002b3a30 EFLAGS: 00010207 [ 14.226096] RAX: 00007ffffffff000 RBX: ffff8881002b3a40 RCX: ffff888000000000 [ 14.226096] RDX: ffff880000000000 RSI: ffff8881002a0640 RDI: ffff8881002a8000 [ 14.226096] RBP: ffff8881002a0640 R08: 0000000000004000 R09: ffff8881002a8ca8 [ 14.226096] R10: ffff8881002b3b58 R11: 0000000000000000 R12: ffff8881002a07a0 [ 14.226096] R13: ffff888100835000 R14: 0000000000000000 R15: 0000000000000000 [ 14.226096] free_ldt_pgtables+0x3c/0x85 [ 14.226096] ? hlock_class+0x1a/0x5d [ 14.226096] ? kvm_clock_read+0x14/0x1c [ 14.226096] ? kvm_sched_clock_read+0x5/0xd [ 14.226096] ? paravirt_sched_clock+0x11/0x14 [ 14.226096] ? sched_clock_local+0xc/0x75 [ 14.226096] ? sched_clock_cpu+0x9f/0xaf [ 14.226096] ? hlock_class+0x1a/0x5d [ 14.226096] exit_mmap+0xb9/0x16b [ 14.226096] ? __mutex_unlock_slowpath+0x43/0x20d [ 14.226096] __mmput+0x37/0xbf [ 14.226096] dma_resv_lockdep+0x240/0x265 [ 14.226096] ? sched_clock_local+0xc/0x75 [ 14.226096] ? dma_resv_lockdep+0x124/0x265 [ 14.226096] ? hlock_class+0x1a/0x5d [ 14.226096] ? dma_resv_lockdep+0x186/0x265 [ 14.226096] ? dma_buf_init+0xca/0xca [ 14.226096] do_one_initcall+0xa2/0x1c8 [ 14.226096] kernel_init_freeable+0x203/0x248 [ 14.226096] ? rest_init+0xcd/0xcd [ 14.226096] kernel_init+0xa/0xfa [ 14.226096] ret_from_fork+0x1f/0x30 [ 14.226125] ---[ end trace b1a6193bbc625c98 ]---
To reproduce:
# build kernel cd linux cp config-5.10.0-rc3-00061-ge242a269fa4b .config make HOSTCC=gcc-9 CC=gcc-9 ARCH=x86_64 olddefconfig prepare modules_prepare bzImage modules make HOSTCC=gcc-9 CC=gcc-9 ARCH=x86_64 INSTALL_MOD_PATH=<mod-install-dir> modules_install cd <mod-install-dir> find lib/ | cpio -o -H newc --quiet | gzip > modules.cgz
git clone https://github.com/intel/lkp-tests.git
cd lkp-tests
bin/lkp qemu -k <bzImage> -m modules.cgz job-script # job-script is attached in this email
Thanks,
Oliver Sang
#
# Automatically generated file; DO NOT EDIT. # Linux/x86_64 5.10.0-rc3 Kernel Configuration #CONFIG_CC_VERSION_TEXT="gcc-9 (Debian 9.3.0-15) 9.3.0" CONFIG_CC_IS_GCC=yCONFIG_GCC_VERSION=90300 CONFIG_LD_VERSION=235000000 CONFIG_CLANG_VERSION=0CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_INLINE=yCONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y
#
# General setup
#CONFIG_INIT_ENV_ARG_LIMIT=32
# CONFIG_COMPILE_TEST is not set
# CONFIG_UAPI_HEADER_TEST is not setCONFIG_LOCALVERSION=""CONFIG_LOCALVERSION_AUTO=yCONFIG_BUILD_SALT=""CONFIG_HAVE_KERNEL_GZIP=yCONFIG_HAVE_KERNEL_BZIP2=yCONFIG_HAVE_KERNEL_LZMA=yCONFIG_HAVE_KERNEL_XZ=yCONFIG_HAVE_KERNEL_LZO=yCONFIG_HAVE_KERNEL_LZ4=yCONFIG_HAVE_KERNEL_ZSTD=y
# CONFIG_KERNEL_GZIP is not set
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not setCONFIG_KERNEL_LZ4=y
# CONFIG_KERNEL_ZSTD is not setCONFIG_DEFAULT_INIT=""CONFIG_DEFAULT_HOSTNAME="(none)"
# CONFIG_SWAP is not setCONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not setCONFIG_WATCH_QUEUE=yCONFIG_CROSS_MEMORY_ATTACH=yCONFIG_USELIB=yCONFIG_AUDIT=yCONFIG_HAVE_ARCH_AUDITSYSCALL=yCONFIG_AUDITSYSCALL=y
#
# IRQ subsystem
#CONFIG_GENERIC_IRQ_PROBE=yCONFIG_GENERIC_IRQ_SHOW=yCONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=yCONFIG_GENERIC_PENDING_IRQ=yCONFIG_GENERIC_IRQ_MIGRATION=yCONFIG_HARDIRQS_SW_RESEND=yCONFIG_IRQ_DOMAIN=yCONFIG_IRQ_SIM=yCONFIG_IRQ_DOMAIN_HIERARCHY=yCONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=yCONFIG_GENERIC_IRQ_RESERVATION_MODE=yCONFIG_IRQ_FORCED_THREADING=yCONFIG_SPARSE_IRQ=y
# CONFIG_GENERIC_IRQ_DEBUGFS is not set
# end of IRQ subsystem
CONFIG_CLOCKSOURCE_WATCHDOG=yCONFIG_ARCH_CLOCKSOURCE_INIT=yCONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=yCONFIG_GENERIC_TIME_VSYSCALL=yCONFIG_GENERIC_CLOCKEVENTS=yCONFIG_GENERIC_CLOCKEVENTS_BROADCAST=yCONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=yCONFIG_GENERIC_CMOS_UPDATE=yCONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=yCONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
#
# Timers subsystem
#CONFIG_TICK_ONESHOT=yCONFIG_HZ_PERIODIC=y
# CONFIG_NO_HZ_IDLE is not set
# CONFIG_NO_HZ_FULL is not set
# CONFIG_NO_HZ is not setCONFIG_HIGH_RES_TIMERS=y
# end of Timers subsystem
# CONFIG_PREEMPT_NONE is not setCONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not setCONFIG_PREEMPT_COUNT=y
#
# CPU/Task time and stats accounting
#CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
# CONFIG_IRQ_TIME_ACCOUNTING is not setCONFIG_HAVE_SCHED_AVG_IRQ=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_PSI is not set
# end of CPU/Task time and stats accounting
# CONFIG_CPU_ISOLATION is not set
#
# RCU Subsystem
#CONFIG_TREE_RCU=y
# CONFIG_RCU_EXPERT is not setCONFIG_SRCU=yCONFIG_TREE_SRCU=yCONFIG_TASKS_RCU_GENERIC=yCONFIG_TASKS_RCU=yCONFIG_TASKS_RUDE_RCU=yCONFIG_TASKS_TRACE_RCU=yCONFIG_RCU_STALL_COMMON=yCONFIG_RCU_NEED_SEGCBLIST=y
# end of RCU Subsystem
CONFIG_IKCONFIG=yCONFIG_IKCONFIG_PROC=y
# CONFIG_IKHEADERS is not setCONFIG_LOG_BUF_SHIFT=20CONFIG_LOG_CPU_MAX_BUF_SHIFT=12CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
#
# Scheduler features
#CONFIG_UCLAMP_TASK=yCONFIG_UCLAMP_BUCKETS_COUNT=5
# end of Scheduler features
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=yCONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=yCONFIG_CC_HAS_INT128=yCONFIG_ARCH_SUPPORTS_INT128=yCONFIG_CGROUPS=yCONFIG_PAGE_COUNTER=yCONFIG_MEMCG=yCONFIG_MEMCG_KMEM=y
# CONFIG_BLK_CGROUP is not setCONFIG_CGROUP_SCHED=yCONFIG_FAIR_GROUP_SCHED=yCONFIG_CFS_BANDWIDTH=yCONFIG_RT_GROUP_SCHED=y
# CONFIG_UCLAMP_TASK_GROUP is not set
# CONFIG_CGROUP_PIDS is not setCONFIG_CGROUP_RDMA=yCONFIG_CGROUP_FREEZER=yCONFIG_CPUSETS=yCONFIG_PROC_PID_CPUSET=yCONFIG_CGROUP_DEVICE=yCONFIG_CGROUP_CPUACCT=y
# CONFIG_CGROUP_PERF is not set
# CONFIG_CGROUP_BPF is not set
# CONFIG_CGROUP_DEBUG is not setCONFIG_SOCK_CGROUP_DATA=yCONFIG_NAMESPACES=yCONFIG_UTS_NS=yCONFIG_TIME_NS=yCONFIG_IPC_NS=y
# CONFIG_USER_NS is not setCONFIG_PID_NS=y
# CONFIG_NET_NS is not set
# CONFIG_CHECKPOINT_RESTORE is not setCONFIG_SCHED_AUTOGROUP=y
# CONFIG_SYSFS_DEPRECATED is not setCONFIG_RELAY=yCONFIG_BLK_DEV_INITRD=yCONFIG_INITRAMFS_SOURCE=""CONFIG_RD_GZIP=yCONFIG_RD_BZIP2=y
# CONFIG_RD_LZMA is not set
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not setCONFIG_RD_LZ4=y
# CONFIG_RD_ZSTD is not setCONFIG_BOOT_CONFIG=y
# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not setCONFIG_CC_OPTIMIZE_FOR_SIZE=yCONFIG_SYSCTL=yCONFIG_SYSCTL_EXCEPTION_TRACE=yCONFIG_HAVE_PCSPKR_PLATFORM=yCONFIG_BPF=y
# CONFIG_EXPERT is not setCONFIG_MULTIUSER=yCONFIG_SGETMASK_SYSCALL=yCONFIG_SYSFS_SYSCALL=yCONFIG_FHANDLE=yCONFIG_POSIX_TIMERS=yCONFIG_PRINTK=yCONFIG_PRINTK_NMI=yCONFIG_BUG=yCONFIG_ELF_CORE=yCONFIG_PCSPKR_PLATFORM=yCONFIG_BASE_FULL=yCONFIG_FUTEX=yCONFIG_FUTEX_PI=yCONFIG_EPOLL=yCONFIG_SIGNALFD=yCONFIG_TIMERFD=yCONFIG_EVENTFD=yCONFIG_SHMEM=yCONFIG_AIO=yCONFIG_IO_URING=yCONFIG_ADVISE_SYSCALLS=yCONFIG_HAVE_ARCH_USERFAULTFD_WP=yCONFIG_MEMBARRIER=yCONFIG_KALLSYMS=yCONFIG_KALLSYMS_ALL=yCONFIG_KALLSYMS_ABSOLUTE_PERCPU=yCONFIG_KALLSYMS_BASE_RELATIVE=yCONFIG_BPF_SYSCALL=yCONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
# CONFIG_BPF_PRELOAD is not setCONFIG_USERFAULTFD=yCONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=yCONFIG_RSEQ=y
# CONFIG_EMBEDDED is not setCONFIG_HAVE_PERF_EVENTS=y
#
# Kernel Performance Events And Counters
#CONFIG_PERF_EVENTS=y
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
# end of Kernel Performance Events And Counters
CONFIG_VM_EVENT_COUNTERS=yCONFIG_SLUB_DEBUG=y
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not setCONFIG_SLUB=yCONFIG_SLAB_MERGE_DEFAULT=y
# CONFIG_SLAB_FREELIST_RANDOM is not setCONFIG_SLAB_FREELIST_HARDENED=y
# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not setCONFIG_SLUB_CPU_PARTIAL=yCONFIG_SYSTEM_DATA_VERIFICATION=y
# CONFIG_PROFILING is not setCONFIG_TRACEPOINTS=y
# end of General setup
CONFIG_64BIT=yCONFIG_X86_64=yCONFIG_X86=yCONFIG_INSTRUCTION_DECODER=yCONFIG_OUTPUT_FORMAT="elf64-x86-64"CONFIG_LOCKDEP_SUPPORT=yCONFIG_STACKTRACE_SUPPORT=yCONFIG_MMU=yCONFIG_ARCH_MMAP_RND_BITS_MIN=28CONFIG_ARCH_MMAP_RND_BITS_MAX=32CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16CONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_BUG=yCONFIG_GENERIC_BUG_RELATIVE_POINTERS=yCONFIG_ARCH_MAY_HAVE_PC_FDC=yCONFIG_GENERIC_CALIBRATE_DELAY=yCONFIG_ARCH_HAS_CPU_RELAX=yCONFIG_ARCH_HAS_CACHE_LINE_SIZE=yCONFIG_ARCH_HAS_FILTER_PGPROT=yCONFIG_HAVE_SETUP_PER_CPU_AREA=yCONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=yCONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=yCONFIG_ARCH_HIBERNATION_POSSIBLE=yCONFIG_ARCH_SUSPEND_POSSIBLE=yCONFIG_ARCH_WANT_GENERAL_HUGETLB=yCONFIG_ZONE_DMA32=yCONFIG_AUDIT_ARCH=yCONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=yCONFIG_X86_64_SMP=yCONFIG_ARCH_SUPPORTS_UPROBES=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_DYNAMIC_PHYSICAL_MASK=yCONFIG_PGTABLE_LEVELS=4CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
#
# Processor type and features
#CONFIG_ZONE_DMA=yCONFIG_SMP=yCONFIG_X86_FEATURE_NAMES=yCONFIG_X86_X2APIC=y
# CONFIG_X86_MPPARSE is not set
# CONFIG_GOLDFISH is not set
# CONFIG_RETPOLINE is not setCONFIG_X86_CPU_RESCTRL=yCONFIG_X86_EXTENDED_PLATFORM=y
# CONFIG_X86_VSMP is not set
# CONFIG_X86_GOLDFISH is not set
# CONFIG_X86_INTEL_MID is not set
# CONFIG_X86_INTEL_LPSS is not setCONFIG_X86_AMD_PLATFORM_DEVICE=y
# CONFIG_IOSF_MBI is not set
# CONFIG_SCHED_OMIT_FRAME_POINTER is not setCONFIG_HYPERVISOR_GUEST=yCONFIG_PARAVIRT=yCONFIG_PARAVIRT_DEBUG=yCONFIG_PARAVIRT_SPINLOCKS=yCONFIG_X86_HV_CALLBACK_VECTOR=yCONFIG_XEN=y
# CONFIG_XEN_PV is not setCONFIG_XEN_PVHVM=yCONFIG_XEN_PVHVM_SMP=yCONFIG_XEN_SAVE_RESTORE=yCONFIG_XEN_DEBUG_FS=y
# CONFIG_XEN_PVH is not setCONFIG_KVM_GUEST=yCONFIG_ARCH_CPUIDLE_HALTPOLL=yCONFIG_PVH=yCONFIG_PARAVIRT_TIME_ACCOUNTING=yCONFIG_PARAVIRT_CLOCK=y
# CONFIG_JAILHOUSE_GUEST is not set
# CONFIG_ACRN_GUEST is not set
# CONFIG_MK8 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
# CONFIG_MATOM is not setCONFIG_GENERIC_CPU=yCONFIG_X86_INTERNODE_CACHE_SHIFT=6CONFIG_X86_L1_CACHE_SHIFT=6CONFIG_X86_TSC=yCONFIG_X86_CMPXCHG64=yCONFIG_X86_CMOV=yCONFIG_X86_MINIMUM_CPU_FAMILY=64CONFIG_X86_DEBUGCTLMSR=yCONFIG_IA32_FEAT_CTL=yCONFIG_X86_VMX_FEATURE_NAMES=yCONFIG_CPU_SUP_INTEL=yCONFIG_CPU_SUP_AMD=yCONFIG_CPU_SUP_HYGON=yCONFIG_CPU_SUP_CENTAUR=yCONFIG_CPU_SUP_ZHAOXIN=yCONFIG_HPET_TIMER=yCONFIG_DMI=y
# CONFIG_GART_IOMMU is not setCONFIG_MAXSMP=yCONFIG_NR_CPUS_RANGE_BEGIN=8192CONFIG_NR_CPUS_RANGE_END=8192CONFIG_NR_CPUS_DEFAULT=8192CONFIG_NR_CPUS=8192CONFIG_SCHED_SMT=yCONFIG_SCHED_MC=yCONFIG_SCHED_MC_PRIO=yCONFIG_X86_LOCAL_APIC=yCONFIG_X86_IO_APIC=yCONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_X86_MCE is not set
#
# Performance monitoring
#CONFIG_PERF_EVENTS_INTEL_UNCORE=yCONFIG_PERF_EVENTS_INTEL_RAPL=yCONFIG_PERF_EVENTS_INTEL_CSTATE=y
# CONFIG_PERF_EVENTS_AMD_POWER is not set
# end of Performance monitoring
CONFIG_X86_16BIT=yCONFIG_X86_ESPFIX64=y CONFIG_X86_VSYSCALL_EMULATION=y CONFIG_X86_IOPL_IOPERM=y
# CONFIG_I8K is not set
# CONFIG_MICROCODE is not set
# CONFIG_X86_MSR is not setCONFIG_X86_CPUID=m
# CONFIG_X86_5LEVEL is not set CONFIG_X86_DIRECT_GBPAGES=y CONFIG_X86_CPA_STATISTICS=y CONFIG_AMD_MEM_ENCRYPT=y CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT=y
# CONFIG_NUMA is not set CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_DEFAULT=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_MEMORY_PROBE=y CONFIG_ARCH_PROC_KCORE_TEXT=y CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 # CONFIG_X86_PMEM_LEGACY is not set CONFIG_X86_CHECK_BIOS_CORRUPTION=y
# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set CONFIG_X86_RESERVE_LOW=64CONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not set CONFIG_X86_PAT=yCONFIG_ARCH_USES_PG_UNCACHED=y CONFIG_ARCH_RANDOM=yCONFIG_X86_SMAP=yCONFIG_X86_UMIP=y CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
# CONFIG_X86_INTEL_TSX_MODE_OFF is not set
# CONFIG_X86_INTEL_TSX_MODE_ON is not set CONFIG_X86_INTEL_TSX_MODE_AUTO=yCONFIG_EFI=y
# CONFIG_EFI_STUB is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not setCONFIG_HZ_300=y
# CONFIG_HZ_1000 is not setCONFIG_HZ=300CONFIG_SCHED_HRTICK=yCONFIG_KEXEC=y
# CONFIG_KEXEC_FILE is not set CONFIG_CRASH_DUMP=y CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set CONFIG_PHYSICAL_ALIGN=0x200000 CONFIG_HOTPLUG_CPU=y CONFIG_BOOTPARAM_HOTPLUG_CPU0=y CONFIG_DEBUG_HOTPLUG_CPU0=y CONFIG_LEGACY_VSYSCALL_EMULATE=y
# CONFIG_LEGACY_VSYSCALL_XONLY is not set
# CONFIG_LEGACY_VSYSCALL_NONE is not set
# CONFIG_CMDLINE_BOOL is not set CONFIG_MODIFY_LDT_SYSCALL=y CONFIG_HAVE_LIVEPATCH=y
# end of Processor type and features
CONFIG_ARCH_HAS_ADD_PAGES=yCONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=yCONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=yCONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=yCONFIG_ARCH_ENABLE_THP_MIGRATION=y
#
# Power management and ACPI options
#
# CONFIG_SUSPEND is not setCONFIG_HIBERNATE_CALLBACKS=yCONFIG_PM_SLEEP=yCONFIG_PM_SLEEP_SMP=y
# CONFIG_PM_AUTOSLEEP is not set
# CONFIG_PM_WAKELOCKS is not setCONFIG_PM=y
# CONFIG_PM_DEBUG is not setCONFIG_PM_CLK=yCONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
# CONFIG_ENERGY_MODEL is not setCONFIG_ARCH_SUPPORTS_ACPI=yCONFIG_ACPI=yCONFIG_ACPI_LEGACY_TABLES_LOOKUP=yCONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=yCONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=yCONFIG_ACPI_DEBUGGER=yCONFIG_ACPI_DEBUGGER_USER=yCONFIG_ACPI_SPCR_TABLE=yCONFIG_ACPI_LPIT=y
# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
# CONFIG_ACPI_EC_DEBUGFS is not setCONFIG_ACPI_AC=yCONFIG_ACPI_BATTERY=yCONFIG_ACPI_BUTTON=mCONFIG_ACPI_TINY_POWER_BUTTON=mCONFIG_ACPI_TINY_POWER_BUTTON_SIGNAL=38CONFIG_ACPI_VIDEO=mCONFIG_ACPI_FAN=mCONFIG_ACPI_TAD=y
# CONFIG_ACPI_DOCK is not setCONFIG_ACPI_CPU_FREQ_PSS=yCONFIG_ACPI_PROCESSOR_CSTATE=yCONFIG_ACPI_PROCESSOR_IDLE=yCONFIG_ACPI_CPPC_LIB=yCONFIG_ACPI_PROCESSOR=yCONFIG_ACPI_IPMI=mCONFIG_ACPI_HOTPLUG_CPU=yCONFIG_ACPI_PROCESSOR_AGGREGATOR=mCONFIG_ACPI_THERMAL=yCONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y
# CONFIG_ACPI_TABLE_UPGRADE is not setCONFIG_ACPI_DEBUG=y
# CONFIG_ACPI_PCI_SLOT is not setCONFIG_ACPI_CONTAINER=yCONFIG_ACPI_HOTPLUG_MEMORY=yCONFIG_ACPI_HOTPLUG_IOAPIC=y
# CONFIG_ACPI_SBS is not set
# CONFIG_ACPI_HED is not set
# CONFIG_ACPI_CUSTOM_METHOD is not setCONFIG_ACPI_BGRT=y
# CONFIG_ACPI_NFIT is not setCONFIG_HAVE_ACPI_APEI=yCONFIG_HAVE_ACPI_APEI_NMI=y
# CONFIG_ACPI_APEI is not set
# CONFIG_ACPI_DPTF is not setCONFIG_ACPI_WATCHDOG=yCONFIG_ACPI_CONFIGFS=y
# CONFIG_PMIC_OPREGION is not setCONFIG_X86_PM_TIMER=yCONFIG_SFI=y
#
# CPU Frequency scaling
#CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_GOV_ATTR_SET=y CONFIG_CPU_FREQ_GOV_COMMON=y
# CONFIG_CPU_FREQ_STAT is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_POWERSAVE=y CONFIG_CPU_FREQ_GOV_USERSPACE=m
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
#
# CPU frequency scaling drivers
#CONFIG_X86_INTEL_PSTATE=yCONFIG_X86_PCC_CPUFREQ=m
# CONFIG_X86_ACPI_CPUFREQ is not setCONFIG_X86_SPEEDSTEP_CENTRINO=y
# CONFIG_X86_P4_CLOCKMOD is not set
#
# shared options # # end of CPU Frequency scaling
#
# CPU Idle
#CONFIG_CPU_IDLE=yCONFIG_CPU_IDLE_GOV_LADDER=y
# CONFIG_CPU_IDLE_GOV_MENU is not set
# CONFIG_CPU_IDLE_GOV_TEO is not setCONFIG_CPU_IDLE_GOV_HALTPOLL=yCONFIG_HALTPOLL_CPUIDLE=m
# end of CPU Idle
CONFIG_INTEL_IDLE=y
# end of Power management and ACPI options
#
# Bus options (PCI etc.)
#CONFIG_PCI_DIRECT=yCONFIG_PCI_MMCONFIG=yCONFIG_PCI_XEN=yCONFIG_MMCONF_FAM10H=yCONFIG_ISA_DMA_API=yCONFIG_AMD_NB=y
# CONFIG_X86_SYSFB is not set
# end of Bus options (PCI etc.)
#
# Binary Emulations
#
# CONFIG_IA32_EMULATION is not setCONFIG_X86_X32=yCONFIG_COMPAT=yCONFIG_COMPAT_FOR_U64_ALIGNMENT=yCONFIG_SYSVIPC_COMPAT=y
# end of Binary Emulations
#
# Firmware Drivers
#CONFIG_EDD=y
# CONFIG_EDD_OFF is not setCONFIG_FIRMWARE_MEMMAP=y
# CONFIG_DMIID is not setCONFIG_DMI_SYSFS=yCONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
# CONFIG_FW_CFG_SYSFS is not set
# CONFIG_GOOGLE_FIRMWARE is not set
#
# EFI (Extensible Firmware Interface) Support
#CONFIG_EFI_VARS=mCONFIG_EFI_ESRT=y
# CONFIG_EFI_RUNTIME_MAP is not setCONFIG_EFI_FAKE_MEMMAP=yCONFIG_EFI_MAX_FAKE_MEM=8CONFIG_EFI_RUNTIME_WRAPPERS=yCONFIG_EFI_BOOTLOADER_CONTROL=yCONFIG_EFI_CAPSULE_LOADER=mCONFIG_EFI_TEST=y
# CONFIG_EFI_RCI2_TABLE is not set
# CONFIG_EFI_DISABLE_PCI_DMA is not set
# end of EFI (Extensible Firmware Interface) Support
CONFIG_EFI_EARLYCON=y
# CONFIG_EFI_CUSTOM_SSDT_OVERLAYS is not set
#
# Tegra firmware driver
#
# end of Tegra firmware driver # end of Firmware Drivers
CONFIG_HAVE_KVM=y
# CONFIG_VIRTUALIZATION is not setCONFIG_AS_AVX512=yCONFIG_AS_SHA1_NI=yCONFIG_AS_SHA256_NI=yCONFIG_AS_TPAUSE=y
#
# General architecture-dependent options
#CONFIG_CRASH_CORE=yCONFIG_KEXEC_CORE=yCONFIG_HOTPLUG_SMT=yCONFIG_GENERIC_ENTRY=yCONFIG_HAVE_OPROFILE=yCONFIG_OPROFILE_NMI_TIMER=y
# CONFIG_KPROBES is not setCONFIG_JUMP_LABEL=y
# CONFIG_STATIC_KEYS_SELFTEST is not set
# CONFIG_STATIC_CALL_SELFTEST is not setCONFIG_UPROBES=yCONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=yCONFIG_ARCH_USE_BUILTIN_BSWAP=yCONFIG_HAVE_IOREMAP_PROT=yCONFIG_HAVE_KPROBES=yCONFIG_HAVE_KRETPROBES=yCONFIG_HAVE_OPTPROBES=yCONFIG_HAVE_KPROBES_ON_FTRACE=yCONFIG_HAVE_FUNCTION_ERROR_INJECTION=yCONFIG_HAVE_NMI=yCONFIG_HAVE_ARCH_TRACEHOOK=yCONFIG_HAVE_DMA_CONTIGUOUS=yCONFIG_GENERIC_SMP_IDLE_THREAD=yCONFIG_ARCH_HAS_FORTIFY_SOURCE=yCONFIG_ARCH_HAS_SET_MEMORY=yCONFIG_ARCH_HAS_SET_DIRECT_MAP=yCONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=yCONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=yCONFIG_HAVE_ASM_MODVERSIONS=yCONFIG_HAVE_REGS_AND_STACK_ACCESS_API=yCONFIG_HAVE_RSEQ=yCONFIG_HAVE_FUNCTION_ARG_ACCESS_API=yCONFIG_HAVE_HW_BREAKPOINT=yCONFIG_HAVE_MIXED_BREAKPOINTS_REGS=yCONFIG_HAVE_USER_RETURN_NOTIFIER=yCONFIG_HAVE_PERF_EVENTS_NMI=yCONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=yCONFIG_HAVE_PERF_REGS=yCONFIG_HAVE_PERF_USER_STACK_DUMP=yCONFIG_HAVE_ARCH_JUMP_LABEL=yCONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=yCONFIG_MMU_GATHER_TABLE_FREE=yCONFIG_MMU_GATHER_RCU_TABLE_FREE=yCONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=yCONFIG_HAVE_ALIGNED_STRUCT_PAGE=yCONFIG_HAVE_CMPXCHG_LOCAL=yCONFIG_HAVE_CMPXCHG_DOUBLE=yCONFIG_HAVE_ARCH_SECCOMP=yCONFIG_HAVE_ARCH_SECCOMP_FILTER=y
# CONFIG_SECCOMP is not setCONFIG_HAVE_ARCH_STACKLEAK=yCONFIG_HAVE_STACKPROTECTOR=yCONFIG_STACKPROTECTOR=yCONFIG_STACKPROTECTOR_STRONG=yCONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=yCONFIG_HAVE_CONTEXT_TRACKING=yCONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=yCONFIG_HAVE_IRQ_TIME_ACCOUNTING=yCONFIG_HAVE_MOVE_PMD=yCONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=yCONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=yCONFIG_HAVE_ARCH_HUGE_VMAP=yCONFIG_ARCH_WANT_HUGE_PMD_SHARE=yCONFIG_HAVE_ARCH_SOFT_DIRTY=yCONFIG_HAVE_MOD_ARCH_SPECIFIC=yCONFIG_MODULES_USE_ELF_RELA=yCONFIG_ARCH_HAS_ELF_RANDOMIZE=yCONFIG_HAVE_ARCH_MMAP_RND_BITS=yCONFIG_HAVE_EXIT_THREAD=yCONFIG_ARCH_MMAP_RND_BITS=28CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=yCONFIG_ARCH_MMAP_RND_COMPAT_BITS=8CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=yCONFIG_HAVE_STACK_VALIDATION=yCONFIG_HAVE_RELIABLE_STACKTRACE=yCONFIG_ISA_BUS_API=yCONFIG_COMPAT_32BIT_TIME=yCONFIG_HAVE_ARCH_VMAP_STACK=y
# CONFIG_VMAP_STACK is not setCONFIG_ARCH_HAS_STRICT_KERNEL_RWX=yCONFIG_STRICT_KERNEL_RWX=yCONFIG_ARCH_HAS_STRICT_MODULE_RWX=yCONFIG_STRICT_MODULE_RWX=yCONFIG_HAVE_ARCH_PREL32_RELOCATIONS=yCONFIG_ARCH_USE_MEMREMAP_PROT=yCONFIG_LOCK_EVENT_COUNTS=yCONFIG_ARCH_HAS_MEM_ENCRYPT=yCONFIG_HAVE_STATIC_CALL=yCONFIG_HAVE_STATIC_CALL_INLINE=y
#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not setCONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# end of GCOV-based kernel profiling
CONFIG_HAVE_GCC_PLUGINS=y
# end of General architecture-dependent options
CONFIG_RT_MUTEXES=yCONFIG_BASE_SMALL=0CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
# CONFIG_MODULE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_MODULE_SIG is not set
# CONFIG_MODULE_COMPRESS is not setCONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y
# CONFIG_UNUSED_SYMBOLS is not setCONFIG_TRIM_UNUSED_KSYMS=yCONFIG_UNUSED_KSYMS_WHITELIST=""CONFIG_MODULES_TREE_LOOKUP=yCONFIG_BLOCK=yCONFIG_BLK_SCSI_REQUEST=yCONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_BSGLIB is not setCONFIG_BLK_DEV_INTEGRITY=yCONFIG_BLK_DEV_INTEGRITY_T10=yCONFIG_BLK_DEV_ZONED=y
# CONFIG_BLK_CMDLINE_PARSER is not setCONFIG_BLK_WBT=y
# CONFIG_BLK_WBT_MQ is not set
# CONFIG_BLK_DEBUG_FS is not setCONFIG_BLK_SED_OPAL=y
# CONFIG_BLK_INLINE_ENCRYPTION is not set
#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not setCONFIG_MSDOS_PARTITION=yCONFIG_EFI_PARTITION=y
# end of Partition Types
CONFIG_BLOCK_COMPAT=yCONFIG_BLK_MQ_PCI=yCONFIG_BLK_MQ_VIRTIO=yCONFIG_BLK_MQ_RDMA=yCONFIG_BLK_PM=y
#
# IO Schedulers
#CONFIG_MQ_IOSCHED_DEADLINE=yCONFIG_MQ_IOSCHED_KYBER=mCONFIG_IOSCHED_BFQ=y
# end of IO Schedulers
CONFIG_PADATA=yCONFIG_ASN1=yCONFIG_UNINLINE_SPIN_UNLOCK=yCONFIG_ARCH_SUPPORTS_ATOMIC_RMW=yCONFIG_MUTEX_SPIN_ON_OWNER=yCONFIG_RWSEM_SPIN_ON_OWNER=yCONFIG_LOCK_SPIN_ON_OWNER=yCONFIG_ARCH_USE_QUEUED_SPINLOCKS=yCONFIG_QUEUED_SPINLOCKS=yCONFIG_ARCH_USE_QUEUED_RWLOCKS=yCONFIG_QUEUED_RWLOCKS=yCONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=yCONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=yCONFIG_ARCH_HAS_SYSCALL_WRAPPER=yCONFIG_FREEZER=y
#
# Executable file formats
#CONFIG_BINFMT_ELF=yCONFIG_ELFCORE=yCONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=yCONFIG_BINFMT_SCRIPT=y
# CONFIG_BINFMT_MISC is not setCONFIG_COREDUMP=y
# end of Executable file formats
#
# Memory Management options
#CONFIG_SELECT_MEMORY_MODEL=yCONFIG_SPARSEMEM_MANUAL=yCONFIG_SPARSEMEM=yCONFIG_SPARSEMEM_EXTREME=yCONFIG_SPARSEMEM_VMEMMAP_ENABLE=yCONFIG_SPARSEMEM_VMEMMAP=yCONFIG_HAVE_FAST_GUP=yCONFIG_MEMORY_ISOLATION=yCONFIG_MEMORY_HOTPLUG=yCONFIG_MEMORY_HOTPLUG_SPARSE=yCONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y
# CONFIG_MEMORY_HOTREMOVE is not setCONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_COMPACTION=yCONFIG_PAGE_REPORTING=yCONFIG_MIGRATION=yCONFIG_CONTIG_ALLOC=yCONFIG_PHYS_ADDR_T_64BIT=yCONFIG_BOUNCE=yCONFIG_VIRT_TO_BUS=yCONFIG_MMU_NOTIFIER=y
# CONFIG_KSM is not setCONFIG_DEFAULT_MMAP_MIN_ADDR=4096CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not setCONFIG_TRANSPARENT_HUGEPAGE_MADVISE=yCONFIG_ARCH_WANTS_THP_SWAP=y
# CONFIG_CLEANCACHE is not set
# CONFIG_CMA is not setCONFIG_ZPOOL=m
# CONFIG_ZBUD is not setCONFIG_Z3FOLD=mCONFIG_ZSMALLOC=mCONFIG_ZSMALLOC_STAT=yCONFIG_GENERIC_EARLY_IOREMAP=y
# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not setCONFIG_IDLE_PAGE_TRACKING=yCONFIG_ARCH_HAS_PTE_DEVMAP=yCONFIG_ARCH_USES_HIGH_VMA_FLAGS=yCONFIG_ARCH_HAS_PKEYS=yCONFIG_PERCPU_STATS=y
# CONFIG_GUP_BENCHMARK is not setCONFIG_READ_ONLY_THP_FOR_FS=yCONFIG_ARCH_HAS_PTE_SPECIAL=y
# end of Memory Management options
CONFIG_NET=yCONFIG_COMPAT_NETLINK_MESSAGES=yCONFIG_NET_INGRESS=yCONFIG_NET_EGRESS=yCONFIG_SKB_EXTENSIONS=y
#
# Networking options
#CONFIG_PACKET=mCONFIG_PACKET_DIAG=mCONFIG_UNIX=yCONFIG_UNIX_SCM=y
# CONFIG_UNIX_DIAG is not setCONFIG_TLS=m
# CONFIG_TLS_DEVICE is not set
# CONFIG_TLS_TOE is not setCONFIG_XFRM=yCONFIG_XFRM_OFFLOAD=yCONFIG_XFRM_ALGO=y
# CONFIG_XFRM_USER is not setCONFIG_XFRM_INTERFACE=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not setCONFIG_XFRM_STATISTICS=yCONFIG_XFRM_AH=mCONFIG_XFRM_ESP=mCONFIG_NET_KEY=y
# CONFIG_NET_KEY_MIGRATE is not setCONFIG_SMC=m
# CONFIG_SMC_DIAG is not setCONFIG_XDP_SOCKETS=yCONFIG_XDP_SOCKETS_DIAG=mCONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not setCONFIG_IP_PNP=yCONFIG_IP_PNP_DHCP=y
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not setCONFIG_NET_IPIP=yCONFIG_NET_IPGRE_DEMUX=yCONFIG_NET_IP_TUNNEL=yCONFIG_NET_IPGRE=mCONFIG_SYN_COOKIES=yCONFIG_NET_IPVTI=mCONFIG_NET_UDP_TUNNEL=yCONFIG_NET_FOU=yCONFIG_NET_FOU_IP_TUNNELS=yCONFIG_INET_AH=mCONFIG_INET_ESP=mCONFIG_INET_ESP_OFFLOAD=m
# CONFIG_INET_ESPINTCP is not set
# CONFIG_INET_IPCOMP is not setCONFIG_INET_TUNNEL=yCONFIG_INET_DIAG=yCONFIG_INET_TCP_DIAG=yCONFIG_INET_UDP_DIAG=m
# CONFIG_INET_RAW_DIAG is not set
# CONFIG_INET_DIAG_DESTROY is not set
# CONFIG_TCP_CONG_ADVANCED is not setCONFIG_TCP_CONG_CUBIC=yCONFIG_DEFAULT_TCP_CONG="cubic"CONFIG_TCP_MD5SIG=yCONFIG_IPV6=m
# CONFIG_IPV6_ROUTER_PREF is not setCONFIG_IPV6_OPTIMISTIC_DAD=yCONFIG_INET6_AH=m
# CONFIG_INET6_ESP is not set
# CONFIG_INET6_IPCOMP is not set
# CONFIG_IPV6_MIP6 is not setCONFIG_IPV6_ILA=mCONFIG_INET6_TUNNEL=m
# CONFIG_IPV6_VTI is not set
# CONFIG_IPV6_SIT is not setCONFIG_IPV6_TUNNEL=mCONFIG_IPV6_GRE=mCONFIG_IPV6_FOU=mCONFIG_IPV6_FOU_TUNNEL=mCONFIG_IPV6_MULTIPLE_TABLES=yCONFIG_IPV6_SUBTREES=y
# CONFIG_IPV6_MROUTE is not setCONFIG_IPV6_SEG6_LWTUNNEL=yCONFIG_IPV6_SEG6_HMAC=y
# CONFIG_IPV6_RPL_LWTUNNEL is not setCONFIG_MPTCP=yCONFIG_INET_MPTCP_DIAG=yCONFIG_MPTCP_KUNIT_TESTS=mCONFIG_NETWORK_SECMARK=yCONFIG_NET_PTP_CLASSIFY=yCONFIG_NETWORK_PHY_TIMESTAMPING=yCONFIG_NETFILTER=y
# CONFIG_NETFILTER_ADVANCED is not set
#
# Core Netfilter Configuration
#CONFIG_NETFILTER_INGRESS=yCONFIG_NETFILTER_NETLINK=m
# CONFIG_NETFILTER_NETLINK_LOG is not setCONFIG_NF_CONNTRACK=mCONFIG_NF_LOG_COMMON=m
# CONFIG_NF_LOG_NETDEV is not set
# CONFIG_NF_CONNTRACK_SECMARK is not set
# CONFIG_NF_CONNTRACK_PROCFS is not setCONFIG_NF_CONNTRACK_LABELS=y
# CONFIG_NF_CONNTRACK_FTP is not setCONFIG_NF_CONNTRACK_IRC=m
# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
# CONFIG_NF_CONNTRACK_SIP is not setCONFIG_NF_CT_NETLINK=mCONFIG_NF_NAT=mCONFIG_NF_NAT_IRC=mCONFIG_NF_NAT_REDIRECT=yCONFIG_NF_NAT_MASQUERADE=y
# CONFIG_NF_TABLES is not setCONFIG_NETFILTER_XTABLES=m
#
# Xtables combined modules
#
# CONFIG_NETFILTER_XT_MARK is not set
#
# Xtables targets
#CONFIG_NETFILTER_XT_TARGET_LOG=mCONFIG_NETFILTER_XT_NAT=m
# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set
# CONFIG_NETFILTER_XT_TARGET_NFLOG is not setCONFIG_NETFILTER_XT_TARGET_REDIRECT=mCONFIG_NETFILTER_XT_TARGET_MASQUERADE=mCONFIG_NETFILTER_XT_TARGET_SECMARK=m
# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
#
# Xtables matches
#
# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not setCONFIG_NETFILTER_XT_MATCH_CONNTRACK=mCONFIG_NETFILTER_XT_MATCH_POLICY=mCONFIG_NETFILTER_XT_MATCH_STATE=m
# end of Core Netfilter Configuration
# CONFIG_IP_SET is not setCONFIG_IP_VS=m
# CONFIG_IP_VS_IPV6 is not set
# CONFIG_IP_VS_DEBUG is not setCONFIG_IP_VS_TAB_BITS=12
#
# IPVS transport protocol load balancing support
#CONFIG_IP_VS_PROTO_TCP=y
# CONFIG_IP_VS_PROTO_UDP is not setCONFIG_IP_VS_PROTO_AH_ESP=y
# CONFIG_IP_VS_PROTO_ESP is not setCONFIG_IP_VS_PROTO_AH=y
# CONFIG_IP_VS_PROTO_SCTP is not set
#
# IPVS scheduler
#CONFIG_IP_VS_RR=mCONFIG_IP_VS_WRR=m
# CONFIG_IP_VS_LC is not setCONFIG_IP_VS_WLC=m
# CONFIG_IP_VS_FO is not setCONFIG_IP_VS_OVF=mCONFIG_IP_VS_LBLC=mCONFIG_IP_VS_LBLCR=m
# CONFIG_IP_VS_DH is not setCONFIG_IP_VS_SH=m
# CONFIG_IP_VS_MH is not setCONFIG_IP_VS_SED=mCONFIG_IP_VS_NQ=m
#
# IPVS SH scheduler
#CONFIG_IP_VS_SH_TAB_BITS=8
#
# IPVS MH scheduler
#CONFIG_IP_VS_MH_TAB_INDEX=12
#
# IPVS application helper
#
# CONFIG_IP_VS_NFCT is not set
#
# IP: Netfilter Configuration
#CONFIG_NF_DEFRAG_IPV4=mCONFIG_NF_SOCKET_IPV4=yCONFIG_NF_TPROXY_IPV4=mCONFIG_NF_DUP_IPV4=m
# CONFIG_NF_LOG_ARP is not setCONFIG_NF_LOG_IPV4=mCONFIG_NF_REJECT_IPV4=mCONFIG_IP_NF_IPTABLES=mCONFIG_IP_NF_FILTER=mCONFIG_IP_NF_TARGET_REJECT=mCONFIG_IP_NF_NAT=mCONFIG_IP_NF_TARGET_MASQUERADE=m
# CONFIG_IP_NF_MANGLE is not setCONFIG_IP_NF_RAW=m
# end of IP: Netfilter Configuration
#
# IPv6: Netfilter Configuration
#
# CONFIG_NF_SOCKET_IPV6 is not setCONFIG_NF_TPROXY_IPV6=m
# CONFIG_NF_DUP_IPV6 is not setCONFIG_NF_REJECT_IPV6=mCONFIG_NF_LOG_IPV6=mCONFIG_IP6_NF_IPTABLES=mCONFIG_IP6_NF_MATCH_IPV6HEADER=mCONFIG_IP6_NF_FILTER=m
# CONFIG_IP6_NF_TARGET_REJECT is not setCONFIG_IP6_NF_MANGLE=mCONFIG_IP6_NF_RAW=m
# end of IPv6: Netfilter Configuration
CONFIG_NF_DEFRAG_IPV6=mCONFIG_NF_CONNTRACK_BRIDGE=m
# CONFIG_BPFILTER is not set
# CONFIG_IP_DCCP is not setCONFIG_IP_SCTP=mCONFIG_SCTP_DBG_OBJCNT=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not setCONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
# CONFIG_SCTP_COOKIE_HMAC_MD5 is not setCONFIG_SCTP_COOKIE_HMAC_SHA1=yCONFIG_INET_SCTP_DIAG=m
# CONFIG_RDS is not setCONFIG_TIPC=mCONFIG_TIPC_MEDIA_IB=y
# CONFIG_TIPC_MEDIA_UDP is not set
# CONFIG_TIPC_CRYPTO is not setCONFIG_TIPC_DIAG=mCONFIG_ATM=y
# CONFIG_ATM_CLIP is not set
# CONFIG_ATM_LANE is not setCONFIG_ATM_BR2684=yCONFIG_ATM_BR2684_IPFILTER=y
# CONFIG_L2TP is not setCONFIG_MRP=m
# CONFIG_BRIDGE is not setCONFIG_HAVE_NET_DSA=yCONFIG_NET_DSA=mCONFIG_NET_DSA_TAG_8021Q=mCONFIG_NET_DSA_TAG_AR9331=mCONFIG_NET_DSA_TAG_BRCM_COMMON=mCONFIG_NET_DSA_TAG_BRCM=mCONFIG_NET_DSA_TAG_BRCM_PREPEND=m
# CONFIG_NET_DSA_TAG_GSWIP is not setCONFIG_NET_DSA_TAG_DSA=mCONFIG_NET_DSA_TAG_EDSA=mCONFIG_NET_DSA_TAG_MTK=mCONFIG_NET_DSA_TAG_KSZ=m
# CONFIG_NET_DSA_TAG_RTL4_A is not setCONFIG_NET_DSA_TAG_OCELOT=mCONFIG_NET_DSA_TAG_QCA=mCONFIG_NET_DSA_TAG_LAN9303=mCONFIG_NET_DSA_TAG_SJA1105=mCONFIG_NET_DSA_TAG_TRAILER=mCONFIG_VLAN_8021Q=m
# CONFIG_VLAN_8021Q_GVRP is not setCONFIG_VLAN_8021Q_MVRP=y
# CONFIG_DECNET is not setCONFIG_LLC=y
# CONFIG_LLC2 is not setCONFIG_ATALK=y
# CONFIG_DEV_APPLETALK is not setCONFIG_X25=mCONFIG_LAPB=y
# CONFIG_PHONET is not setCONFIG_6LOWPAN=m
# CONFIG_6LOWPAN_DEBUGFS is not setCONFIG_6LOWPAN_NHC=mCONFIG_6LOWPAN_NHC_DEST=m
# CONFIG_6LOWPAN_NHC_FRAGMENT is not setCONFIG_6LOWPAN_NHC_HOP=mCONFIG_6LOWPAN_NHC_IPV6=m
# CONFIG_6LOWPAN_NHC_MOBILITY is not setCONFIG_6LOWPAN_NHC_ROUTING=mCONFIG_6LOWPAN_NHC_UDP=mCONFIG_6LOWPAN_GHC_EXT_HDR_HOP=m
# CONFIG_6LOWPAN_GHC_UDP is not setCONFIG_6LOWPAN_GHC_ICMPV6=m
# CONFIG_6LOWPAN_GHC_EXT_HDR_DEST is not set
# CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG is not setCONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m
# CONFIG_IEEE802154 is not setCONFIG_NET_SCHED=y
#
# Queueing/Scheduling
#CONFIG_NET_SCH_CBQ=mCONFIG_NET_SCH_HTB=y
# CONFIG_NET_SCH_HFSC is not set
# CONFIG_NET_SCH_ATM is not setCONFIG_NET_SCH_PRIO=mCONFIG_NET_SCH_MULTIQ=m
# CONFIG_NET_SCH_RED is not setCONFIG_NET_SCH_SFB=mCONFIG_NET_SCH_SFQ=mCONFIG_NET_SCH_TEQL=mCONFIG_NET_SCH_TBF=m
# CONFIG_NET_SCH_CBS is not setCONFIG_NET_SCH_ETF=mCONFIG_NET_SCH_TAPRIO=mCONFIG_NET_SCH_GRED=mCONFIG_NET_SCH_DSMARK=y
# CONFIG_NET_SCH_NETEM is not setCONFIG_NET_SCH_DRR=mCONFIG_NET_SCH_MQPRIO=m
# CONFIG_NET_SCH_SKBPRIO is not set
# CONFIG_NET_SCH_CHOKE is not setCONFIG_NET_SCH_QFQ=yCONFIG_NET_SCH_CODEL=mCONFIG_NET_SCH_FQ_CODEL=mCONFIG_NET_SCH_CAKE=yCONFIG_NET_SCH_FQ=mCONFIG_NET_SCH_HHF=mCONFIG_NET_SCH_PIE=mCONFIG_NET_SCH_FQ_PIE=mCONFIG_NET_SCH_INGRESS=y
# CONFIG_NET_SCH_PLUG is not setCONFIG_NET_SCH_ETS=yCONFIG_NET_SCH_DEFAULT=y
# CONFIG_DEFAULT_FQ is not set
# CONFIG_DEFAULT_CODEL is not set
# CONFIG_DEFAULT_FQ_CODEL is not setCONFIG_DEFAULT_FQ_PIE=y
# CONFIG_DEFAULT_SFQ is not set
# CONFIG_DEFAULT_PFIFO_FAST is not setCONFIG_DEFAULT_NET_SCH="fq_pie"
#
# Classification
#CONFIG_NET_CLS=yCONFIG_NET_CLS_BASIC=mCONFIG_NET_CLS_TCINDEX=y
# CONFIG_NET_CLS_ROUTE4 is not setCONFIG_NET_CLS_FW=m
# CONFIG_NET_CLS_U32 is not setCONFIG_NET_CLS_RSVP=mCONFIG_NET_CLS_RSVP6=mCONFIG_NET_CLS_FLOW=m
# CONFIG_NET_CLS_CGROUP is not set
# CONFIG_NET_CLS_BPF is not set
# CONFIG_NET_CLS_FLOWER is not setCONFIG_NET_CLS_MATCHALL=m
# CONFIG_NET_EMATCH is not setCONFIG_NET_CLS_ACT=yCONFIG_NET_ACT_POLICE=y
# CONFIG_NET_ACT_GACT is not setCONFIG_NET_ACT_MIRRED=m
# CONFIG_NET_ACT_SAMPLE is not setCONFIG_NET_ACT_IPT=m
# CONFIG_NET_ACT_NAT is not setCONFIG_NET_ACT_PEDIT=y
# CONFIG_NET_ACT_SIMP is not set
# CONFIG_NET_ACT_SKBEDIT is not set
# CONFIG_NET_ACT_CSUM is not set
# CONFIG_NET_ACT_MPLS is not set
# CONFIG_NET_ACT_VLAN is not setCONFIG_NET_ACT_BPF=yCONFIG_NET_ACT_SKBMOD=m
# CONFIG_NET_ACT_IFE is not setCONFIG_NET_ACT_TUNNEL_KEY=yCONFIG_NET_ACT_GATE=yCONFIG_NET_TC_SKB_EXT=yCONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not setCONFIG_DNS_RESOLVER=y
# CONFIG_BATMAN_ADV is not setCONFIG_OPENVSWITCH=mCONFIG_OPENVSWITCH_GRE=mCONFIG_VSOCKETS=mCONFIG_VSOCKETS_DIAG=mCONFIG_VSOCKETS_LOOPBACK=m
# CONFIG_VIRTIO_VSOCKETS is not setCONFIG_VIRTIO_VSOCKETS_COMMON=mCONFIG_HYPERV_VSOCKETS=m
# CONFIG_NETLINK_DIAG is not setCONFIG_MPLS=yCONFIG_NET_MPLS_GSO=mCONFIG_MPLS_ROUTING=y
# CONFIG_MPLS_IPTUNNEL is not setCONFIG_NET_NSH=yCONFIG_HSR=yCONFIG_NET_SWITCHDEV=yCONFIG_NET_L3_MASTER_DEV=yCONFIG_QRTR=yCONFIG_QRTR_SMD=mCONFIG_QRTR_TUN=yCONFIG_QRTR_MHI=mCONFIG_NET_NCSI=y
# CONFIG_NCSI_OEM_CMD_GET_MAC is not setCONFIG_RPS=yCONFIG_RFS_ACCEL=yCONFIG_XPS=y
# CONFIG_CGROUP_NET_PRIO is not setCONFIG_CGROUP_NET_CLASSID=yCONFIG_NET_RX_BUSY_POLL=yCONFIG_BQL=y
# CONFIG_BPF_JIT is not setCONFIG_NET_FLOW_LIMIT=y
#
# Network testing
#
# CONFIG_NET_PKTGEN is not setCONFIG_NET_DROP_MONITOR=y
# end of Network testing # end of Networking options
CONFIG_HAMRADIO=y
#
# Packet Radio protocols
#CONFIG_AX25=yCONFIG_AX25_DAMA_SLAVE=y
# CONFIG_NETROM is not setCONFIG_ROSE=y
#
# AX.25 network device drivers
#
# CONFIG_MKISS is not setCONFIG_6PACK=yCONFIG_BPQETHER=m
# CONFIG_BAYCOM_SER_FDX is not setCONFIG_BAYCOM_SER_HDX=mCONFIG_BAYCOM_PAR=y
# CONFIG_YAM is not set
# end of AX.25 network device drivers
CONFIG_CAN=mCONFIG_CAN_RAW=mCONFIG_CAN_BCM=mCONFIG_CAN_GW=mCONFIG_CAN_J1939=mCONFIG_CAN_ISOTP=m
#
# CAN Device Drivers
#CONFIG_CAN_VCAN=mCONFIG_CAN_VXCAN=m
# CONFIG_CAN_SLCAN is not set
# CONFIG_CAN_DEV is not set
# CONFIG_CAN_DEBUG_DEVICES is not set
# end of CAN Device Drivers
CONFIG_BT=mCONFIG_BT_BREDR=yCONFIG_BT_RFCOMM=mCONFIG_BT_RFCOMM_TTY=y
# CONFIG_BT_BNEP is not set
# CONFIG_BT_HIDP is not set
# CONFIG_BT_HS is not setCONFIG_BT_LE=y
# CONFIG_BT_6LOWPAN is not set
# CONFIG_BT_LEDS is not setCONFIG_BT_MSFTEXT=yCONFIG_BT_DEBUGFS=yCONFIG_BT_SELFTEST=yCONFIG_BT_SELFTEST_ECDH=y
# CONFIG_BT_SELFTEST_SMP is not set
#
# Bluetooth device drivers
#CONFIG_BT_INTEL=mCONFIG_BT_HCIBTSDIO=mCONFIG_BT_HCIUART=mCONFIG_BT_HCIUART_H4=y
# CONFIG_BT_HCIUART_BCSP is not set
# CONFIG_BT_HCIUART_ATH3K is not set
# CONFIG_BT_HCIUART_INTEL is not setCONFIG_BT_HCIUART_AG6XX=y
# CONFIG_BT_HCIDTL1 is not setCONFIG_BT_HCIBT3C=mCONFIG_BT_HCIBLUECARD=mCONFIG_BT_HCIVHCI=mCONFIG_BT_MRVL=mCONFIG_BT_MRVL_SDIO=mCONFIG_BT_MTKSDIO=m
# end of Bluetooth device drivers
CONFIG_AF_RXRPC=y
# CONFIG_AF_RXRPC_INJECT_LOSS is not set
# CONFIG_AF_RXRPC_DEBUG is not set
# CONFIG_RXKAD is not setCONFIG_AF_KCM=mCONFIG_STREAM_PARSER=yCONFIG_FIB_RULES=yCONFIG_WIRELESS=yCONFIG_WIRELESS_EXT=yCONFIG_WEXT_CORE=yCONFIG_WEXT_PROC=yCONFIG_WEXT_PRIV=y
# CONFIG_CFG80211 is not set
#
# CFG80211 needs to be enabled for MAC80211
#CONFIG_MAC80211_STA_HASH_MAX_SIZE=0CONFIG_WIMAX=yCONFIG_WIMAX_DEBUG_LEVEL=8
# CONFIG_RFKILL is not setCONFIG_NET_9P=yCONFIG_NET_9P_VIRTIO=y
# CONFIG_NET_9P_XEN is not set
# CONFIG_NET_9P_DEBUG is not setCONFIG_CAIF=y
# CONFIG_CAIF_DEBUG is not setCONFIG_CAIF_NETDEV=yCONFIG_CAIF_USB=mCONFIG_CEPH_LIB=y
# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not setCONFIG_NFC=yCONFIG_NFC_DIGITAL=yCONFIG_NFC_NCI=yCONFIG_NFC_NCI_SPI=y
# CONFIG_NFC_NCI_UART is not set
# CONFIG_NFC_HCI is not set
#
# Near Field Communication (NFC) devices
#
# CONFIG_NFC_TRF7970A is not setCONFIG_NFC_SIM=mCONFIG_NFC_FDP=y
# CONFIG_NFC_FDP_I2C is not setCONFIG_NFC_PN533=yCONFIG_NFC_PN533_I2C=yCONFIG_NFC_ST_NCI=yCONFIG_NFC_ST_NCI_I2C=yCONFIG_NFC_ST_NCI_SPI=mCONFIG_NFC_NXP_NCI=yCONFIG_NFC_NXP_NCI_I2C=m
# CONFIG_NFC_S3FWRN5_I2C is not setCONFIG_NFC_ST95HF=y
# end of Near Field Communication (NFC) devices
CONFIG_PSAMPLE=yCONFIG_NET_IFE=mCONFIG_LWTUNNEL=y
# CONFIG_LWTUNNEL_BPF is not setCONFIG_DST_CACHE=yCONFIG_GRO_CELLS=yCONFIG_NET_SOCK_MSG=yCONFIG_NET_DEVLINK=yCONFIG_FAILOVER=mCONFIG_ETHTOOL_NETLINK=yCONFIG_HAVE_EBPF_JIT=y
#
# Device Drivers
#CONFIG_HAVE_EISA=yCONFIG_EISA=y
# CONFIG_EISA_VLB_PRIMING is not setCONFIG_EISA_PCI_EISA=y
# CONFIG_EISA_VIRTUAL_ROOT is not setCONFIG_EISA_NAMES=yCONFIG_HAVE_PCI=yCONFIG_PCI=yCONFIG_PCI_DOMAINS=y
# CONFIG_PCIEPORTBUS is not setCONFIG_PCIEASPM=yCONFIG_PCIEASPM_DEFAULT=y
# CONFIG_PCIEASPM_POWERSAVE is not set
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
# CONFIG_PCIEASPM_PERFORMANCE is not set
# CONFIG_PCIE_PTM is not set
# CONFIG_PCI_MSI is not setCONFIG_PCI_QUIRKS=y
# CONFIG_PCI_DEBUG is not set
# CONFIG_PCI_STUB is not setCONFIG_XEN_PCIDEV_FRONTEND=yCONFIG_PCI_LOCKLESS_CONFIG=y
# CONFIG_PCI_IOV is not set
# CONFIG_PCI_PRI is not set
# CONFIG_PCI_PASID is not setCONFIG_PCI_LABEL=y
# CONFIG_HOTPLUG_PCI is not set
#
# PCI controller drivers
#
#
# DesignWare PCI Core Support
#
# end of DesignWare PCI Core Support
#
# Mobiveil PCIe Core Support
#
# end of Mobiveil PCIe Core Support
#
# Cadence PCIe controllers support
#
# end of Cadence PCIe controllers support # end of PCI controller drivers
#
# PCI Endpoint
#
# CONFIG_PCI_ENDPOINT is not set
# end of PCI Endpoint
#
# PCI switch controller drivers
#
# CONFIG_PCI_SW_SWITCHTEC is not set
# end of PCI switch controller drivers
CONFIG_PCCARD=mCONFIG_PCMCIA=mCONFIG_PCMCIA_LOAD_CIS=yCONFIG_CARDBUS=y
#
# PC-card bridges
#
# CONFIG_YENTA is not set
# CONFIG_PD6729 is not set
# CONFIG_I82092 is not set
# CONFIG_RAPIDIO is not set
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER=yCONFIG_UEVENT_HELPER_PATH=""CONFIG_DEVTMPFS=y
# CONFIG_DEVTMPFS_MOUNT is not setCONFIG_STANDALONE=y
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
#
# Firmware loader
#CONFIG_FW_LOADER=yCONFIG_FW_LOADER_PAGED_BUF=yCONFIG_EXTRA_FIRMWARE=""CONFIG_FW_LOADER_USER_HELPER=yCONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
# CONFIG_FW_LOADER_COMPRESS is not setCONFIG_FW_CACHE=y
# end of Firmware loader
CONFIG_WANT_DEV_COREDUMP=yCONFIG_ALLOW_DEV_COREDUMP=yCONFIG_DEV_COREDUMP=y
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not setCONFIG_TEST_ASYNC_DRIVER_PROBE=mCONFIG_SYS_HYPERVISOR=yCONFIG_GENERIC_CPU_AUTOPROBE=yCONFIG_GENERIC_CPU_VULNERABILITIES=yCONFIG_REGMAP=yCONFIG_REGMAP_I2C=yCONFIG_REGMAP_SLIMBUS=mCONFIG_REGMAP_SPI=yCONFIG_REGMAP_W1=yCONFIG_REGMAP_MMIO=yCONFIG_REGMAP_IRQ=yCONFIG_REGMAP_SOUNDWIRE=mCONFIG_REGMAP_SCCB=mCONFIG_REGMAP_SPI_AVMM=yCONFIG_DMA_SHARED_BUFFER=yCONFIG_DMA_FENCE_TRACE=y
# end of Generic Driver Options
#
# Bus devices
#CONFIG_MHI_BUS=y
# CONFIG_MHI_BUS_DEBUG is not set
# end of Bus devices
CONFIG_CONNECTOR=y
# CONFIG_PROC_EVENTS is not setCONFIG_GNSS=y
# CONFIG_MTD is not set
# CONFIG_OF is not setCONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=yCONFIG_PARPORT=y
# CONFIG_PARPORT_PC is not setCONFIG_PARPORT_AX88796=yCONFIG_PARPORT_1284=yCONFIG_PARPORT_NOT_PC=yCONFIG_PNP=yCONFIG_PNP_DEBUG_MESSAGES=y
#
# Protocols
#CONFIG_PNPACPI=yCONFIG_BLK_DEV=yCONFIG_BLK_DEV_NULL_BLK=yCONFIG_BLK_DEV_FD=m
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
# CONFIG_ZRAM is not set
# CONFIG_BLK_DEV_UMEM is not setCONFIG_BLK_DEV_LOOP=mCONFIG_BLK_DEV_LOOP_MIN_COUNT=8CONFIG_BLK_DEV_CRYPTOLOOP=m
# CONFIG_BLK_DEV_DRBD is not setCONFIG_BLK_DEV_NBD=y
# CONFIG_BLK_DEV_SKD is not set
# CONFIG_BLK_DEV_SX8 is not setCONFIG_BLK_DEV_RAM=mCONFIG_BLK_DEV_RAM_COUNT=16CONFIG_BLK_DEV_RAM_SIZE=4096
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not setCONFIG_XEN_BLKDEV_FRONTEND=y
# CONFIG_XEN_BLKDEV_BACKEND is not setCONFIG_VIRTIO_BLK=m
# CONFIG_BLK_DEV_RBD is not set
# CONFIG_BLK_DEV_RSXX is not set
#
# NVME Support
#CONFIG_NVME_CORE=y
# CONFIG_BLK_DEV_NVME is not set
# CONFIG_NVME_MULTIPATH is not setCONFIG_NVME_FABRICS=yCONFIG_NVME_FC=yCONFIG_NVME_TARGET=y
# CONFIG_NVME_TARGET_PASSTHRU is not set
# CONFIG_NVME_TARGET_LOOP is not set
# CONFIG_NVME_TARGET_FC is not set
# CONFIG_NVME_TARGET_TCP is not set
# end of NVME Support
#
# Misc devices
#CONFIG_SENSORS_LIS3LV02D=mCONFIG_AD525X_DPOT=m
# CONFIG_AD525X_DPOT_I2C is not set
# CONFIG_AD525X_DPOT_SPI is not setCONFIG_DUMMY_IRQ=m
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
# CONFIG_TIFM_CORE is not setCONFIG_ICS932S401=y
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HP_ILO is not set
# CONFIG_APDS9802ALS is not setCONFIG_ISL29003=yCONFIG_ISL29020=m
# CONFIG_SENSORS_TSL2550 is not setCONFIG_SENSORS_BH1770=mCONFIG_SENSORS_APDS990X=m
# CONFIG_HMC6352 is not set
# CONFIG_DS1682 is not setCONFIG_LATTICE_ECP3_CONFIG=mCONFIG_SRAM=y
# CONFIG_PCI_ENDPOINT_TEST is not setCONFIG_XILINX_SDFEC=mCONFIG_PVPANIC=mCONFIG_C2PORT=yCONFIG_C2PORT_DURAMAR_2150=m
#
# EEPROM support
#CONFIG_EEPROM_AT24=yCONFIG_EEPROM_AT25=m
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not setCONFIG_EEPROM_93CX6=mCONFIG_EEPROM_93XX46=mCONFIG_EEPROM_IDT_89HPESX=yCONFIG_EEPROM_EE1004=y
# end of EEPROM support
# CONFIG_CB710_CORE is not set
#
# Texas Instruments shared transport line discipline #CONFIG_TI_ST=m
# end of Texas Instruments shared transport line discipline
CONFIG_SENSORS_LIS3_I2C=m
# CONFIG_ALTERA_STAPL is not set
# CONFIG_INTEL_MEI is not set
# CONFIG_INTEL_MEI_ME is not set
# CONFIG_INTEL_MEI_TXE is not set
# CONFIG_VMWARE_VMCI is not set
# CONFIG_GENWQE is not setCONFIG_ECHO=m
# CONFIG_MISC_ALCOR_PCI is not set
# CONFIG_MISC_RTSX_PCI is not set
# CONFIG_HABANA_AI is not set
# end of Misc devices
CONFIG_HAVE_IDE=yCONFIG_IDE=m
#
# Please see Documentation/ide/ide.rst for help/info on IDE drives #CONFIG_IDE_XFER_MODE=yCONFIG_IDE_TIMINGS=yCONFIG_IDE_ATAPI=y
# CONFIG_BLK_DEV_IDE_SATA is not setCONFIG_IDE_GD=m
# CONFIG_IDE_GD_ATA is not setCONFIG_IDE_GD_ATAPI=yCONFIG_BLK_DEV_IDECS=m
# CONFIG_BLK_DEV_DELKIN is not set
# CONFIG_BLK_DEV_IDECD is not set CONFIG_BLK_DEV_IDETAPE=mCONFIG_BLK_DEV_IDEACPI=y
# CONFIG_IDE_TASK_IOCTL is not setCONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
#
# CONFIG_IDE_GENERIC is not setCONFIG_BLK_DEV_PLATFORM=mCONFIG_BLK_DEV_CMD640=mCONFIG_BLK_DEV_CMD640_ENHANCED=y
# CONFIG_BLK_DEV_IDEPNP is not set
#
# PCI IDE chipsets support
#
# CONFIG_BLK_DEV_GENERIC is not set
# CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_RZ1000 is not set
# CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_BLK_DEV_ALI15X3 is not set
# CONFIG_BLK_DEV_AMD74XX is not set
# CONFIG_BLK_DEV_ATIIXP is not set
# CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_TRIFLEX is not set
# CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_JMICRON is not set
# CONFIG_BLK_DEV_PIIX is not set
# CONFIG_BLK_DEV_IT8172 is not set
# CONFIG_BLK_DEV_IT8213 is not set
# CONFIG_BLK_DEV_IT821X is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIIMAGE is not set
# CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_BLK_DEV_TC86C001 is not set
#
# SCSI device support
#CONFIG_SCSI_MOD=yCONFIG_RAID_ATTRS=y
# CONFIG_SCSI is not set
# end of SCSI device support
# CONFIG_ATA is not set
# CONFIG_MD is not set
# CONFIG_TARGET_CORE is not set
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#CONFIG_FIREWIRE=y
# CONFIG_FIREWIRE_OHCI is not setCONFIG_FIREWIRE_NET=m
# CONFIG_FIREWIRE_NOSY is not set
# end of IEEE 1394 (FireWire) support
CONFIG_MACINTOSH_DRIVERS=yCONFIG_MAC_EMUMOUSEBTN=yCONFIG_NETDEVICES=y
# CONFIG_NET_CORE is not setCONFIG_ARCNET=m
# CONFIG_ARCNET_1201 is not set
# CONFIG_ARCNET_1051 is not set
# CONFIG_ARCNET_RAW is not set
# CONFIG_ARCNET_CAP is not set
CONFIG_ARCNET_COM90xx=m
CONFIG_ARCNET_COM90xxIO=mCONFIG_ARCNET_RIM_I=mCONFIG_ARCNET_COM20020=m
# CONFIG_ARCNET_COM20020_PCI is not set
# CONFIG_ARCNET_COM20020_CS is not set
# CONFIG_ATM_DRIVERS is not set
# CONFIG_CAIF_DRIVERS is not set
#
# Distributed Switch Architecture drivers
#CONFIG_B53=mCONFIG_B53_SPI_DRIVER=mCONFIG_B53_MDIO_DRIVER=mCONFIG_B53_MMAP_DRIVER=mCONFIG_B53_SRAB_DRIVER=mCONFIG_B53_SERDES=mCONFIG_NET_DSA_BCM_SF2=mCONFIG_NET_DSA_LOOP=m
# CONFIG_NET_DSA_LANTIQ_GSWIP is not setCONFIG_NET_DSA_MT7530=mCONFIG_NET_DSA_MV88E6060=mCONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=mCONFIG_NET_DSA_MICROCHIP_KSZ9477=m
# CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C is not setCONFIG_NET_DSA_MICROCHIP_KSZ9477_SPI=mCONFIG_NET_DSA_MICROCHIP_KSZ8795=m
# CONFIG_NET_DSA_MICROCHIP_KSZ8795_SPI is not setCONFIG_NET_DSA_MV88E6XXX=mCONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
# CONFIG_NET_DSA_MSCC_SEVILLE is not set
# CONFIG_NET_DSA_AR9331 is not setCONFIG_NET_DSA_SJA1105=m
# CONFIG_NET_DSA_QCA8K is not set
# CONFIG_NET_DSA_REALTEK_SMI is not setCONFIG_NET_DSA_SMSC_LAN9303=m
# CONFIG_NET_DSA_SMSC_LAN9303_I2C is not setCONFIG_NET_DSA_SMSC_LAN9303_MDIO=mCONFIG_NET_DSA_VITESSE_VSC73XX=m
# CONFIG_NET_DSA_VITESSE_VSC73XX_SPI is not setCONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM=m
# end of Distributed Switch Architecture drivers
CONFIG_ETHERNET=yCONFIG_NET_VENDOR_3COM=y
# CONFIG_EL3 is not set
# CONFIG_PCMCIA_3C574 is not set
# CONFIG_PCMCIA_3C589 is not set
# CONFIG_VORTEX is not set
# CONFIG_TYPHOON is not setCONFIG_NET_VENDOR_ADAPTEC=y
# CONFIG_ADAPTEC_STARFIRE is not setCONFIG_NET_VENDOR_AGERE=y
# CONFIG_ET131X is not setCONFIG_NET_VENDOR_ALACRITECH=y
# CONFIG_SLICOSS is not setCONFIG_NET_VENDOR_ALTEON=y
# CONFIG_ACENIC is not set
# CONFIG_ALTERA_TSE is not setCONFIG_NET_VENDOR_AMAZON=yCONFIG_NET_VENDOR_AMD=y
# CONFIG_AMD8111_ETH is not set
# CONFIG_PCNET32 is not set
# CONFIG_PCMCIA_NMCLAN is not set
# CONFIG_AMD_XGBE is not setCONFIG_NET_VENDOR_AQUANTIA=y
# CONFIG_AQTION is not setCONFIG_NET_VENDOR_ARC=yCONFIG_NET_VENDOR_ATHEROS=y
# CONFIG_ATL2 is not set
# CONFIG_ATL1 is not set
# CONFIG_ATL1E is not set
# CONFIG_ATL1C is not set
# CONFIG_ALX is not setCONFIG_NET_VENDOR_AURORA=y
# CONFIG_AURORA_NB8800 is not setCONFIG_NET_VENDOR_BROADCOM=y
# CONFIG_B44 is not set
# CONFIG_BCMGENET is not set
# CONFIG_BNX2 is not set
# CONFIG_CNIC is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2X is not set
# CONFIG_SYSTEMPORT is not set
# CONFIG_BNXT is not setCONFIG_NET_VENDOR_BROCADE=y
# CONFIG_BNA is not setCONFIG_NET_VENDOR_CADENCE=y
# CONFIG_MACB is not setCONFIG_NET_VENDOR_CAVIUM=y
# CONFIG_THUNDER_NIC_PF is not set
# CONFIG_THUNDER_NIC_VF is not set
# CONFIG_THUNDER_NIC_BGX is not set
# CONFIG_THUNDER_NIC_RGX is not set
# CONFIG_LIQUIDIO is not setCONFIG_NET_VENDOR_CHELSIO=y
# CONFIG_CHELSIO_T1 is not set
# CONFIG_CHELSIO_T3 is not set
# CONFIG_CHELSIO_T4 is not set
# CONFIG_CHELSIO_T4VF is not setCONFIG_NET_VENDOR_CIRRUS=y
# CONFIG_CS89x0 is not setCONFIG_NET_VENDOR_CISCO=y
# CONFIG_ENIC is not setCONFIG_NET_VENDOR_CORTINA=y
# CONFIG_CX_ECAT is not set
# CONFIG_DNET is not setCONFIG_NET_VENDOR_DEC=y
# CONFIG_NET_TULIP is not setCONFIG_NET_VENDOR_DLINK=y
# CONFIG_DL2K is not set
# CONFIG_SUNDANCE is not setCONFIG_NET_VENDOR_EMULEX=y
# CONFIG_BE2NET is not setCONFIG_NET_VENDOR_EZCHIP=yCONFIG_NET_VENDOR_FUJITSU=y
# CONFIG_PCMCIA_FMVJ18X is not setCONFIG_NET_VENDOR_GOOGLE=yCONFIG_NET_VENDOR_HUAWEI=yCONFIG_NET_VENDOR_I825XX=yCONFIG_NET_VENDOR_INTEL=y
# CONFIG_E100 is not setCONFIG_E1000=y
# CONFIG_E1000E is not set
# CONFIG_IGB is not set
# CONFIG_IGBVF is not set
# CONFIG_IXGB is not set
# CONFIG_IXGBE is not set
# CONFIG_I40E is not set
# CONFIG_IGC is not set
# CONFIG_JME is not setCONFIG_NET_VENDOR_MARVELL=y
# CONFIG_MVMDIO is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_PRESTERA is not setCONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_MLX4_EN is not set
# CONFIG_MLX5_CORE is not set
# CONFIG_MLXSW_CORE is not set
# CONFIG_MLXFW is not setCONFIG_NET_VENDOR_MICREL=y
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
# CONFIG_KSZ884X_PCI is not setCONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_ENC28J60 is not set
# CONFIG_ENCX24J600 is not set
# CONFIG_LAN743X is not setCONFIG_NET_VENDOR_MICROSEMI=yCONFIG_NET_VENDOR_MYRI=y
# CONFIG_MYRI10GE is not set
# CONFIG_FEALNX is not setCONFIG_NET_VENDOR_NATSEMI=y
# CONFIG_NATSEMI is not set
# CONFIG_NS83820 is not setCONFIG_NET_VENDOR_NETERION=y
# CONFIG_S2IO is not set
# CONFIG_VXGE is not setCONFIG_NET_VENDOR_NETRONOME=yCONFIG_NET_VENDOR_NI=y
# CONFIG_NI_XGE_MANAGEMENT_ENET is not setCONFIG_NET_VENDOR_8390=y
# CONFIG_PCMCIA_AXNET is not set
# CONFIG_NE2K_PCI is not set
# CONFIG_PCMCIA_PCNET is not setCONFIG_NET_VENDOR_NVIDIA=y
# CONFIG_FORCEDETH is not setCONFIG_NET_VENDOR_OKI=y
# CONFIG_ETHOC is not setCONFIG_NET_VENDOR_PACKET_ENGINES=y
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not setCONFIG_NET_VENDOR_PENSANDO=y
# CONFIG_IONIC is not setCONFIG_NET_VENDOR_QLOGIC=y
# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_NETXEN_NIC is not set
# CONFIG_QED is not setCONFIG_NET_VENDOR_QUALCOMM=y
# CONFIG_QCOM_EMAC is not set
# CONFIG_RMNET is not setCONFIG_NET_VENDOR_RDC=y
# CONFIG_R6040 is not setCONFIG_NET_VENDOR_REALTEK=y
# CONFIG_ATP is not set
# CONFIG_8139CP is not set
# CONFIG_8139TOO is not set
# CONFIG_R8169 is not setCONFIG_NET_VENDOR_RENESAS=yCONFIG_NET_VENDOR_ROCKER=yCONFIG_NET_VENDOR_SAMSUNG=y
# CONFIG_SXGBE_ETH is not setCONFIG_NET_VENDOR_SEEQ=yCONFIG_NET_VENDOR_SOLARFLARE=y
# CONFIG_SFC is not set
# CONFIG_SFC_FALCON is not setCONFIG_NET_VENDOR_SILAN=y
# CONFIG_SC92031 is not setCONFIG_NET_VENDOR_SIS=y
# CONFIG_SIS900 is not set
# CONFIG_SIS190 is not setCONFIG_NET_VENDOR_SMSC=y
# CONFIG_PCMCIA_SMC91C92 is not set
# CONFIG_EPIC100 is not set
# CONFIG_SMSC911X is not set
# CONFIG_SMSC9420 is not setCONFIG_NET_VENDOR_SOCIONEXT=yCONFIG_NET_VENDOR_STMICRO=y
# CONFIG_STMMAC_ETH is not setCONFIG_NET_VENDOR_SUN=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
# CONFIG_NIU is not setCONFIG_NET_VENDOR_SYNOPSYS=y
# CONFIG_DWC_XLGMAC is not setCONFIG_NET_VENDOR_TEHUTI=y
# CONFIG_TEHUTI is not setCONFIG_NET_VENDOR_TI=y
# CONFIG_TI_CPSW_PHY_SEL is not set
# CONFIG_TLAN is not setCONFIG_NET_VENDOR_VIA=y
# CONFIG_VIA_RHINE is not set
# CONFIG_VIA_VELOCITY is not setCONFIG_NET_VENDOR_WIZNET=y
# CONFIG_WIZNET_W5100 is not set
# CONFIG_WIZNET_W5300 is not setCONFIG_NET_VENDOR_XILINX=y
# CONFIG_XILINX_AXI_EMAC is not set
# CONFIG_XILINX_LL_TEMAC is not setCONFIG_NET_VENDOR_XIRCOM=y
# CONFIG_PCMCIA_XIRC2PS is not setCONFIG_FDDI=y
# CONFIG_DEFXX is not set
# CONFIG_SKFP is not set
# CONFIG_HIPPI is not set
# CONFIG_NET_SB1000 is not setCONFIG_PHYLINK=mCONFIG_PHYLIB=yCONFIG_SWPHY=y
# CONFIG_LED_TRIGGER_PHY is not setCONFIG_FIXED_PHY=y
# CONFIG_SFP is not set
#
# MII PHY device drivers
#
# CONFIG_AMD_PHY is not set
# CONFIG_ADIN_PHY is not set
# CONFIG_AQUANTIA_PHY is not setCONFIG_AX88796B_PHY=mCONFIG_BROADCOM_PHY=mCONFIG_BCM54140_PHY=yCONFIG_BCM7XXX_PHY=mCONFIG_BCM84881_PHY=y
# CONFIG_BCM87XX_PHY is not setCONFIG_BCM_NET_PHYLIB=yCONFIG_CICADA_PHY=m
# CONFIG_CORTINA_PHY is not set
# CONFIG_DAVICOM_PHY is not setCONFIG_ICPLUS_PHY=m
# CONFIG_LXT_PHY is not setCONFIG_INTEL_XWAY_PHY=mCONFIG_LSI_ET1011C_PHY=mCONFIG_MARVELL_PHY=mCONFIG_MARVELL_10G_PHY=yCONFIG_MICREL_PHY=m
# CONFIG_MICROCHIP_PHY is not setCONFIG_MICROCHIP_T1_PHY=mCONFIG_MICROSEMI_PHY=m
# CONFIG_NATIONAL_PHY is not set
# CONFIG_AT803X_PHY is not setCONFIG_QSEMI_PHY=yCONFIG_REALTEK_PHY=mCONFIG_RENESAS_PHY=mCONFIG_ROCKCHIP_PHY=yCONFIG_SMSC_PHY=m
# CONFIG_STE10XP is not setCONFIG_TERANETICS_PHY=m
# CONFIG_DP83822_PHY is not setCONFIG_DP83TC811_PHY=m
# CONFIG_DP83848_PHY is not set
# CONFIG_DP83867_PHY is not set
# CONFIG_DP83869_PHY is not setCONFIG_VITESSE_PHY=m
# CONFIG_XILINX_GMII2RGMII is not setCONFIG_MICREL_KS8995MA=yCONFIG_MDIO_DEVICE=yCONFIG_MDIO_BUS=yCONFIG_MDIO_DEVRES=y
# CONFIG_MDIO_BITBANG is not setCONFIG_MDIO_BCM_UNIMAC=y
# CONFIG_MDIO_MSCC_MIIM is not set
# CONFIG_MDIO_THUNDER is not set
#
# MDIO Multiplexers
#
#
# PCS device drivers
#CONFIG_PCS_XPCS=y
# end of PCS device drivers
# CONFIG_PLIP is not setCONFIG_PPP=yCONFIG_PPP_BSDCOMP=yCONFIG_PPP_DEFLATE=m
# CONFIG_PPP_FILTER is not setCONFIG_PPP_MPPE=yCONFIG_PPP_MULTILINK=yCONFIG_PPPOATM=mCONFIG_PPPOE=y
# CONFIG_PPTP is not setCONFIG_PPP_ASYNC=y
# CONFIG_PPP_SYNC_TTY is not setCONFIG_SLIP=mCONFIG_SLHC=yCONFIG_SLIP_COMPRESSED=y
# CONFIG_SLIP_SMART is not setCONFIG_SLIP_MODE_SLIP6=y
#
# Host-side USB support is needed for USB Network Adapter support #
# CONFIG_WLAN is not set
#
# WiMAX Wireless Broadband devices
#
#
# Enable USB support to see WiMAX USB drivers
#
# end of WiMAX Wireless Broadband devices
# CONFIG_WAN is not set
# CONFIG_XEN_NETDEV_FRONTEND is not setCONFIG_XEN_NETDEV_BACKEND=y
# CONFIG_VMXNET3 is not setCONFIG_FUJITSU_ES=mCONFIG_HYPERV_NET=yCONFIG_NETDEVSIM=mCONFIG_NET_FAILOVER=m
# CONFIG_ISDN is not set
# CONFIG_NVM is not set
#
# Input device support
#CONFIG_INPUT=yCONFIG_INPUT_LEDS=mCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_POLLDEV=yCONFIG_INPUT_SPARSEKMAP=mCONFIG_INPUT_MATRIXKMAP=y
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not setCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768CONFIG_INPUT_JOYDEV=mCONFIG_INPUT_EVDEV=yCONFIG_INPUT_EVBUG=y
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
# CONFIG_KEYBOARD_APPLESPI is not setCONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_QT1050 is not set
# CONFIG_KEYBOARD_QT1070 is not set
# CONFIG_KEYBOARD_QT2160 is not set
# CONFIG_KEYBOARD_DLINK_DIR685 is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_KEYBOARD_GPIO_POLLED is not set
# CONFIG_KEYBOARD_TCA6416 is not set
# CONFIG_KEYBOARD_TCA8418 is not set
# CONFIG_KEYBOARD_MATRIX is not set
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_LM8333 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_MCS is not set
# CONFIG_KEYBOARD_MPR121 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_SAMSUNG is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_IQS62X is not set
# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set
# CONFIG_KEYBOARD_TWL4030 is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_MTK_PMIC is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not setCONFIG_INPUT_MISC=yCONFIG_INPUT_88PM80X_ONKEY=mCONFIG_INPUT_AD714X=mCONFIG_INPUT_AD714X_I2C=mCONFIG_INPUT_AD714X_SPI=mCONFIG_INPUT_ARIZONA_HAPTICS=mCONFIG_INPUT_BMA150=mCONFIG_INPUT_E3X0_BUTTON=yCONFIG_INPUT_PCSPKR=mCONFIG_INPUT_MAX77693_HAPTIC=y
# CONFIG_INPUT_MAX8997_HAPTIC is not set
# CONFIG_INPUT_MC13783_PWRBUTTON is not set
# CONFIG_INPUT_MMA8450 is not setCONFIG_INPUT_APANEL=mCONFIG_INPUT_GPIO_BEEPER=mCONFIG_INPUT_GPIO_DECODER=mCONFIG_INPUT_GPIO_VIBRA=yCONFIG_INPUT_ATLAS_BTNS=y
# CONFIG_INPUT_ATI_REMOTE2 is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not setCONFIG_INPUT_KXTJ9=y
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_CM109 is not setCONFIG_INPUT_REGULATOR_HAPTIC=m
# CONFIG_INPUT_RETU_PWRBUTTON is not setCONFIG_INPUT_AXP20X_PEK=m
# CONFIG_INPUT_TWL4030_PWRBUTTON is not set
# CONFIG_INPUT_TWL4030_VIBRA is not set
# CONFIG_INPUT_TWL6040_VIBRA is not set
# CONFIG_INPUT_UINPUT is not setCONFIG_INPUT_PCF50633_PMU=y
# CONFIG_INPUT_PCF8574 is not set
# CONFIG_INPUT_PWM_BEEPER is not set
# CONFIG_INPUT_PWM_VIBRA is not setCONFIG_INPUT_GPIO_ROTARY_ENCODER=yCONFIG_INPUT_DA9052_ONKEY=m
# CONFIG_INPUT_DA9055_ONKEY is not set
# CONFIG_INPUT_DA9063_ONKEY is not set
# CONFIG_INPUT_WM831X_ON is not setCONFIG_INPUT_ADXL34X=y
# CONFIG_INPUT_ADXL34X_I2C is not setCONFIG_INPUT_ADXL34X_SPI=mCONFIG_INPUT_IQS269A=mCONFIG_INPUT_CMA3000=yCONFIG_INPUT_CMA3000_I2C=m
# CONFIG_INPUT_XEN_KBDDEV_FRONTEND is not set
# CONFIG_INPUT_IDEAPAD_SLIDEBAR is not setCONFIG_INPUT_DRV260X_HAPTICS=m
# CONFIG_INPUT_DRV2665_HAPTICS is not setCONFIG_INPUT_DRV2667_HAPTICS=yCONFIG_RMI4_CORE=m
# CONFIG_RMI4_I2C is not setCONFIG_RMI4_SPI=mCONFIG_RMI4_SMB=mCONFIG_RMI4_F03=yCONFIG_RMI4_F03_SERIO=mCONFIG_RMI4_2D_SENSOR=yCONFIG_RMI4_F11=yCONFIG_RMI4_F12=yCONFIG_RMI4_F30=y
# CONFIG_RMI4_F34 is not set
# CONFIG_RMI4_F3A is not set
# CONFIG_RMI4_F54 is not set
# CONFIG_RMI4_F55 is not set
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_ARCH_MIGHT_HAVE_PC_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=mCONFIG_SERIO_CT82C710=mCONFIG_SERIO_PARKBD=m
# CONFIG_SERIO_PCIPS2 is not setCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=m
# CONFIG_SERIO_ALTERA_PS2 is not set
# CONFIG_SERIO_PS2MULT is not setCONFIG_SERIO_ARC_PS2=mCONFIG_HYPERV_KEYBOARD=mCONFIG_SERIO_GPIO_PS2=mCONFIG_USERIO=mCONFIG_GAMEPORT=y
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_GAMEPORT_EMU10K1 is not set
# CONFIG_GAMEPORT_FM801 is not set
# end of Hardware I/O ports # end of Input device support
#
# Character devices
#CONFIG_TTY=yCONFIG_VT=yCONFIG_CONSOLE_TRANSLATIONS=yCONFIG_VT_CONSOLE=yCONFIG_VT_CONSOLE_SLEEP=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=yCONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not setCONFIG_LDISC_AUTOLOAD=y
#
# Serial drivers
#CONFIG_SERIAL_EARLYCON=yCONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_DEPRECATED_OPTIONS=yCONFIG_SERIAL_8250_PNP=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not setCONFIG_SERIAL_8250_FINTEK=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_SERIAL_8250_DMA=yCONFIG_SERIAL_8250_PCI=yCONFIG_SERIAL_8250_EXAR=yCONFIG_SERIAL_8250_CS=m
# CONFIG_SERIAL_8250_MEN_MCB is not setCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4CONFIG_SERIAL_8250_EXTENDED=yCONFIG_SERIAL_8250_MANY_PORTS=yCONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not setCONFIG_SERIAL_8250_RSA=yCONFIG_SERIAL_8250_DWLIB=yCONFIG_SERIAL_8250_DW=mCONFIG_SERIAL_8250_RT288X=yCONFIG_SERIAL_8250_LPSS=yCONFIG_SERIAL_8250_MID=y
#
# Non-8250 serial port support
#CONFIG_SERIAL_MAX3100=mCONFIG_SERIAL_MAX310X=yCONFIG_SERIAL_UARTLITE=mCONFIG_SERIAL_UARTLITE_NR_UARTS=1CONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not setCONFIG_SERIAL_LANTIQ=mCONFIG_SERIAL_SCCNXP=y
# CONFIG_SERIAL_SCCNXP_CONSOLE is not set
# CONFIG_SERIAL_SC16IS7XX is not setCONFIG_SERIAL_ALTERA_JTAGUART=m
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_IFX6X60 is not setCONFIG_SERIAL_ARC=mCONFIG_SERIAL_ARC_NR_PORTS=1
# CONFIG_SERIAL_RP2 is not setCONFIG_SERIAL_FSL_LPUART=mCONFIG_SERIAL_FSL_LINFLEXUART=yCONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=yCONFIG_SERIAL_MEN_Z135=m
# CONFIG_SERIAL_SPRD is not set
# end of Serial drivers
CONFIG_SERIAL_MCTRL_GPIO=yCONFIG_SERIAL_NONSTANDARD=y
# CONFIG_ROCKETPORT is not set
# CONFIG_CYCLADES is not setCONFIG_MOXA_INTELLIO=y
# CONFIG_MOXA_SMARTIO is not set
# CONFIG_SYNCLINK is not set
# CONFIG_SYNCLINKMP is not set
# CONFIG_SYNCLINK_GT is not set
# CONFIG_ISI is not setCONFIG_N_HDLC=y
# CONFIG_N_GSM is not set
# CONFIG_NOZOMI is not set
# CONFIG_NULL_TTY is not setCONFIG_TRACE_ROUTER=yCONFIG_TRACE_SINK=yCONFIG_HVC_DRIVER=y
# CONFIG_HVC_XEN is not set
# CONFIG_SERIAL_DEV_BUS is not set
# CONFIG_PRINTER is not setCONFIG_PPDEV=yCONFIG_VIRTIO_CONSOLE=mCONFIG_IPMI_HANDLER=yCONFIG_IPMI_DMI_DECODE=yCONFIG_IPMI_PLAT_DATA=yCONFIG_IPMI_PANIC_EVENT=yCONFIG_IPMI_PANIC_STRING=yCONFIG_IPMI_DEVICE_INTERFACE=mCONFIG_IPMI_SI=mCONFIG_IPMI_SSIF=mCONFIG_IPMI_WATCHDOG=yCONFIG_IPMI_POWEROFF=mCONFIG_IPMB_DEVICE_INTERFACE=m
# CONFIG_HW_RANDOM is not set
# CONFIG_APPLICOM is not set
#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not setCONFIG_CARDMAN_4000=mCONFIG_CARDMAN_4040=mCONFIG_SCR24X=m
# CONFIG_IPWIRELESS is not set
# end of PCMCIA character devices
CONFIG_MWAVE=mCONFIG_DEVMEM=y
# CONFIG_DEVKMEM is not setCONFIG_NVRAM=m
# CONFIG_RAW_DRIVER is not setCONFIG_DEVPORT=yCONFIG_HPET=yCONFIG_HPET_MMAP=yCONFIG_HPET_MMAP_DEFAULT=yCONFIG_HANGCHECK_TIMER=y
# CONFIG_TCG_TPM is not setCONFIG_TELCLOCK=y
# CONFIG_XILLYBUS is not set
# end of Character devices
# CONFIG_RANDOM_TRUST_CPU is not set
# CONFIG_RANDOM_TRUST_BOOTLOADER is not set
#
# I2C support
#CONFIG_I2C=yCONFIG_ACPI_I2C_OPREGION=yCONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_COMPAT is not set
# CONFIG_I2C_CHARDEV is not setCONFIG_I2C_MUX=y
#
# Multiplexer I2C Chip support
#CONFIG_I2C_MUX_GPIO=y
# CONFIG_I2C_MUX_LTC4306 is not setCONFIG_I2C_MUX_PCA9541=y
# CONFIG_I2C_MUX_PCA954x is not setCONFIG_I2C_MUX_REG=mCONFIG_I2C_MUX_MLXCPLD=y
# end of Multiplexer I2C Chip support
# CONFIG_I2C_HELPER_AUTO is not setCONFIG_I2C_SMBUS=y
#
# I2C Algorithms
#CONFIG_I2C_ALGOBIT=yCONFIG_I2C_ALGOPCF=mCONFIG_I2C_ALGOPCA=y
# end of I2C Algorithms
#
# I2C Hardware Bus support
#
#
# PC SMBus host controller drivers
#
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
# CONFIG_I2C_ALI15X3 is not set
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_AMD_MP2 is not set
# CONFIG_I2C_I801 is not set
# CONFIG_I2C_ISCH is not set
# CONFIG_I2C_ISMT is not set
# CONFIG_I2C_PIIX4 is not set
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_NVIDIA_GPU is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not set
# CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set
#
# ACPI drivers
#CONFIG_I2C_SCMI=y
#
# I2C system bus drivers (mostly embedded / system-on-chip) #
# CONFIG_I2C_CBUS_GPIO is not set CONFIG_I2C_DESIGNWARE_CORE=y CONFIG_I2C_DESIGNWARE_SLAVE=y CONFIG_I2C_DESIGNWARE_PLATFORM=y
# CONFIG_I2C_DESIGNWARE_PCI is not set CONFIG_I2C_EMEV2=m
# CONFIG_I2C_GPIO is not setCONFIG_I2C_OCORES=mCONFIG_I2C_PCA_PLATFORM=yCONFIG_I2C_SIMTEC=m
# CONFIG_I2C_XILINX is not set
#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT is not setCONFIG_I2C_TAOS_EVM=m
#
# Other I2C/SMBus bus drivers
#CONFIG_I2C_MLXCPLD=m
# end of I2C Hardware Bus support
# CONFIG_I2C_STUB is not setCONFIG_I2C_SLAVE=yCONFIG_I2C_SLAVE_EEPROM=m
# CONFIG_I2C_SLAVE_TESTUNIT is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# end of I2C support
CONFIG_I3C=y
# CONFIG_CDNS_I3C_MASTER is not set
# CONFIG_DW_I3C_MASTER is not setCONFIG_SPI=yCONFIG_SPI_DEBUG=yCONFIG_SPI_MASTER=yCONFIG_SPI_MEM=y
#
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not setCONFIG_SPI_AXI_SPI_ENGINE=yCONFIG_SPI_BITBANG=y
# CONFIG_SPI_BUTTERFLY is not set
# CONFIG_SPI_CADENCE is not setCONFIG_SPI_DESIGNWARE=mCONFIG_SPI_DW_DMA=y
# CONFIG_SPI_DW_PCI is not setCONFIG_SPI_DW_MMIO=m
# CONFIG_SPI_NXP_FLEXSPI is not set
# CONFIG_SPI_GPIO is not setCONFIG_SPI_LM70_LLP=yCONFIG_SPI_LANTIQ_SSC=yCONFIG_SPI_OC_TINY=y
# CONFIG_SPI_PXA2XX is not setCONFIG_SPI_ROCKCHIP=mCONFIG_SPI_SC18IS602=y
# CONFIG_SPI_SIFIVE is not set
# CONFIG_SPI_MXIC is not setCONFIG_SPI_XCOMM=yCONFIG_SPI_XILINX=mCONFIG_SPI_ZYNQMP_GQSPI=yCONFIG_SPI_AMD=y
#
# SPI Multiplexer support
#
# CONFIG_SPI_MUX is not set
#
# SPI Protocol Masters
#
# CONFIG_SPI_SPIDEV is not setCONFIG_SPI_LOOPBACK_TEST=mCONFIG_SPI_TLE62X0=yCONFIG_SPI_SLAVE=yCONFIG_SPI_SLAVE_TIME=mCONFIG_SPI_SLAVE_SYSTEM_CONTROL=mCONFIG_SPI_DYNAMIC=y
# CONFIG_SPMI is not setCONFIG_HSI=yCONFIG_HSI_BOARDINFO=y
#
# HSI controllers
#
#
# HSI clients
#CONFIG_HSI_CHAR=yCONFIG_PPS=y
# CONFIG_PPS_DEBUG is not set
# CONFIG_NTP_PPS is not set
#
# PPS clients support
#CONFIG_PPS_CLIENT_KTIMER=mCONFIG_PPS_CLIENT_LDISC=yCONFIG_PPS_CLIENT_PARPORT=yCONFIG_PPS_CLIENT_GPIO=m
#
# PPS generators support
#
#
# PTP clock support
#
# CONFIG_PTP_1588_CLOCK is not set
# end of PTP clock support
CONFIG_PINCTRL=yCONFIG_PINMUX=yCONFIG_PINCONF=yCONFIG_GENERIC_PINCONF=y
# CONFIG_DEBUG_PINCTRL is not setCONFIG_PINCTRL_AMD=yCONFIG_PINCTRL_DA9062=m
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_SX150X is not setCONFIG_PINCTRL_BAYTRAIL=yCONFIG_PINCTRL_CHERRYVIEW=mCONFIG_PINCTRL_LYNXPOINT=yCONFIG_PINCTRL_INTEL=yCONFIG_PINCTRL_BROXTON=mCONFIG_PINCTRL_CANNONLAKE=yCONFIG_PINCTRL_CEDARFORK=y
# CONFIG_PINCTRL_DENVERTON is not setCONFIG_PINCTRL_EMMITSBURG=yCONFIG_PINCTRL_GEMINILAKE=y
# CONFIG_PINCTRL_ICELAKE is not setCONFIG_PINCTRL_JASPERLAKE=m
# CONFIG_PINCTRL_LEWISBURG is not set
# CONFIG_PINCTRL_SUNRISEPOINT is not set
# CONFIG_PINCTRL_TIGERLAKE is not set
#
# Renesas pinctrl drivers
#
# end of Renesas pinctrl drivers
CONFIG_PINCTRL_MADERA=yCONFIG_PINCTRL_CS47L15=yCONFIG_PINCTRL_CS47L35=yCONFIG_GPIOLIB=yCONFIG_GPIOLIB_FASTPATH_LIMIT=512CONFIG_GPIO_ACPI=yCONFIG_GPIOLIB_IRQCHIP=yCONFIG_DEBUG_GPIO=yCONFIG_GPIO_SYSFS=yCONFIG_GPIO_CDEV=y
# CONFIG_GPIO_CDEV_V1 is not setCONFIG_GPIO_REGMAP=yCONFIG_GPIO_MAX730X=y
#
# Memory mapped GPIO drivers
#
# CONFIG_GPIO_AMDPT is not set
# CONFIG_GPIO_DWAPB is not set
# CONFIG_GPIO_EXAR is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
# CONFIG_GPIO_ICH is not setCONFIG_GPIO_MB86S7X=y
# CONFIG_GPIO_MENZ127 is not set
# CONFIG_GPIO_SIOX is not set
# CONFIG_GPIO_VX855 is not setCONFIG_GPIO_XILINX=mCONFIG_GPIO_AMD_FCH=m
# end of Memory mapped GPIO drivers
#
# Port-mapped I/O GPIO drivers
#CONFIG_GPIO_F7188X=y
# CONFIG_GPIO_IT87 is not set
# CONFIG_GPIO_SCH is not set
# CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_WINBOND is not setCONFIG_GPIO_WS16C48=m
# end of Port-mapped I/O GPIO drivers
#
# I2C GPIO expanders
#CONFIG_GPIO_ADP5588=y
# CONFIG_GPIO_ADP5588_IRQ is not setCONFIG_GPIO_MAX7300=yCONFIG_GPIO_MAX732X=mCONFIG_GPIO_PCA953X=mCONFIG_GPIO_PCA953X_IRQ=yCONFIG_GPIO_PCA9570=mCONFIG_GPIO_PCF857X=yCONFIG_GPIO_TPIC2810=y
# end of I2C GPIO expanders
#
# MFD GPIO expanders
#
# CONFIG_GPIO_ARIZONA is not setCONFIG_GPIO_CRYSTAL_COVE=m
# CONFIG_GPIO_DA9052 is not set
# CONFIG_GPIO_DA9055 is not set
# CONFIG_GPIO_LP3943 is not set
# CONFIG_GPIO_LP873X is not setCONFIG_GPIO_MADERA=mCONFIG_GPIO_SL28CPLD=yCONFIG_GPIO_TPS65086=m
# CONFIG_GPIO_TPS65910 is not set
# CONFIG_GPIO_TPS65912 is not setCONFIG_GPIO_TWL4030=yCONFIG_GPIO_TWL6040=mCONFIG_GPIO_UCB1400=m
# CONFIG_GPIO_WHISKEY_COVE is not set
# CONFIG_GPIO_WM831X is not setCONFIG_GPIO_WM8994=m
# end of MFD GPIO expanders
#
# PCI GPIO expanders
#
# CONFIG_GPIO_AMD8111 is not set
# CONFIG_GPIO_BT8XX is not set
# CONFIG_GPIO_ML_IOH is not set
# CONFIG_GPIO_PCI_IDIO_16 is not set
# CONFIG_GPIO_PCIE_IDIO_24 is not set
# CONFIG_GPIO_RDC321X is not set
# end of PCI GPIO expanders
#
# SPI GPIO expanders
#
# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7301 is not setCONFIG_GPIO_MC33880=y
# CONFIG_GPIO_PISOSR is not setCONFIG_GPIO_XRA1403=m
# end of SPI GPIO expanders
CONFIG_GPIO_AGGREGATOR=mCONFIG_GPIO_MOCKUP=mCONFIG_W1=y
# CONFIG_W1_CON is not set
#
# 1-wire Bus Masters
#
# CONFIG_W1_MASTER_MATROX is not setCONFIG_W1_MASTER_DS2482=y
# CONFIG_W1_MASTER_DS1WM is not setCONFIG_W1_MASTER_GPIO=mCONFIG_W1_MASTER_SGI=m
# end of 1-wire Bus Masters
#
# 1-wire Slaves
#CONFIG_W1_SLAVE_THERM=m
# CONFIG_W1_SLAVE_SMEM is not setCONFIG_W1_SLAVE_DS2405=yCONFIG_W1_SLAVE_DS2408=yCONFIG_W1_SLAVE_DS2408_READBACK=yCONFIG_W1_SLAVE_DS2413=mCONFIG_W1_SLAVE_DS2406=m
# CONFIG_W1_SLAVE_DS2423 is not setCONFIG_W1_SLAVE_DS2805=y
# CONFIG_W1_SLAVE_DS2430 is not set
# CONFIG_W1_SLAVE_DS2431 is not setCONFIG_W1_SLAVE_DS2433=mCONFIG_W1_SLAVE_DS2433_CRC=yCONFIG_W1_SLAVE_DS2438=mCONFIG_W1_SLAVE_DS250X=mCONFIG_W1_SLAVE_DS2780=yCONFIG_W1_SLAVE_DS2781=mCONFIG_W1_SLAVE_DS28E04=mCONFIG_W1_SLAVE_DS28E17=y
# end of 1-wire Slaves
CONFIG_POWER_RESET=y CONFIG_POWER_RESET_MT6323=y
# CONFIG_POWER_RESET_RESTART is not set CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set CONFIG_WM831X_BACKUP=y CONFIG_WM831X_POWER=y
# CONFIG_TEST_POWER is not set
# CONFIG_CHARGER_ADP5061 is not set
# CONFIG_BATTERY_CW2015 is not set
# CONFIG_BATTERY_DS2760 is not set CONFIG_BATTERY_DS2780=y CONFIG_BATTERY_DS2781=m CONFIG_BATTERY_DS2782=m CONFIG_BATTERY_SBS=yCONFIG_CHARGER_SBS=y
# CONFIG_MANAGER_SBS is not set CONFIG_BATTERY_BQ27XXX=m CONFIG_BATTERY_BQ27XXX_I2C=m CONFIG_BATTERY_BQ27XXX_HDQ=m CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM=y
# CONFIG_BATTERY_DA9030 is not set CONFIG_BATTERY_DA9052=y
# CONFIG_BATTERY_DA9150 is not set
# CONFIG_BATTERY_MAX17040 is not set
# CONFIG_BATTERY_MAX17042 is not set CONFIG_BATTERY_MAX1721X=y CONFIG_CHARGER_PCF50633=y
# CONFIG_CHARGER_MAX8903 is not set CONFIG_CHARGER_LP8727=m CONFIG_CHARGER_GPIO=y CONFIG_CHARGER_MANAGER=y CONFIG_CHARGER_LT3651=y CONFIG_CHARGER_MAX14577=y CONFIG_CHARGER_MAX8998=y
# CONFIG_CHARGER_BQ2415X is not set CONFIG_CHARGER_BQ24190=m CONFIG_CHARGER_BQ24257=y CONFIG_CHARGER_BQ24735=m
# CONFIG_CHARGER_BQ2515X is not set CONFIG_CHARGER_BQ25890=m
# CONFIG_CHARGER_BQ25980 is not set CONFIG_CHARGER_SMB347=m CONFIG_BATTERY_GAUGE_LTC2941=m CONFIG_BATTERY_RT5033=m
# CONFIG_CHARGER_RT9455 is not set CONFIG_CHARGER_BD99954=y
# CONFIG_HWMON is not setCONFIG_THERMAL=yCONFIG_THERMAL_NETLINK=y CONFIG_THERMAL_STATISTICS=y CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set CONFIG_THERMAL_GOV_FAIR_SHARE=y CONFIG_THERMAL_GOV_STEP_WISE=y CONFIG_THERMAL_GOV_BANG_BANG=y CONFIG_THERMAL_GOV_USER_SPACE=y
# CONFIG_THERMAL_EMULATION is not set
#
# Intel thermal drivers
#CONFIG_INTEL_POWERCLAMP=m
# CONFIG_INTEL_SOC_DTS_THERMAL is not set
#
# ACPI INT340X thermal drivers
#
# CONFIG_INT340X_THERMAL is not set
# end of ACPI INT340X thermal drivers
CONFIG_INTEL_BXT_PMIC_THERMAL=m
# CONFIG_INTEL_PCH_THERMAL is not set
# end of Intel thermal drivers
CONFIG_WATCHDOG=yCONFIG_WATCHDOG_CORE=y
# CONFIG_WATCHDOG_NOWAYOUT is not setCONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=yCONFIG_WATCHDOG_OPEN_TIMEOUT=0CONFIG_WATCHDOG_SYSFS=y
#
# Watchdog Pretimeout Governors
#CONFIG_WATCHDOG_PRETIMEOUT_GOV=y CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y
# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y
#
# Watchdog Device Drivers
#CONFIG_SOFT_WATCHDOG=m
# CONFIG_SOFT_WATCHDOG_PRETIMEOUT is not setCONFIG_DA9052_WATCHDOG=mCONFIG_DA9055_WATCHDOG=mCONFIG_DA9062_WATCHDOG=mCONFIG_MENF21BMC_WATCHDOG=m
# CONFIG_MENZ069_WATCHDOG is not setCONFIG_WDAT_WDT=yCONFIG_WM831X_WATCHDOG=y
# CONFIG_XILINX_WATCHDOG is not setCONFIG_ZIIRAVE_WATCHDOG=mCONFIG_MLX_WDT=mCONFIG_SL28CPLD_WATCHDOG=yCONFIG_CADENCE_WATCHDOG=yCONFIG_DW_WATCHDOG=m
# CONFIG_TWL4030_WATCHDOG is not set
# CONFIG_MAX63XX_WATCHDOG is not set
# CONFIG_RETU_WATCHDOG is not set
# CONFIG_ACQUIRE_WDT is not setCONFIG_ADVANTECH_WDT=m
# CONFIG_ALIM1535_WDT is not set
# CONFIG_ALIM7101_WDT is not setCONFIG_EBC_C384_WDT=y
# CONFIG_F71808E_WDT is not set
# CONFIG_SP5100_TCO is not setCONFIG_SBC_FITPC2_WATCHDOG=y
# CONFIG_EUROTECH_WDT is not setCONFIG_IB700_WDT=yCONFIG_IBMASR=y
# CONFIG_WAFER_WDT is not set
# CONFIG_I6300ESB_WDT is not set
# CONFIG_IE6XX_WDT is not set
# CONFIG_ITCO_WDT is not setCONFIG_IT8712F_WDT=m
# CONFIG_IT87_WDT is not set
# CONFIG_HP_WATCHDOG is not setCONFIG_SC1200_WDT=yCONFIG_PC87413_WDT=m
# CONFIG_NV_TCO is not setCONFIG_60XX_WDT=yCONFIG_CPU5_WDT=mCONFIG_SMSC_SCH311X_WDT=yCONFIG_SMSC37B787_WDT=mCONFIG_TQMX86_WDT=m
# CONFIG_VIA_WDT is not setCONFIG_W83627HF_WDT=yCONFIG_W83877F_WDT=y
# CONFIG_W83977F_WDT is not set
# CONFIG_MACHZ_WDT is not set
# CONFIG_SBC_EPX_C3_WATCHDOG is not setCONFIG_NI903X_WDT=m
# CONFIG_NIC7018_WDT is not set
# CONFIG_MEN_A21_WDT is not set
# CONFIG_XEN_WDT is not set
#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not setCONFIG_SSB_POSSIBLE=yCONFIG_SSB=mCONFIG_SSB_SPROM=yCONFIG_SSB_PCIHOST_POSSIBLE=yCONFIG_SSB_PCIHOST=yCONFIG_SSB_PCMCIAHOST_POSSIBLE=yCONFIG_SSB_PCMCIAHOST=yCONFIG_SSB_SDIOHOST_POSSIBLE=y
# CONFIG_SSB_SDIOHOST is not setCONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
# CONFIG_SSB_DRIVER_PCICORE is not set
# CONFIG_SSB_DRIVER_GPIO is not setCONFIG_BCMA_POSSIBLE=yCONFIG_BCMA=mCONFIG_BCMA_HOST_PCI_POSSIBLE=yCONFIG_BCMA_HOST_PCI=y
# CONFIG_BCMA_HOST_SOC is not setCONFIG_BCMA_DRIVER_PCI=y
# CONFIG_BCMA_DRIVER_GMAC_CMN is not setCONFIG_BCMA_DRIVER_GPIO=yCONFIG_BCMA_DEBUG=y
#
# Multifunction device drivers
#CONFIG_MFD_CORE=y
# CONFIG_MFD_AS3711 is not set
# CONFIG_PMIC_ADP5520 is not setCONFIG_MFD_AAT2870_CORE=yCONFIG_MFD_BCM590XX=y
# CONFIG_MFD_BD9571MWV is not setCONFIG_MFD_AXP20X=yCONFIG_MFD_AXP20X_I2C=yCONFIG_MFD_MADERA=yCONFIG_MFD_MADERA_I2C=mCONFIG_MFD_MADERA_SPI=mCONFIG_MFD_CS47L15=yCONFIG_MFD_CS47L35=y
# CONFIG_MFD_CS47L85 is not set
# CONFIG_MFD_CS47L90 is not set
# CONFIG_MFD_CS47L92 is not setCONFIG_PMIC_DA903X=yCONFIG_PMIC_DA9052=yCONFIG_MFD_DA9052_SPI=yCONFIG_MFD_DA9052_I2C=yCONFIG_MFD_DA9055=yCONFIG_MFD_DA9062=m
# CONFIG_MFD_DA9063 is not setCONFIG_MFD_DA9150=yCONFIG_MFD_MC13XXX=mCONFIG_MFD_MC13XXX_SPI=mCONFIG_MFD_MC13XXX_I2C=mCONFIG_MFD_MP2629=m
# CONFIG_HTC_PASIC3 is not set
# CONFIG_HTC_I2CPLD is not set
# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set
# CONFIG_LPC_ICH is not set
# CONFIG_LPC_SCH is not setCONFIG_INTEL_SOC_PMIC=yCONFIG_INTEL_SOC_PMIC_BXTWC=y
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
# CONFIG_INTEL_SOC_PMIC_CHTDC_TI is not set
# CONFIG_MFD_INTEL_LPSS_ACPI is not set
# CONFIG_MFD_INTEL_LPSS_PCI is not setCONFIG_MFD_INTEL_PMC_BXT=yCONFIG_MFD_IQS62X=m
# CONFIG_MFD_JANZ_CMODIO is not set
# CONFIG_MFD_KEMPLD is not setCONFIG_MFD_88PM800=mCONFIG_MFD_88PM805=m
# CONFIG_MFD_88PM860X is not setCONFIG_MFD_MAX14577=y
# CONFIG_MFD_MAX77693 is not setCONFIG_MFD_MAX77843=yCONFIG_MFD_MAX8907=m
# CONFIG_MFD_MAX8925 is not setCONFIG_MFD_MAX8997=yCONFIG_MFD_MAX8998=y
# CONFIG_MFD_MT6360 is not setCONFIG_MFD_MT6397=mCONFIG_MFD_MENF21BMC=m
# CONFIG_EZX_PCAP is not setCONFIG_MFD_RETU=mCONFIG_MFD_PCF50633=yCONFIG_PCF50633_ADC=mCONFIG_PCF50633_GPIO=mCONFIG_UCB1400_CORE=m
# CONFIG_MFD_RDC321X is not setCONFIG_MFD_RT5033=m
# CONFIG_MFD_RC5T583 is not setCONFIG_MFD_SEC_CORE=yCONFIG_MFD_SI476X_CORE=yCONFIG_MFD_SIMPLE_MFD_I2C=yCONFIG_MFD_SL28CPLD=yCONFIG_MFD_SM501=mCONFIG_MFD_SM501_GPIO=yCONFIG_MFD_SKY81452=mCONFIG_ABX500_CORE=y
# CONFIG_AB3100_CORE is not setCONFIG_MFD_SYSCON=yCONFIG_MFD_TI_AM335X_TSCADC=mCONFIG_MFD_LP3943=m
# CONFIG_MFD_LP8788 is not set
# CONFIG_MFD_TI_LMU is not set
# CONFIG_MFD_PALMAS is not setCONFIG_TPS6105X=m
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not setCONFIG_MFD_TPS65086=y
# CONFIG_MFD_TPS65090 is not set
# CONFIG_MFD_TPS68470 is not setCONFIG_MFD_TI_LP873X=m
# CONFIG_MFD_TPS6586X is not setCONFIG_MFD_TPS65910=yCONFIG_MFD_TPS65912=yCONFIG_MFD_TPS65912_I2C=yCONFIG_MFD_TPS65912_SPI=m
# CONFIG_MFD_TPS80031 is not setCONFIG_TWL4030_CORE=yCONFIG_MFD_TWL4030_AUDIO=yCONFIG_TWL6040_CORE=yCONFIG_MFD_WL1273_CORE=mCONFIG_MFD_LM3533=m
# CONFIG_MFD_TQMX86 is not set
# CONFIG_MFD_VX855 is not setCONFIG_MFD_ARIZONA=yCONFIG_MFD_ARIZONA_I2C=y
# CONFIG_MFD_ARIZONA_SPI is not setCONFIG_MFD_CS47L24=y
# CONFIG_MFD_WM5102 is not set
# CONFIG_MFD_WM5110 is not setCONFIG_MFD_WM8997=y
# CONFIG_MFD_WM8998 is not set
# CONFIG_MFD_WM8400 is not setCONFIG_MFD_WM831X=yCONFIG_MFD_WM831X_I2C=y
# CONFIG_MFD_WM831X_SPI is not set
# CONFIG_MFD_WM8350_I2C is not setCONFIG_MFD_WM8994=mCONFIG_MFD_WCD934X=mCONFIG_MFD_INTEL_M10_BMC=y
# end of Multifunction device drivers
CONFIG_REGULATOR=yCONFIG_REGULATOR_DEBUG=yCONFIG_REGULATOR_FIXED_VOLTAGE=mCONFIG_REGULATOR_VIRTUAL_CONSUMER=mCONFIG_REGULATOR_USERSPACE_CONSUMER=m
# CONFIG_REGULATOR_88PG86X is not set
# CONFIG_REGULATOR_88PM800 is not setCONFIG_REGULATOR_ACT8865=mCONFIG_REGULATOR_AD5398=mCONFIG_REGULATOR_AAT2870=m
# CONFIG_REGULATOR_ARIZONA_LDO1 is not setCONFIG_REGULATOR_ARIZONA_MICSUPP=mCONFIG_REGULATOR_AXP20X=yCONFIG_REGULATOR_BCM590XX=yCONFIG_REGULATOR_DA903X=yCONFIG_REGULATOR_DA9052=yCONFIG_REGULATOR_DA9055=yCONFIG_REGULATOR_DA9062=m
# CONFIG_REGULATOR_DA9210 is not set
# CONFIG_REGULATOR_DA9211 is not setCONFIG_REGULATOR_FAN53555=m
# CONFIG_REGULATOR_GPIO is not setCONFIG_REGULATOR_ISL9305=yCONFIG_REGULATOR_ISL6271A=m
# CONFIG_REGULATOR_LP3971 is not setCONFIG_REGULATOR_LP3972=mCONFIG_REGULATOR_LP872X=y
# CONFIG_REGULATOR_LP8755 is not set
# CONFIG_REGULATOR_LTC3589 is not setCONFIG_REGULATOR_LTC3676=mCONFIG_REGULATOR_MAX14577=m
# CONFIG_REGULATOR_MAX1586 is not set
# CONFIG_REGULATOR_MAX8649 is not setCONFIG_REGULATOR_MAX8660=mCONFIG_REGULATOR_MAX8907=m
# CONFIG_REGULATOR_MAX8952 is not set
# CONFIG_REGULATOR_MAX8997 is not setCONFIG_REGULATOR_MAX8998=yCONFIG_REGULATOR_MAX77693=yCONFIG_REGULATOR_MAX77826=mCONFIG_REGULATOR_MC13XXX_CORE=mCONFIG_REGULATOR_MC13783=mCONFIG_REGULATOR_MC13892=m
# CONFIG_REGULATOR_MP8859 is not setCONFIG_REGULATOR_MT6311=mCONFIG_REGULATOR_MT6323=mCONFIG_REGULATOR_MT6358=mCONFIG_REGULATOR_MT6397=mCONFIG_REGULATOR_PCA9450=mCONFIG_REGULATOR_PCF50633=yCONFIG_REGULATOR_PFUZE100=mCONFIG_REGULATOR_PV88060=yCONFIG_REGULATOR_PV88080=mCONFIG_REGULATOR_PV88090=m
# CONFIG_REGULATOR_PWM is not setCONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=mCONFIG_REGULATOR_RT4801=yCONFIG_REGULATOR_RT5033=m
# CONFIG_REGULATOR_RTMV20 is not set
# CONFIG_REGULATOR_S2MPA01 is not setCONFIG_REGULATOR_S2MPS11=yCONFIG_REGULATOR_S5M8767=y
# CONFIG_REGULATOR_SKY81452 is not setCONFIG_REGULATOR_SLG51000=mCONFIG_REGULATOR_TPS51632=mCONFIG_REGULATOR_TPS6105X=mCONFIG_REGULATOR_TPS62360=yCONFIG_REGULATOR_TPS65023=mCONFIG_REGULATOR_TPS6507X=yCONFIG_REGULATOR_TPS65086=yCONFIG_REGULATOR_TPS65132=y
# CONFIG_REGULATOR_TPS6524X is not set
# CONFIG_REGULATOR_TPS65910 is not setCONFIG_REGULATOR_TPS65912=yCONFIG_REGULATOR_TWL4030=yCONFIG_REGULATOR_WM831X=yCONFIG_REGULATOR_WM8994=m
# CONFIG_RC_CORE is not set
# CONFIG_MEDIA_CEC_SUPPORT is not setCONFIG_MEDIA_SUPPORT=y
# CONFIG_MEDIA_SUPPORT_FILTER is not setCONFIG_MEDIA_SUBDRV_AUTOSELECT=y
#
# Media device types
#CONFIG_MEDIA_CAMERA_SUPPORT=yCONFIG_MEDIA_ANALOG_TV_SUPPORT=yCONFIG_MEDIA_DIGITAL_TV_SUPPORT=yCONFIG_MEDIA_RADIO_SUPPORT=yCONFIG_MEDIA_SDR_SUPPORT=yCONFIG_MEDIA_PLATFORM_SUPPORT=yCONFIG_MEDIA_TEST_SUPPORT=y
# end of Media device types
#
# Media core support
#CONFIG_VIDEO_DEV=yCONFIG_MEDIA_CONTROLLER=yCONFIG_DVB_CORE=y
# end of Media core support
#
# Video4Linux options
#CONFIG_VIDEO_V4L2=yCONFIG_VIDEO_V4L2_I2C=yCONFIG_VIDEO_V4L2_SUBDEV_API=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
# CONFIG_V4L2_FLASH_LED_CLASS is not setCONFIG_V4L2_FWNODE=y
# end of Video4Linux options
#
# Media controller options
#
# CONFIG_MEDIA_CONTROLLER_DVB is not set
# end of Media controller options
#
# Digital TV options
#
# CONFIG_DVB_MMAP is not setCONFIG_DVB_NET=yCONFIG_DVB_MAX_ADAPTERS=16CONFIG_DVB_DYNAMIC_MINORS=y
# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set
# CONFIG_DVB_ULE_DEBUG is not set
# end of Digital TV options
#
# Media drivers
#
# CONFIG_MEDIA_PCI_SUPPORT is not set
# CONFIG_RADIO_ADAPTERS is not setCONFIG_MEDIA_COMMON_OPTIONS=y
#
# common driver options # CONFIG_SMS_SIANO_MDTV=m # CONFIG_V4L_PLATFORM_DRIVERS is not set # CONFIG_V4L_MEM2MEM_DRIVERS is not set # CONFIG_DVB_PLATFORM_DRIVERS is not set CONFIG_SDR_PLATFORM_DRIVERS=y
#
# MMC/SDIO DVB adapters
#CONFIG_SMS_SDIO_DRV=m
# CONFIG_V4L_TEST_DRIVERS is not set
# CONFIG_DVB_TEST_DRIVERS is not set
#
# FireWire (IEEE 1394) Adapters
#
# CONFIG_DVB_FIREDTV is not set
# end of Media drivers
CONFIG_MEDIA_HIDE_ANCILLARY_SUBDRV=y
#
# Media ancillary drivers
#CONFIG_MEDIA_ATTACH=y
#
# audio, video and radio I2C drivers auto-selected by 'Autoselect ancillary drivers' #
#
# Video and audio decoders
#
#
# Camera sensor devices
#CONFIG_VIDEO_APTINA_PLL=yCONFIG_VIDEO_SMIAPP_PLL=mCONFIG_VIDEO_HI556=mCONFIG_VIDEO_IMX214=mCONFIG_VIDEO_IMX219=m
# CONFIG_VIDEO_IMX258 is not setCONFIG_VIDEO_IMX274=mCONFIG_VIDEO_IMX290=mCONFIG_VIDEO_IMX319=y
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_OV2640 is not setCONFIG_VIDEO_OV2659=yCONFIG_VIDEO_OV2680=mCONFIG_VIDEO_OV2685=mCONFIG_VIDEO_OV2740=y
# CONFIG_VIDEO_OV5647 is not set
# CONFIG_VIDEO_OV6650 is not setCONFIG_VIDEO_OV5670=y
# CONFIG_VIDEO_OV5675 is not set
# CONFIG_VIDEO_OV5695 is not set
# CONFIG_VIDEO_OV7251 is not setCONFIG_VIDEO_OV772X=m
# CONFIG_VIDEO_OV7640 is not setCONFIG_VIDEO_OV7670=mCONFIG_VIDEO_OV7740=mCONFIG_VIDEO_OV8856=m
# CONFIG_VIDEO_OV9640 is not set
# CONFIG_VIDEO_OV9650 is not setCONFIG_VIDEO_OV13858=mCONFIG_VIDEO_VS6624=yCONFIG_VIDEO_MT9M001=yCONFIG_VIDEO_MT9M032=mCONFIG_VIDEO_MT9M111=yCONFIG_VIDEO_MT9P031=y
# CONFIG_VIDEO_MT9T001 is not setCONFIG_VIDEO_MT9T112=mCONFIG_VIDEO_MT9V011=mCONFIG_VIDEO_MT9V032=yCONFIG_VIDEO_MT9V111=yCONFIG_VIDEO_SR030PC30=yCONFIG_VIDEO_NOON010PC30=mCONFIG_VIDEO_M5MOLS=m
# CONFIG_VIDEO_RDACM20 is not set
# CONFIG_VIDEO_RJ54N1 is not set
# CONFIG_VIDEO_S5K6AA is not setCONFIG_VIDEO_S5K6A3=mCONFIG_VIDEO_S5K4ECGX=m
# CONFIG_VIDEO_S5K5BAF is not setCONFIG_VIDEO_SMIAPP=mCONFIG_VIDEO_ET8EK8=mCONFIG_VIDEO_S5C73M3=m
# end of Camera sensor devices
#
# Lens drivers
#CONFIG_VIDEO_AD5820=m
# CONFIG_VIDEO_AK7375 is not setCONFIG_VIDEO_DW9714=m
# CONFIG_VIDEO_DW9768 is not set
# CONFIG_VIDEO_DW9807_VCM is not set
# end of Lens drivers
#
# Flash devices
#
# CONFIG_VIDEO_ADP1653 is not set
# CONFIG_VIDEO_LM3560 is not setCONFIG_VIDEO_LM3646=m
# end of Flash devices
#
# SPI I2C drivers auto-selected by 'Autoselect ancillary drivers' #
#
# Media SPI Adapters
#CONFIG_CXD2880_SPI_DRV=y
# end of Media SPI Adapters
CONFIG_MEDIA_TUNER=y
#
# Tuner drivers auto-selected by 'Autoselect ancillary drivers' #CONFIG_MEDIA_TUNER_SIMPLE=y CONFIG_MEDIA_TUNER_TDA8290=y CONFIG_MEDIA_TUNER_TDA827X=y CONFIG_MEDIA_TUNER_TDA18271=y CONFIG_MEDIA_TUNER_TDA9887=y CONFIG_MEDIA_TUNER_TEA5761=y CONFIG_MEDIA_TUNER_TEA5767=y CONFIG_MEDIA_TUNER_MT20XX=y CONFIG_MEDIA_TUNER_XC2028=y CONFIG_MEDIA_TUNER_XC5000=y CONFIG_MEDIA_TUNER_XC4000=y CONFIG_MEDIA_TUNER_MC44S803=y
#
# DVB Frontend drivers auto-selected by 'Autoselect ancillary drivers' #
#
# Multistandard (satellite) frontends
#
#
# Multistandard (cable + terrestrial) frontends
#
#
# DVB-S (satellite) frontends
#
#
# DVB-T (terrestrial) frontends
#
#
# DVB-C (cable) frontends
#
#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends #
#
# ISDB-T (terrestrial) frontends
#
#
# ISDB-S (satellite) & ISDB-T (terrestrial) frontends #
#
# Digital terrestrial only tuners/PLL
#
#
# SEC control devices for DVB-S
#
#
# Common Interface (EN50221) controller drivers
#
#
# Tools to develop new frontends
#CONFIG_DVB_DUMMY_FE=m
# end of Media ancillary drivers
#
# Graphics support
#
# CONFIG_AGP is not setCONFIG_VGA_ARB=yCONFIG_VGA_ARB_MAX_GPUS=16
# CONFIG_VGA_SWITCHEROO is not set
# CONFIG_DRM is not set
#
# ARM devices
#
# end of ARM devices
CONFIG_DRM_XEN=y
#
# Frame buffer Devices
#CONFIG_FB_CMDLINE=yCONFIG_FB_NOTIFY=yCONFIG_FB=yCONFIG_FIRMWARE_EDID=yCONFIG_FB_BOOT_VESA_SUPPORT=yCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=yCONFIG_FB_SYS_FILLRECT=yCONFIG_FB_SYS_COPYAREA=yCONFIG_FB_SYS_IMAGEBLIT=yCONFIG_FB_FOREIGN_ENDIAN=y
# CONFIG_FB_BOTH_ENDIAN is not set
# CONFIG_FB_BIG_ENDIAN is not setCONFIG_FB_LITTLE_ENDIAN=yCONFIG_FB_SYS_FOPS=yCONFIG_FB_DEFERRED_IO=yCONFIG_FB_BACKLIGHT=mCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not set
# CONFIG_FB_UVESA is not setCONFIG_FB_VESA=y
# CONFIG_FB_EFI is not set
# CONFIG_FB_N411 is not setCONFIG_FB_HGA=yCONFIG_FB_OPENCORES=yCONFIG_FB_S1D13XXX=y
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not set
# CONFIG_FB_I740 is not set
# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_VIA is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_VT8623 is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_ARK is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_CARMINE is not setCONFIG_FB_SM501=mCONFIG_FB_IBM_GXT4500=m
# CONFIG_FB_VIRTUAL is not setCONFIG_XEN_FBDEV_FRONTEND=mCONFIG_FB_METRONOME=y
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_HYPERV is not setCONFIG_FB_SIMPLE=y
# CONFIG_FB_SM712 is not set
# end of Frame buffer Devices
#
# Backlight & LCD device support
#CONFIG_LCD_CLASS_DEVICE=y
# CONFIG_LCD_L4F00242T03 is not set
# CONFIG_LCD_LMS283GF05 is not setCONFIG_LCD_LTV350QV=yCONFIG_LCD_ILI922X=mCONFIG_LCD_ILI9320=mCONFIG_LCD_TDO24M=mCONFIG_LCD_VGG2432A4=mCONFIG_LCD_PLATFORM=yCONFIG_LCD_AMS369FG06=m
# CONFIG_LCD_LMS501KF03 is not setCONFIG_LCD_HX8357=mCONFIG_LCD_OTM3225A=yCONFIG_BACKLIGHT_CLASS_DEVICE=m
# CONFIG_BACKLIGHT_KTD253 is not set
# CONFIG_BACKLIGHT_LM3533 is not set
# CONFIG_BACKLIGHT_PWM is not setCONFIG_BACKLIGHT_DA903X=mCONFIG_BACKLIGHT_DA9052=mCONFIG_BACKLIGHT_APPLE=mCONFIG_BACKLIGHT_QCOM_WLED=m
# CONFIG_BACKLIGHT_SAHARA is not setCONFIG_BACKLIGHT_WM831X=mCONFIG_BACKLIGHT_ADP8860=m
# CONFIG_BACKLIGHT_ADP8870 is not set
# CONFIG_BACKLIGHT_PCF50633 is not set
# CONFIG_BACKLIGHT_AAT2870 is not setCONFIG_BACKLIGHT_LM3630A=mCONFIG_BACKLIGHT_LM3639=m
# CONFIG_BACKLIGHT_LP855X is not set
# CONFIG_BACKLIGHT_PANDORA is not setCONFIG_BACKLIGHT_SKY81452=m
# CONFIG_BACKLIGHT_GPIO is not set
# CONFIG_BACKLIGHT_LV5207LP is not setCONFIG_BACKLIGHT_BD6107=m
# CONFIG_BACKLIGHT_ARCXCNN is not set
# end of Backlight & LCD device support
#
# Console display driver support
#CONFIG_VGA_CONSOLE=yCONFIG_DUMMY_CONSOLE=yCONFIG_DUMMY_CONSOLE_COLUMNS=80CONFIG_DUMMY_CONSOLE_ROWS=25CONFIG_FRAMEBUFFER_CONSOLE=yCONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not setCONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
# end of Console display driver support
# CONFIG_LOGO is not set
# end of Graphics support
CONFIG_SOUND=mCONFIG_SND=mCONFIG_SND_TIMER=mCONFIG_SND_PCM=mCONFIG_SND_DMAENGINE_PCM=mCONFIG_SND_HWDEP=mCONFIG_SND_SEQ_DEVICE=mCONFIG_SND_RAWMIDI=mCONFIG_SND_JACK=yCONFIG_SND_JACK_INPUT_DEV=y
# CONFIG_SND_OSSEMUL is not setCONFIG_SND_PCM_TIMER=y
# CONFIG_SND_HRTIMER is not setCONFIG_SND_DYNAMIC_MINORS=yCONFIG_SND_MAX_CARDS=32
# CONFIG_SND_SUPPORT_OLD_API is not setCONFIG_SND_PROC_FS=y
# CONFIG_SND_VERBOSE_PROCFS is not setCONFIG_SND_VERBOSE_PRINTK=yCONFIG_SND_DEBUG=yCONFIG_SND_DEBUG_VERBOSE=y
# CONFIG_SND_CTL_VALIDATION is not setCONFIG_SND_VMASTER=yCONFIG_SND_DMA_SGBUF=yCONFIG_SND_SEQUENCER=mCONFIG_SND_SEQ_DUMMY=mCONFIG_SND_SEQ_MIDI_EVENT=mCONFIG_SND_SEQ_MIDI=mCONFIG_SND_SEQ_VIRMIDI=mCONFIG_SND_MPU401_UART=mCONFIG_SND_AC97_CODEC=mCONFIG_SND_DRIVERS=yCONFIG_SND_PCSP=mCONFIG_SND_DUMMY=m
# CONFIG_SND_ALOOP is not setCONFIG_SND_VIRMIDI=mCONFIG_SND_MTPAV=m
# CONFIG_SND_MTS64 is not set
# CONFIG_SND_SERIAL_U16550 is not setCONFIG_SND_MPU401=m
# CONFIG_SND_PORTMAN2X4 is not set
# CONFIG_SND_AC97_POWER_SAVE is not setCONFIG_SND_PCI=y
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALS300 is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ASIHPI is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AW2 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_OXYGEN is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CTXFI is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not set
# CONFIG_SND_GINA24 is not set
# CONFIG_SND_LAYLA24 is not set
# CONFIG_SND_MONA is not set
# CONFIG_SND_MIA is not set
# CONFIG_SND_ECHO3G is not set
# CONFIG_SND_INDIGO is not set
# CONFIG_SND_INDIGOIO is not set
# CONFIG_SND_INDIGODJ is not set
# CONFIG_SND_INDIGOIOX is not set
# CONFIG_SND_INDIGODJX is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_LOLA is not set
# CONFIG_SND_LX6464ES is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RIPTIDE is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SE6X is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VIRTUOSO is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not set
#
# HD-Audio
#
# CONFIG_SND_HDA_INTEL is not set
# end of HD-Audio
CONFIG_SND_HDA_PREALLOC_SIZE=2048 CONFIG_SND_SPI=yCONFIG_SND_FIREWIRE=y CONFIG_SND_FIREWIRE_LIB=m
# CONFIG_SND_DICE is not set CONFIG_SND_OXFW=mCONFIG_SND_ISIGHT=mCONFIG_SND_FIREWORKS=mCONFIG_SND_BEBOB=m
# CONFIG_SND_FIREWIRE_DIGI00X is not set CONFIG_SND_FIREWIRE_TASCAM=m CONFIG_SND_FIREWIRE_MOTU=m
# CONFIG_SND_FIREFACE is not set CONFIG_SND_PCMCIA=y
# CONFIG_SND_VXPOCKET is not set CONFIG_SND_PDAUDIOCF=mCONFIG_SND_SOC=mCONFIG_SND_SOC_AC97_BUS=y CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y CONFIG_SND_SOC_AMD_ACP=m
# CONFIG_SND_SOC_AMD_CZ_DA7219MX98357_MACH is not set CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_RENOIR is not set CONFIG_SND_ATMEL_SOC=m
# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set CONFIG_SND_DESIGNWARE_I2S=m
# CONFIG_SND_DESIGNWARE_PCM is not set
#
# SoC Audio for Freescale CPUs
#
#
# Common SoC Audio options for Freescale CPUs:
#CONFIG_SND_SOC_FSL_ASRC=mCONFIG_SND_SOC_FSL_SAI=mCONFIG_SND_SOC_FSL_MQS=mCONFIG_SND_SOC_FSL_AUDMIX=mCONFIG_SND_SOC_FSL_SSI=mCONFIG_SND_SOC_FSL_SPDIF=mCONFIG_SND_SOC_FSL_ESAI=mCONFIG_SND_SOC_FSL_MICFIL=m
# CONFIG_SND_SOC_FSL_EASRC is not setCONFIG_SND_SOC_IMX_AUDMUX=m
# end of SoC Audio for Freescale CPUs
CONFIG_SND_I2S_HI6210_I2S=m CONFIG_SND_SOC_IMG=y CONFIG_SND_SOC_IMG_I2S_IN=m
# CONFIG_SND_SOC_IMG_I2S_OUT is not set
# CONFIG_SND_SOC_IMG_PARALLEL_OUT is not set # CONFIG_SND_SOC_IMG_SPDIF_IN is not set CONFIG_SND_SOC_IMG_SPDIF_OUT=m
# CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC is not set # CONFIG_SND_SOC_INTEL_SST_TOPLEVEL is not set # CONFIG_SND_SOC_MTK_BTCVSD is not set
# CONFIG_SND_SOC_SOF_TOPLEVEL is not set
#
# STMicroelectronics STM32 SOC audio support
#
# end of STMicroelectronics STM32 SOC audio support
CONFIG_SND_SOC_XILINX_I2S=m
# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set CONFIG_SND_SOC_XILINX_SPDIF=m CONFIG_SND_SOC_XTFPGA_I2S=m CONFIG_ZX_TDM=m CONFIG_SND_SOC_I2C_AND_SPI=m
#
# CODEC drivers
#CONFIG_SND_SOC_AC97_CODEC=mCONFIG_SND_SOC_ADAU_UTILS=m
# CONFIG_SND_SOC_ADAU1701 is not setCONFIG_SND_SOC_ADAU17X1=mCONFIG_SND_SOC_ADAU1761=mCONFIG_SND_SOC_ADAU1761_I2C=mCONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ADAU7002 is not setCONFIG_SND_SOC_ADAU7118=m
# CONFIG_SND_SOC_ADAU7118_HW is not setCONFIG_SND_SOC_ADAU7118_I2C=mCONFIG_SND_SOC_AK4104=mCONFIG_SND_SOC_AK4118=m
# CONFIG_SND_SOC_AK4458 is not set
# CONFIG_SND_SOC_AK4554 is not set
# CONFIG_SND_SOC_AK4613 is not setCONFIG_SND_SOC_AK4642=mCONFIG_SND_SOC_AK5386=m
# CONFIG_SND_SOC_AK5558 is not set
# CONFIG_SND_SOC_ALC5623 is not setCONFIG_SND_SOC_BD28623=m
# CONFIG_SND_SOC_BT_SCO is not setCONFIG_SND_SOC_CS35L32=m
# CONFIG_SND_SOC_CS35L33 is not set
# CONFIG_SND_SOC_CS35L34 is not setCONFIG_SND_SOC_CS35L35=mCONFIG_SND_SOC_CS35L36=mCONFIG_SND_SOC_CS42L42=mCONFIG_SND_SOC_CS42L51=mCONFIG_SND_SOC_CS42L51_I2C=mCONFIG_SND_SOC_CS42L52=m
# CONFIG_SND_SOC_CS42L56 is not setCONFIG_SND_SOC_CS42L73=m
# CONFIG_SND_SOC_CS4234 is not setCONFIG_SND_SOC_CS4265=m
# CONFIG_SND_SOC_CS4270 is not set
# CONFIG_SND_SOC_CS4271_I2C is not set
# CONFIG_SND_SOC_CS4271_SPI is not setCONFIG_SND_SOC_CS42XX8=mCONFIG_SND_SOC_CS42XX8_I2C=m
# CONFIG_SND_SOC_CS43130 is not set
# CONFIG_SND_SOC_CS4341 is not set
# CONFIG_SND_SOC_CS4349 is not setCONFIG_SND_SOC_CS53L30=mCONFIG_SND_SOC_CX2072X=mCONFIG_SND_SOC_DA7213=mCONFIG_SND_SOC_DMIC=mCONFIG_SND_SOC_ES7134=mCONFIG_SND_SOC_ES7241=mCONFIG_SND_SOC_ES8316=mCONFIG_SND_SOC_ES8328=m
# CONFIG_SND_SOC_ES8328_I2C is not setCONFIG_SND_SOC_ES8328_SPI=mCONFIG_SND_SOC_GTM601=mCONFIG_SND_SOC_INNO_RK3036=mCONFIG_SND_SOC_MAX98088=mCONFIG_SND_SOC_MAX98357A=mCONFIG_SND_SOC_MAX98504=mCONFIG_SND_SOC_MAX9867=mCONFIG_SND_SOC_MAX98927=mCONFIG_SND_SOC_MAX98373=m
# CONFIG_SND_SOC_MAX98373_I2C is not setCONFIG_SND_SOC_MAX98373_SDW=mCONFIG_SND_SOC_MAX98390=mCONFIG_SND_SOC_MAX9860=mCONFIG_SND_SOC_MSM8916_WCD_DIGITAL=mCONFIG_SND_SOC_PCM1681=mCONFIG_SND_SOC_PCM1789=mCONFIG_SND_SOC_PCM1789_I2C=mCONFIG_SND_SOC_PCM179X=m
# CONFIG_SND_SOC_PCM179X_I2C is not setCONFIG_SND_SOC_PCM179X_SPI=mCONFIG_SND_SOC_PCM186X=m
# CONFIG_SND_SOC_PCM186X_I2C is not setCONFIG_SND_SOC_PCM186X_SPI=m
# CONFIG_SND_SOC_PCM3060_I2C is not set
# CONFIG_SND_SOC_PCM3060_SPI is not setCONFIG_SND_SOC_PCM3168A=mCONFIG_SND_SOC_PCM3168A_I2C=mCONFIG_SND_SOC_PCM3168A_SPI=m
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_I2C=m
# CONFIG_SND_SOC_PCM512x_SPI is not setCONFIG_SND_SOC_RK3328=mCONFIG_SND_SOC_RL6231=mCONFIG_SND_SOC_RT1308_SDW=mCONFIG_SND_SOC_RT5616=m
# CONFIG_SND_SOC_RT5631 is not setCONFIG_SND_SOC_RT5645=mCONFIG_SND_SOC_RT5682=mCONFIG_SND_SOC_RT5682_SDW=mCONFIG_SND_SOC_RT700=mCONFIG_SND_SOC_RT700_SDW=mCONFIG_SND_SOC_RT711=mCONFIG_SND_SOC_RT711_SDW=m
# CONFIG_SND_SOC_RT715_SDW is not setCONFIG_SND_SOC_SGTL5000=mCONFIG_SND_SOC_SIGMADSP=mCONFIG_SND_SOC_SIGMADSP_REGMAP=m
# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not setCONFIG_SND_SOC_SIRF_AUDIO_CODEC=mCONFIG_SND_SOC_SPDIF=mCONFIG_SND_SOC_SSM2305=mCONFIG_SND_SOC_SSM2602=mCONFIG_SND_SOC_SSM2602_SPI=m
# CONFIG_SND_SOC_SSM2602_I2C is not setCONFIG_SND_SOC_SSM4567=m
# CONFIG_SND_SOC_STA32X is not setCONFIG_SND_SOC_STA350=mCONFIG_SND_SOC_STI_SAS=mCONFIG_SND_SOC_TAS2552=mCONFIG_SND_SOC_TAS2562=mCONFIG_SND_SOC_TAS2764=m
# CONFIG_SND_SOC_TAS2770 is not setCONFIG_SND_SOC_TAS5086=mCONFIG_SND_SOC_TAS571X=m
# CONFIG_SND_SOC_TAS5720 is not set
# CONFIG_SND_SOC_TAS6424 is not set
# CONFIG_SND_SOC_TDA7419 is not setCONFIG_SND_SOC_TFA9879=mCONFIG_SND_SOC_TLV320AIC23=mCONFIG_SND_SOC_TLV320AIC23_I2C=mCONFIG_SND_SOC_TLV320AIC23_SPI=m
# CONFIG_SND_SOC_TLV320AIC31XX is not setCONFIG_SND_SOC_TLV320AIC32X4=mCONFIG_SND_SOC_TLV320AIC32X4_I2C=mCONFIG_SND_SOC_TLV320AIC32X4_SPI=mCONFIG_SND_SOC_TLV320AIC3X=mCONFIG_SND_SOC_TLV320ADCX140=mCONFIG_SND_SOC_TS3A227E=m
# CONFIG_SND_SOC_TSCS42XX is not setCONFIG_SND_SOC_TSCS454=mCONFIG_SND_SOC_UDA1334=mCONFIG_SND_SOC_WCD9335=mCONFIG_SND_SOC_WCD934X=mCONFIG_SND_SOC_WM8510=m
# CONFIG_SND_SOC_WM8523 is not setCONFIG_SND_SOC_WM8524=m
# CONFIG_SND_SOC_WM8580 is not set
# CONFIG_SND_SOC_WM8711 is not setCONFIG_SND_SOC_WM8728=mCONFIG_SND_SOC_WM8731=mCONFIG_SND_SOC_WM8737=m
# CONFIG_SND_SOC_WM8741 is not setCONFIG_SND_SOC_WM8750=m
# CONFIG_SND_SOC_WM8753 is not set
# CONFIG_SND_SOC_WM8770 is not setCONFIG_SND_SOC_WM8776=m
# CONFIG_SND_SOC_WM8782 is not setCONFIG_SND_SOC_WM8804=m
# CONFIG_SND_SOC_WM8804_I2C is not setCONFIG_SND_SOC_WM8804_SPI=mCONFIG_SND_SOC_WM8903=mCONFIG_SND_SOC_WM8904=m
# CONFIG_SND_SOC_WM8960 is not set
# CONFIG_SND_SOC_WM8962 is not set
# CONFIG_SND_SOC_WM8974 is not setCONFIG_SND_SOC_WM8978=mCONFIG_SND_SOC_WM8985=m
# CONFIG_SND_SOC_WSA881X is not set
# CONFIG_SND_SOC_ZL38060 is not setCONFIG_SND_SOC_ZX_AUD96P22=mCONFIG_SND_SOC_MAX9759=m
# CONFIG_SND_SOC_MT6351 is not set
# CONFIG_SND_SOC_MT6358 is not setCONFIG_SND_SOC_MT6660=m
# CONFIG_SND_SOC_NAU8540 is not set
# CONFIG_SND_SOC_NAU8810 is not set
# CONFIG_SND_SOC_NAU8822 is not setCONFIG_SND_SOC_NAU8824=m
# CONFIG_SND_SOC_TPA6130A2 is not set
# end of CODEC drivers
CONFIG_SND_SIMPLE_CARD_UTILS=mCONFIG_SND_SIMPLE_CARD=mCONFIG_SND_X86=yCONFIG_SND_XEN_FRONTEND=mCONFIG_AC97_BUS=m
#
# HID support
#CONFIG_HID=y
# CONFIG_HID_BATTERY_STRENGTH is not set
# CONFIG_HIDRAW is not setCONFIG_UHID=mCONFIG_HID_GENERIC=m
#
# Special HID drivers
#CONFIG_HID_A4TECH=yCONFIG_HID_ACRUX=y
# CONFIG_HID_ACRUX_FF is not setCONFIG_HID_APPLE=mCONFIG_HID_AUREAL=mCONFIG_HID_BELKIN=yCONFIG_HID_CHERRY=yCONFIG_HID_CHICONY=y
# CONFIG_HID_COUGAR is not setCONFIG_HID_MACALLY=yCONFIG_HID_PRODIKEYS=mCONFIG_HID_CMEDIA=yCONFIG_HID_CYPRESS=mCONFIG_HID_DRAGONRISE=yCONFIG_DRAGONRISE_FF=yCONFIG_HID_EMS_FF=yCONFIG_HID_ELECOM=mCONFIG_HID_EZKEY=mCONFIG_HID_GEMBIRD=m
# CONFIG_HID_GFRM is not set
# CONFIG_HID_GLORIOUS is not setCONFIG_HID_VIVALDI=mCONFIG_HID_KEYTOUCH=yCONFIG_HID_KYE=y
# CONFIG_HID_WALTOP is not set
# CONFIG_HID_VIEWSONIC is not setCONFIG_HID_GYRATION=mCONFIG_HID_ICADE=mCONFIG_HID_ITE=m
# CONFIG_HID_JABRA is not set
# CONFIG_HID_TWINHAN is not setCONFIG_HID_KENSINGTON=m
# CONFIG_HID_LCPOWER is not setCONFIG_HID_LED=yCONFIG_HID_LENOVO=yCONFIG_HID_LOGITECH=mCONFIG_HID_LOGITECH_HIDPP=m
# CONFIG_LOGITECH_FF is not set
# CONFIG_LOGIRUMBLEPAD2_FF is not setCONFIG_LOGIG940_FF=y
# CONFIG_LOGIWHEELS_FF is not setCONFIG_HID_MAGICMOUSE=yCONFIG_HID_MALTRON=mCONFIG_HID_MAYFLASH=y
# CONFIG_HID_REDRAGON is not set
# CONFIG_HID_MICROSOFT is not setCONFIG_HID_MONTEREY=yCONFIG_HID_MULTITOUCH=mCONFIG_HID_NTI=y
# CONFIG_HID_ORTEK is not setCONFIG_HID_PANTHERLORD=yCONFIG_PANTHERLORD_FF=yCONFIG_HID_PETALYNX=mCONFIG_HID_PICOLCD=yCONFIG_HID_PICOLCD_FB=yCONFIG_HID_PICOLCD_LCD=yCONFIG_HID_PICOLCD_LEDS=yCONFIG_HID_PLANTRONICS=y
# CONFIG_HID_PRIMAX is not setCONFIG_HID_SAITEK=yCONFIG_HID_SAMSUNG=mCONFIG_HID_SPEEDLINK=y
# CONFIG_HID_STEAM is not setCONFIG_HID_STEELSERIES=mCONFIG_HID_SUNPLUS=yCONFIG_HID_RMI=mCONFIG_HID_GREENASIA=yCONFIG_GREENASIA_FF=yCONFIG_HID_HYPERV_MOUSE=yCONFIG_HID_SMARTJOYPLUS=m
# CONFIG_SMARTJOYPLUS_FF is not setCONFIG_HID_TIVO=yCONFIG_HID_TOPSEED=mCONFIG_HID_THINGM=yCONFIG_HID_THRUSTMASTER=m
# CONFIG_THRUSTMASTER_FF is not setCONFIG_HID_UDRAW_PS3=y
# CONFIG_HID_WIIMOTE is not setCONFIG_HID_XINMO=yCONFIG_HID_ZEROPLUS=m
# CONFIG_ZEROPLUS_FF is not set
# CONFIG_HID_ZYDACRON is not set
# CONFIG_HID_SENSOR_HUB is not setCONFIG_HID_ALPS=y
# end of Special HID drivers
#
# I2C HID support
#CONFIG_I2C_HID=y
# end of I2C HID support
#
# Intel ISH HID support
#
# CONFIG_INTEL_ISH_HID is not set
# end of Intel ISH HID support # end of HID support
CONFIG_USB_OHCI_LITTLE_ENDIAN=yCONFIG_USB_SUPPORT=y
# CONFIG_USB_LED_TRIG is not set
# CONFIG_USB_ULPI_BUS is not set
# CONFIG_USB_CONN_GPIO is not setCONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB is not setCONFIG_USB_PCI=y
#
# USB port drivers
#
#
# USB Physical Layer drivers
#
# CONFIG_NOP_USB_XCEIV is not set
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_TAHVO_USB is not set
# end of USB Physical Layer drivers
# CONFIG_USB_GADGET is not set
# CONFIG_TYPEC is not set
# CONFIG_USB_ROLE_SWITCH is not setCONFIG_MMC=yCONFIG_MMC_BLOCK=yCONFIG_MMC_BLOCK_MINORS=8CONFIG_SDIO_UART=mCONFIG_MMC_TEST=m
#
# MMC/SD/SDIO Host Controller Drivers
#CONFIG_MMC_DEBUG=yCONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_PCI is not set
# CONFIG_MMC_SDHCI_ACPI is not setCONFIG_MMC_SDHCI_PLTFM=mCONFIG_MMC_SDHCI_F_SDH30=mCONFIG_MMC_WBSD=y
# CONFIG_MMC_TIFM_SD is not setCONFIG_MMC_SPI=y
# CONFIG_MMC_SDRICOH_CS is not set
# CONFIG_MMC_CB710 is not set
# CONFIG_MMC_VIA_SDMMC is not set
# CONFIG_MMC_USDHI6ROL0 is not setCONFIG_MMC_CQHCI=mCONFIG_MMC_HSQ=m
# CONFIG_MMC_TOSHIBA_PCI is not setCONFIG_MMC_MTK=m
# CONFIG_MMC_SDHCI_XENON is not set
# CONFIG_MEMSTICK is not setCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=yCONFIG_LEDS_CLASS_FLASH=yCONFIG_LEDS_CLASS_MULTICOLOR=mCONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y
#
# LED drivers
#
# CONFIG_LEDS_APU is not set
# CONFIG_LEDS_AS3645A is not setCONFIG_LEDS_LM3530=m
# CONFIG_LEDS_LM3532 is not setCONFIG_LEDS_LM3533=mCONFIG_LEDS_LM3642=mCONFIG_LEDS_LM3601X=y
# CONFIG_LEDS_MT6323 is not setCONFIG_LEDS_PCA9532=mCONFIG_LEDS_PCA9532_GPIO=y
# CONFIG_LEDS_GPIO is not set
# CONFIG_LEDS_LP3944 is not setCONFIG_LEDS_LP3952=mCONFIG_LEDS_LP50XX=m
# CONFIG_LEDS_CLEVO_MAIL is not setCONFIG_LEDS_PCA955X=mCONFIG_LEDS_PCA955X_GPIO=yCONFIG_LEDS_PCA963X=yCONFIG_LEDS_WM831X_STATUS=m
# CONFIG_LEDS_DA903X is not setCONFIG_LEDS_DA9052=yCONFIG_LEDS_DAC124S085=yCONFIG_LEDS_PWM=yCONFIG_LEDS_REGULATOR=yCONFIG_LEDS_BD2802=m
# CONFIG_LEDS_INTEL_SS4200 is not setCONFIG_LEDS_MC13783=mCONFIG_LEDS_TCA6507=m
# CONFIG_LEDS_TLC591XX is not setCONFIG_LEDS_MAX8997=m
CONFIG_LEDS_LM355x=mCONFIG_LEDS_MENF21BMC=m
#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) #CONFIG_LEDS_BLINKM=m
# CONFIG_LEDS_MLXCPLD is not setCONFIG_LEDS_MLXREG=mCONFIG_LEDS_USER=mCONFIG_LEDS_NIC78BX=yCONFIG_LEDS_TI_LMU_COMMON=mCONFIG_LEDS_TPS6105X=m
# CONFIG_LEDS_SGM3140 is not set
#
# LED Triggers
#CONFIG_LEDS_TRIGGERS=yCONFIG_LEDS_TRIGGER_TIMER=yCONFIG_LEDS_TRIGGER_ONESHOT=yCONFIG_LEDS_TRIGGER_HEARTBEAT=yCONFIG_LEDS_TRIGGER_BACKLIGHT=y
# CONFIG_LEDS_TRIGGER_CPU is not setCONFIG_LEDS_TRIGGER_ACTIVITY=mCONFIG_LEDS_TRIGGER_GPIO=m
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
#
# iptables trigger is under Netfilter config (LED target) # CONFIG_LEDS_TRIGGER_TRANSIENT=y CONFIG_LEDS_TRIGGER_CAMERA=m CONFIG_LEDS_TRIGGER_PANIC=y CONFIG_LEDS_TRIGGER_NETDEV=y # CONFIG_LEDS_TRIGGER_PATTERN is not set # CONFIG_LEDS_TRIGGER_AUDIO is not set CONFIG_ACCESSIBILITY=y CONFIG_A11Y_BRAILLE_CONSOLE=y
#
# Speakup console speech
#CONFIG_SPEAKUP=yCONFIG_SPEAKUP_SYNTH_ACNTSA=yCONFIG_SPEAKUP_SYNTH_APOLLO=mCONFIG_SPEAKUP_SYNTH_AUDPTR=yCONFIG_SPEAKUP_SYNTH_BNS=mCONFIG_SPEAKUP_SYNTH_DECTLK=y
# CONFIG_SPEAKUP_SYNTH_DECEXT is not setCONFIG_SPEAKUP_SYNTH_LTLK=mCONFIG_SPEAKUP_SYNTH_SOFT=mCONFIG_SPEAKUP_SYNTH_SPKOUT=y
# CONFIG_SPEAKUP_SYNTH_TXPRT is not setCONFIG_SPEAKUP_SYNTH_DUMMY=y
# end of Speakup console speech
CONFIG_INFINIBAND=mCONFIG_INFINIBAND_USER_MAD=m
# CONFIG_INFINIBAND_USER_ACCESS is not set
# CONFIG_INFINIBAND_ADDR_TRANS is not set
# CONFIG_INFINIBAND_MTHCA is not set
# CONFIG_MLX4_INFINIBAND is not set
# CONFIG_INFINIBAND_OCRDMA is not set
# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_RDMA_RXE is not setCONFIG_RDMA_SIW=mCONFIG_INFINIBAND_IPOIB=mCONFIG_INFINIBAND_IPOIB_CM=yCONFIG_INFINIBAND_IPOIB_DEBUG=yCONFIG_INFINIBAND_IPOIB_DEBUG_DATA=yCONFIG_INFINIBAND_OPA_VNIC=mCONFIG_EDAC_ATOMIC_SCRUB=yCONFIG_EDAC_SUPPORT=yCONFIG_EDAC=yCONFIG_EDAC_LEGACY_SYSFS=yCONFIG_EDAC_DEBUG=y
# CONFIG_EDAC_E752X is not set
# CONFIG_EDAC_I82975X is not set
# CONFIG_EDAC_I3000 is not set
# CONFIG_EDAC_I3200 is not set
# CONFIG_EDAC_IE31200 is not set
# CONFIG_EDAC_X38 is not set
# CONFIG_EDAC_I5400 is not set
# CONFIG_EDAC_I5000 is not set
# CONFIG_EDAC_I5100 is not set
# CONFIG_EDAC_I7300 is not setCONFIG_RTC_LIB=yCONFIG_RTC_MC146818_LIB=y
# CONFIG_RTC_CLASS is not setCONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
#
# DMA Devices
#CONFIG_DMA_ENGINE=yCONFIG_DMA_VIRTUAL_CHANNELS=yCONFIG_DMA_ACPI=yCONFIG_ALTERA_MSGDMA=y
# CONFIG_INTEL_IDMA64 is not set
# CONFIG_INTEL_IOATDMA is not set
# CONFIG_PLX_DMA is not set
# CONFIG_XILINX_ZYNQMP_DPDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not setCONFIG_QCOM_HIDMA=mCONFIG_DW_DMAC_CORE=y
# CONFIG_DW_DMAC is not set
# CONFIG_DW_DMAC_PCI is not setCONFIG_HSU_DMA=yCONFIG_SF_PDMA=m
#
# DMA Clients
#CONFIG_ASYNC_TX_DMA=yCONFIG_DMATEST=mCONFIG_DMA_ENGINE_RAID=y
#
# DMABUF options
#
# CONFIG_SYNC_FILE is not set
# CONFIG_UDMABUF is not setCONFIG_DMABUF_MOVE_NOTIFY=y
# CONFIG_DMABUF_SELFTESTS is not setCONFIG_DMABUF_HEAPS=yCONFIG_DMABUF_HEAPS_SYSTEM=y
# end of DMABUF options
CONFIG_AUXDISPLAY=yCONFIG_HD44780=yCONFIG_IMG_ASCII_LCD=yCONFIG_PARPORT_PANEL=yCONFIG_PANEL_PARPORT=0CONFIG_PANEL_PROFILE=5
# CONFIG_PANEL_CHANGE_MESSAGE is not set
# CONFIG_CHARLCD_BL_OFF is not set
# CONFIG_CHARLCD_BL_ON is not setCONFIG_CHARLCD_BL_FLASH=yCONFIG_PANEL=mCONFIG_CHARLCD=y
# CONFIG_UIO is not set
# CONFIG_VIRT_DRIVERS is not setCONFIG_VIRTIO=y
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VDPA is not set
# CONFIG_VHOST_MENU is not set
#
# Microsoft Hyper-V guest support
#CONFIG_HYPERV=yCONFIG_HYPERV_TIMER=yCONFIG_HYPERV_UTILS=y
# CONFIG_HYPERV_BALLOON is not set
# end of Microsoft Hyper-V guest support
#
# Xen driver support
#CONFIG_XEN_BALLOON=yCONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y
# CONFIG_XEN_SCRUB_PAGES_DEFAULT is not set
# CONFIG_XEN_DEV_EVTCHN is not setCONFIG_XEN_BACKEND=yCONFIG_XENFS=y
# CONFIG_XEN_COMPAT_XENFS is not setCONFIG_XEN_SYS_HYPERVISOR=yCONFIG_XEN_XENBUS_FRONTEND=yCONFIG_XEN_GNTDEV=mCONFIG_XEN_GRANT_DEV_ALLOC=y
# CONFIG_XEN_GRANT_DMA_ALLOC is not setCONFIG_SWIOTLB_XEN=yCONFIG_XEN_PCIDEV_BACKEND=mCONFIG_XEN_PVCALLS_FRONTEND=y
# CONFIG_XEN_PVCALLS_BACKEND is not setCONFIG_XEN_PRIVCMD=yCONFIG_XEN_EFI=yCONFIG_XEN_AUTO_XLATE=yCONFIG_XEN_ACPI=yCONFIG_XEN_FRONT_PGDIR_SHBUF=m
# end of Xen driver support
# CONFIG_GREYBUS is not setCONFIG_STAGING=yCONFIG_COMEDI=yCONFIG_COMEDI_DEBUG=yCONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480CONFIG_COMEDI_MISC_DRIVERS=y
# CONFIG_COMEDI_BOND is not set
# CONFIG_COMEDI_TEST is not set
# CONFIG_COMEDI_PARPORT is not setCONFIG_COMEDI_ISA_DRIVERS=y
# CONFIG_COMEDI_PCL711 is not setCONFIG_COMEDI_PCL724=y
# CONFIG_COMEDI_PCL726 is not set
# CONFIG_COMEDI_PCL730 is not setCONFIG_COMEDI_PCL812=yCONFIG_COMEDI_PCL816=mCONFIG_COMEDI_PCL818=mCONFIG_COMEDI_PCM3724=mCONFIG_COMEDI_AMPLC_DIO200_ISA=mCONFIG_COMEDI_AMPLC_PC236_ISA=m
# CONFIG_COMEDI_AMPLC_PC263_ISA is not setCONFIG_COMEDI_RTI800=yCONFIG_COMEDI_RTI802=mCONFIG_COMEDI_DAC02=y
# CONFIG_COMEDI_DAS16M1 is not setCONFIG_COMEDI_DAS08_ISA=m
# CONFIG_COMEDI_DAS16 is not set
# CONFIG_COMEDI_DAS800 is not setCONFIG_COMEDI_DAS1800=mCONFIG_COMEDI_DAS6402=y
# CONFIG_COMEDI_DT2801 is not setCONFIG_COMEDI_DT2811=mCONFIG_COMEDI_DT2814=m
# CONFIG_COMEDI_DT2815 is not set
# CONFIG_COMEDI_DT2817 is not setCONFIG_COMEDI_DT282X=m
# CONFIG_COMEDI_DMM32AT is not set
# CONFIG_COMEDI_FL512 is not setCONFIG_COMEDI_AIO_AIO12_8=yCONFIG_COMEDI_AIO_IIRO_16=yCONFIG_COMEDI_II_PCI20KC=yCONFIG_COMEDI_C6XDIGIO=mCONFIG_COMEDI_MPC624=yCONFIG_COMEDI_ADQ12B=y
# CONFIG_COMEDI_NI_AT_A2150 is not setCONFIG_COMEDI_NI_AT_AO=yCONFIG_COMEDI_NI_ATMIO=yCONFIG_COMEDI_NI_ATMIO16D=mCONFIG_COMEDI_NI_LABPC_ISA=mCONFIG_COMEDI_PCMAD=yCONFIG_COMEDI_PCMDA12=mCONFIG_COMEDI_PCMMIO=m
# CONFIG_COMEDI_PCMUIO is not setCONFIG_COMEDI_MULTIQ3=yCONFIG_COMEDI_S526=m
# CONFIG_COMEDI_PCI_DRIVERS is not setCONFIG_COMEDI_PCMCIA_DRIVERS=mCONFIG_COMEDI_CB_DAS16_CS=mCONFIG_COMEDI_DAS08_CS=mCONFIG_COMEDI_NI_DAQ_700_CS=m
# CONFIG_COMEDI_NI_DAQ_DIO24_CS is not setCONFIG_COMEDI_NI_LABPC_CS=mCONFIG_COMEDI_NI_MIO_CS=mCONFIG_COMEDI_QUATECH_DAQP_CS=mCONFIG_COMEDI_8254=yCONFIG_COMEDI_8255=yCONFIG_COMEDI_8255_SA=mCONFIG_COMEDI_KCOMEDILIB=yCONFIG_COMEDI_AMPLC_DIO200=mCONFIG_COMEDI_AMPLC_PC236=mCONFIG_COMEDI_DAS08=mCONFIG_COMEDI_ISADMA=yCONFIG_COMEDI_NI_LABPC=mCONFIG_COMEDI_NI_LABPC_ISADMA=mCONFIG_COMEDI_NI_TIO=yCONFIG_COMEDI_NI_ROUTING=y
# CONFIG_FB_SM750 is not set
# CONFIG_STAGING_MEDIA is not set
#
# Android
#CONFIG_ASHMEM=yCONFIG_ION=yCONFIG_ION_SYSTEM_HEAP=y
# end of Android
CONFIG_FIREWIRE_SERIAL=mCONFIG_FWTTY_MAX_TOTAL_PORTS=64CONFIG_FWTTY_MAX_CARD_PORTS=32CONFIG_GS_FPGABOOT=y
# CONFIG_UNISYSSPAR is not setCONFIG_FB_TFT=mCONFIG_FB_TFT_AGM1264K_FL=m
# CONFIG_FB_TFT_BD663474 is not set
# CONFIG_FB_TFT_HX8340BN is not setCONFIG_FB_TFT_HX8347D=mCONFIG_FB_TFT_HX8353D=m
# CONFIG_FB_TFT_HX8357D is not setCONFIG_FB_TFT_ILI9163=mCONFIG_FB_TFT_ILI9320=mCONFIG_FB_TFT_ILI9325=m
# CONFIG_FB_TFT_ILI9340 is not setCONFIG_FB_TFT_ILI9341=mCONFIG_FB_TFT_ILI9481=m
# CONFIG_FB_TFT_ILI9486 is not set
# CONFIG_FB_TFT_PCD8544 is not set
# CONFIG_FB_TFT_RA8875 is not setCONFIG_FB_TFT_S6D02A1=mCONFIG_FB_TFT_S6D1121=mCONFIG_FB_TFT_SEPS525=m
# CONFIG_FB_TFT_SH1106 is not setCONFIG_FB_TFT_SSD1289=mCONFIG_FB_TFT_SSD1305=m
# CONFIG_FB_TFT_SSD1306 is not setCONFIG_FB_TFT_SSD1331=m
# CONFIG_FB_TFT_SSD1351 is not setCONFIG_FB_TFT_ST7735R=m
# CONFIG_FB_TFT_ST7789V is not set
# CONFIG_FB_TFT_TINYLCD is not set
# CONFIG_FB_TFT_TLS8204 is not set
# CONFIG_FB_TFT_UC1611 is not setCONFIG_FB_TFT_UC1701=mCONFIG_FB_TFT_UPD161704=mCONFIG_FB_TFT_WATTEROTT=mCONFIG_MOST_COMPONENTS=mCONFIG_MOST_NET=mCONFIG_MOST_SOUND=m
# CONFIG_MOST_VIDEO is not set
# CONFIG_MOST_I2C is not setCONFIG_KS7010=mCONFIG_PI433=m
#
# Gasket devices
#
# CONFIG_STAGING_GASKET_FRAMEWORK is not set
# end of Gasket devices
# CONFIG_FIELDBUS_DEV is not set
# CONFIG_QLGE is not setCONFIG_X86_PLATFORM_DEVICES=y
# CONFIG_ACPI_WMI is not setCONFIG_ACERHDF=m
# CONFIG_ACER_WIRELESS is not set
# CONFIG_APPLE_GMUX is not setCONFIG_ASUS_LAPTOP=m
# CONFIG_ASUS_WIRELESS is not set
# CONFIG_DCDBAS is not setCONFIG_DELL_SMBIOS=m
# CONFIG_DELL_LAPTOP is not setCONFIG_DELL_RBU=y
# CONFIG_DELL_SMO8800 is not setCONFIG_FUJITSU_LAPTOP=m
# CONFIG_FUJITSU_TABLET is not set
# CONFIG_GPD_POCKET_FAN is not set
# CONFIG_HP_ACCEL is not setCONFIG_HP_WIRELESS=m
# CONFIG_IBM_RTL is not setCONFIG_SENSORS_HDAPS=y
# CONFIG_THINKPAD_ACPI is not set
# CONFIG_INTEL_HID_EVENT is not setCONFIG_INTEL_INT0002_VGPIO=yCONFIG_INTEL_MENLOW=mCONFIG_INTEL_VBTN=mCONFIG_SURFACE_3_POWER_OPREGION=yCONFIG_SURFACE_PRO3_BUTTON=y
# CONFIG_PCENGINES_APU2 is not setCONFIG_SAMSUNG_LAPTOP=m
# CONFIG_SAMSUNG_Q10 is not set
# CONFIG_TOSHIBA_BT_RFKILL is not set
# CONFIG_TOSHIBA_HAPS is not set
# CONFIG_ACPI_CMPC is not set
# CONFIG_PANASONIC_LAPTOP is not setCONFIG_SYSTEM76_ACPI=yCONFIG_TOPSTAR_LAPTOP=mCONFIG_I2C_MULTI_INSTANTIATE=m
# CONFIG_MLX_PLATFORM is not set
# CONFIG_INTEL_IPS is not set
# CONFIG_INTEL_RST is not set
# CONFIG_INTEL_SMARTCONNECT is not set
#
# Intel Speed Select Technology interface support
#
# CONFIG_INTEL_SPEED_SELECT_INTERFACE is not set
# end of Intel Speed Select Technology interface support
CONFIG_INTEL_TURBO_MAX_3=y
# CONFIG_INTEL_UNCORE_FREQ_CONTROL is not setCONFIG_INTEL_BXTWC_PMIC_TMU=m
# CONFIG_INTEL_PMC_CORE is not setCONFIG_INTEL_PUNIT_IPC=yCONFIG_INTEL_SCU_IPC=y
# CONFIG_INTEL_SCU_PCI is not set
# CONFIG_INTEL_SCU_PLATFORM is not set
# CONFIG_INTEL_TELEMETRY is not setCONFIG_PMC_ATOM=y
# CONFIG_CHROME_PLATFORMS is not setCONFIG_MELLANOX_PLATFORM=yCONFIG_HAVE_CLK=yCONFIG_CLKDEV_LOOKUP=yCONFIG_HAVE_CLK_PREPARE=yCONFIG_COMMON_CLK=y
# CONFIG_COMMON_CLK_WM831X is not setCONFIG_COMMON_CLK_MAX9485=mCONFIG_COMMON_CLK_SI5341=yCONFIG_COMMON_CLK_SI5351=mCONFIG_COMMON_CLK_SI544=y
# CONFIG_COMMON_CLK_CDCE706 is not setCONFIG_COMMON_CLK_CS2000_CP=m
# CONFIG_COMMON_CLK_S2MPS11 is not setCONFIG_CLK_TWL6040=mCONFIG_COMMON_CLK_PWM=yCONFIG_HWSPINLOCK=y
#
# Clock Source drivers
#CONFIG_CLKEVT_I8253=yCONFIG_I8253_LOCK=yCONFIG_CLKBLD_I8253=y
# end of Clock Source drivers
CONFIG_MAILBOX=yCONFIG_PCC=yCONFIG_ALTERA_MBOX=y
# CONFIG_IOMMU_SUPPORT is not set
#
# Remoteproc drivers
#CONFIG_REMOTEPROC=yCONFIG_REMOTEPROC_CDEV=y
# end of Remoteproc drivers
#
# Rpmsg drivers
#CONFIG_RPMSG=yCONFIG_RPMSG_CHAR=y
# CONFIG_RPMSG_QCOM_GLINK_RPM is not setCONFIG_RPMSG_VIRTIO=y
# end of Rpmsg drivers
CONFIG_SOUNDWIRE=m
#
# SoundWire Devices
#CONFIG_SOUNDWIRE_CADENCE=mCONFIG_SOUNDWIRE_INTEL=mCONFIG_SOUNDWIRE_QCOM=mCONFIG_SOUNDWIRE_GENERIC_ALLOCATION=m
#
# SOC (System On Chip) specific Drivers
#
#
# Amlogic SoC drivers
#
# end of Amlogic SoC drivers
#
# Aspeed SoC drivers
#
# end of Aspeed SoC drivers
#
# Broadcom SoC drivers
#
# end of Broadcom SoC drivers
#
# NXP/Freescale QorIQ SoC drivers
#
# end of NXP/Freescale QorIQ SoC drivers
#
# i.MX SoC drivers
#
# end of i.MX SoC drivers
#
# Qualcomm SoC drivers
#
# end of Qualcomm SoC drivers
CONFIG_SOC_TI=y
#
# Xilinx SoC drivers
#
# CONFIG_XILINX_VCU is not set
# end of Xilinx SoC drivers # end of SOC (System On Chip) specific Drivers
# CONFIG_PM_DEVFREQ is not setCONFIG_EXTCON=y
#
# Extcon Device Drivers
#CONFIG_EXTCON_ARIZONA=m
# CONFIG_EXTCON_AXP288 is not setCONFIG_EXTCON_FSA9480=y
# CONFIG_EXTCON_GPIO is not setCONFIG_EXTCON_INTEL_INT3496=yCONFIG_EXTCON_MAX14577=yCONFIG_EXTCON_MAX3355=mCONFIG_EXTCON_MAX77843=yCONFIG_EXTCON_MAX8997=yCONFIG_EXTCON_PTN5150=yCONFIG_EXTCON_RT8973A=mCONFIG_EXTCON_SM5502=m
# CONFIG_EXTCON_USB_GPIO is not set
# CONFIG_MEMORY is not set
# CONFIG_IIO is not set
# CONFIG_NTB is not set
# CONFIG_VME_BUS is not setCONFIG_PWM=yCONFIG_PWM_SYSFS=yCONFIG_PWM_DEBUG=y
# CONFIG_PWM_CRC is not setCONFIG_PWM_IQS620A=m
# CONFIG_PWM_LP3943 is not set
# CONFIG_PWM_LPSS_PCI is not set
# CONFIG_PWM_LPSS_PLATFORM is not setCONFIG_PWM_PCA9685=y
# CONFIG_PWM_SL28CPLD is not setCONFIG_PWM_TWL=m
# CONFIG_PWM_TWL_LED is not set
#
# IRQ chip support
#CONFIG_MADERA_IRQ=yCONFIG_SL28CPLD_INTC=y
# end of IRQ chip support
# CONFIG_IPACK_BUS is not setCONFIG_RESET_CONTROLLER=yCONFIG_RESET_BRCMSTB_RESCAL=yCONFIG_RESET_TI_SYSCON=y
#
# PHY Subsystem
#CONFIG_GENERIC_PHY=y
# CONFIG_USB_LGM_PHY is not set
# CONFIG_BCM_KONA_USB2_PHY is not set
# CONFIG_PHY_PXA_28NM_HSIC is not set
# CONFIG_PHY_PXA_28NM_USB2 is not setCONFIG_PHY_INTEL_LGM_EMMC=y
# end of PHY Subsystem
CONFIG_POWERCAP=yCONFIG_IDLE_INJECT=yCONFIG_MCB=m
# CONFIG_MCB_PCI is not set
# CONFIG_MCB_LPC is not set
#
# Performance monitor support
#
# end of Performance monitor support
CONFIG_RAS=y
# CONFIG_USB4 is not set
#
# Android
#CONFIG_ANDROID=yCONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANDROID_BINDERFS is not set CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder" # CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# end of Android
CONFIG_LIBNVDIMM=mCONFIG_BLK_DEV_PMEM=mCONFIG_ND_BLK=m
# CONFIG_BTT is not setCONFIG_NVDIMM_KEYS=yCONFIG_DAX_DRIVER=yCONFIG_DAX=yCONFIG_DEV_DAX=yCONFIG_DEV_DAX_KMEM=mCONFIG_NVMEM=yCONFIG_NVMEM_SYSFS=y
#
# HW tracing support
#CONFIG_STM=mCONFIG_STM_PROTO_BASIC=mCONFIG_STM_PROTO_SYS_T=mCONFIG_STM_DUMMY=mCONFIG_STM_SOURCE_CONSOLE=mCONFIG_STM_SOURCE_HEARTBEAT=mCONFIG_STM_SOURCE_FTRACE=mCONFIG_INTEL_TH=y
# CONFIG_INTEL_TH_PCI is not set
# CONFIG_INTEL_TH_ACPI is not set
# CONFIG_INTEL_TH_GTH is not setCONFIG_INTEL_TH_STH=mCONFIG_INTEL_TH_MSU=mCONFIG_INTEL_TH_PTI=mCONFIG_INTEL_TH_DEBUG=y
# end of HW tracing support
CONFIG_FPGA=mCONFIG_ALTERA_PR_IP_CORE=mCONFIG_FPGA_MGR_ALTERA_PS_SPI=m
# CONFIG_FPGA_MGR_ALTERA_CVP is not setCONFIG_FPGA_MGR_XILINX_SPI=mCONFIG_FPGA_MGR_MACHXO2_SPI=mCONFIG_FPGA_BRIDGE=mCONFIG_ALTERA_FREEZE_BRIDGE=m
# CONFIG_XILINX_PR_DECOUPLER is not setCONFIG_FPGA_REGION=mCONFIG_FPGA_DFL=mCONFIG_FPGA_DFL_AFU=m
# CONFIG_FPGA_DFL_PCI is not set
# CONFIG_TEE is not setCONFIG_UNISYS_VISORBUS=yCONFIG_SIOX=y
# CONFIG_SIOX_BUS_GPIO is not setCONFIG_SLIMBUS=mCONFIG_SLIM_QCOM_CTRL=mCONFIG_INTERCONNECT=yCONFIG_COUNTER=mCONFIG_MOST=mCONFIG_MOST_CDEV=m
# end of Device Drivers
#
# File systems
#CONFIG_DCACHE_WORD_ACCESS=y
# CONFIG_VALIDATE_FS_PARSER is not setCONFIG_FS_IOMAP=y
# CONFIG_EXT2_FS is not set
# CONFIG_EXT3_FS is not setCONFIG_EXT4_FS=yCONFIG_EXT4_USE_FOR_EXT2=yCONFIG_EXT4_FS_POSIX_ACL=yCONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not setCONFIG_EXT4_KUNIT_TESTS=mCONFIG_JBD2=yCONFIG_JBD2_DEBUG=yCONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not setCONFIG_JFS_FS=y
# CONFIG_JFS_POSIX_ACL is not set
# CONFIG_JFS_SECURITY is not set
# CONFIG_JFS_DEBUG is not setCONFIG_JFS_STATISTICS=yCONFIG_XFS_FS=y
# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_QUOTA is not setCONFIG_XFS_POSIX_ACL=yCONFIG_XFS_RT=yCONFIG_XFS_ONLINE_SCRUB=y
# CONFIG_XFS_ONLINE_REPAIR is not setCONFIG_XFS_WARN=y
# CONFIG_XFS_DEBUG is not setCONFIG_GFS2_FS=m
# CONFIG_OCFS2_FS is not setCONFIG_BTRFS_FS=y
# CONFIG_BTRFS_FS_POSIX_ACL is not set
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BTRFS_DEBUG is not setCONFIG_BTRFS_ASSERT=y
# CONFIG_BTRFS_FS_REF_VERIFY is not setCONFIG_NILFS2_FS=m
# CONFIG_F2FS_FS is not setCONFIG_ZONEFS_FS=mCONFIG_FS_DAX=yCONFIG_FS_POSIX_ACL=yCONFIG_EXPORTFS=yCONFIG_EXPORTFS_BLOCK_OPS=yCONFIG_FILE_LOCKING=yCONFIG_MANDATORY_FILE_LOCKING=yCONFIG_FS_ENCRYPTION=yCONFIG_FS_ENCRYPTION_ALGS=yCONFIG_FS_VERITY=yCONFIG_FS_VERITY_DEBUG=yCONFIG_FS_VERITY_BUILTIN_SIGNATURES=yCONFIG_FSNOTIFY=y
# CONFIG_DNOTIFY is not setCONFIG_INOTIFY_USER=yCONFIG_FANOTIFY=y
# CONFIG_QUOTA is not set
# CONFIG_QUOTA_NETLINK_INTERFACE is not setCONFIG_QUOTACTL=yCONFIG_AUTOFS4_FS=yCONFIG_AUTOFS_FS=yCONFIG_FUSE_FS=m
# CONFIG_CUSE is not set
# CONFIG_VIRTIO_FS is not set
# CONFIG_OVERLAY_FS is not set
#
# Caches
#CONFIG_FSCACHE=y
# CONFIG_FSCACHE_STATS is not setCONFIG_FSCACHE_HISTOGRAM=yCONFIG_FSCACHE_DEBUG=yCONFIG_FSCACHE_OBJECT_LIST=y
# CONFIG_CACHEFILES is not set
# end of Caches
#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
# end of CD-ROM/DVD Filesystems
#
# DOS/FAT/EXFAT/NT Filesystems
#CONFIG_FAT_FS=mCONFIG_MSDOS_FS=mCONFIG_VFAT_FS=mCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_FAT_DEFAULT_UTF8 is not set
# CONFIG_EXFAT_FS is not setCONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
# end of DOS/FAT/EXFAT/NT Filesystems
#
# Pseudo filesystems
#CONFIG_PROC_FS=yCONFIG_PROC_KCORE=yCONFIG_PROC_VMCORE=yCONFIG_PROC_VMCORE_DEVICE_DUMP=yCONFIG_PROC_SYSCTL=yCONFIG_PROC_PAGE_MONITOR=yCONFIG_PROC_CHILDREN=yCONFIG_PROC_PID_ARCH_STATUS=yCONFIG_PROC_CPU_RESCTRL=yCONFIG_KERNFS=yCONFIG_SYSFS=yCONFIG_TMPFS=yCONFIG_TMPFS_POSIX_ACL=yCONFIG_TMPFS_XATTR=yCONFIG_TMPFS_INODE64=y
# CONFIG_HUGETLBFS is not setCONFIG_MEMFD_CREATE=yCONFIG_ARCH_HAS_GIGANTIC_PAGE=yCONFIG_CONFIGFS_FS=yCONFIG_EFIVAR_FS=y
# end of Pseudo filesystems
# CONFIG_MISC_FILESYSTEMS is not set CONFIG_NETWORK_FILESYSTEMS=yCONFIG_NFS_FS=yCONFIG_NFS_V2=yCONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set CONFIG_NFS_V4=m
# CONFIG_NFS_V4_1 is not set
# CONFIG_ROOT_NFS is not set
# CONFIG_NFS_FSCACHE is not set
# CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y CONFIG_NFS_DEBUG=y CONFIG_NFS_DISABLE_UDP_SUPPORT=y CONFIG_NFSD=mCONFIG_NFSD_V3=y
# CONFIG_NFSD_V3_ACL is not set CONFIG_NFSD_V4=yCONFIG_NFSD_PNFS=y
# CONFIG_NFSD_BLOCKLAYOUT is not set CONFIG_NFSD_SCSILAYOUT=y
# CONFIG_NFSD_FLEXFILELAYOUT is not set CONFIG_GRACE_PERIOD=yCONFIG_LOCKD=yCONFIG_LOCKD_V4=yCONFIG_NFS_COMMON=yCONFIG_SUNRPC=yCONFIG_SUNRPC_GSS=mCONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES is not set CONFIG_SUNRPC_DEBUG=yCONFIG_CEPH_FS=yCONFIG_CEPH_FSCACHE=y
# CONFIG_CEPH_FS_POSIX_ACL is not set CONFIG_CIFS=m
# CONFIG_CIFS_STATS2 is not set CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
# CONFIG_CIFS_WEAK_PW_HASH is not set
# CONFIG_CIFS_UPCALL is not set
# CONFIG_CIFS_XATTR is not set CONFIG_CIFS_DEBUG=y
# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set
# CONFIG_CIFS_DFS_UPCALL is not set
# CONFIG_CIFS_FSCACHE is not set CONFIG_CODA_FS=yCONFIG_AFS_FS=yCONFIG_AFS_DEBUG=yCONFIG_AFS_FSCACHE=y CONFIG_AFS_DEBUG_CURSOR=y
# CONFIG_9P_FS is not setCONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=m CONFIG_NLS_CODEPAGE_737=m CONFIG_NLS_CODEPAGE_775=y
# CONFIG_NLS_CODEPAGE_850 is not set CONFIG_NLS_CODEPAGE_852=m
# CONFIG_NLS_CODEPAGE_855 is not set CONFIG_NLS_CODEPAGE_857=m CONFIG_NLS_CODEPAGE_860=m CONFIG_NLS_CODEPAGE_861=m
# CONFIG_NLS_CODEPAGE_862 is not set CONFIG_NLS_CODEPAGE_863=y CONFIG_NLS_CODEPAGE_864=y CONFIG_NLS_CODEPAGE_865=m
# CONFIG_NLS_CODEPAGE_866 is not set CONFIG_NLS_CODEPAGE_869=y
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set CONFIG_NLS_CODEPAGE_932=y CONFIG_NLS_CODEPAGE_949=m CONFIG_NLS_CODEPAGE_874=m CONFIG_NLS_ISO8859_8=m
# CONFIG_NLS_CODEPAGE_1250 is not set CONFIG_NLS_CODEPAGE_1251=m CONFIG_NLS_ASCII=mCONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_2=m
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set CONFIG_NLS_ISO8859_5=m CONFIG_NLS_ISO8859_6=m
# CONFIG_NLS_ISO8859_7 is not set CONFIG_NLS_ISO8859_9=y CONFIG_NLS_ISO8859_13=m CONFIG_NLS_ISO8859_14=m CONFIG_NLS_ISO8859_15=y
# CONFIG_NLS_KOI8_R is not set CONFIG_NLS_KOI8_U=m
# CONFIG_NLS_MAC_ROMAN is not set CONFIG_NLS_MAC_CELTIC=m CONFIG_NLS_MAC_CENTEURO=y
# CONFIG_NLS_MAC_CROATIAN is not set CONFIG_NLS_MAC_CYRILLIC=y CONFIG_NLS_MAC_GAELIC=y
# CONFIG_NLS_MAC_GREEK is not set
# CONFIG_NLS_MAC_ICELAND is not set CONFIG_NLS_MAC_INUIT=m CONFIG_NLS_MAC_ROMANIAN=m CONFIG_NLS_MAC_TURKISH=m
# CONFIG_NLS_UTF8 is not set
# CONFIG_DLM is not setCONFIG_UNICODE=y CONFIG_UNICODE_NORMALIZATION_SELFTEST=y CONFIG_IO_WQ=y
# end of File systems
#
# Security options
#CONFIG_KEYS=yCONFIG_KEYS_REQUEST_CACHE=y CONFIG_PERSISTENT_KEYRINGS=y
# CONFIG_BIG_KEYS is not set CONFIG_ENCRYPTED_KEYS=y
# CONFIG_KEY_DH_OPERATIONS is not set
# CONFIG_KEY_NOTIFICATIONS is not set CONFIG_SECURITY_DMESG_RESTRICT=y
# CONFIG_SECURITY is not setCONFIG_SECURITYFS=yCONFIG_PAGE_TABLE_ISOLATION=y CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
# CONFIG_HARDENED_USERCOPY is not set
# CONFIG_FORTIFY_SOURCE is not set
# CONFIG_STATIC_USERMODEHELPER is not set
# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,bpf"
#
# Kernel hardening options
#
#
# Memory initialization
#CONFIG_INIT_STACK_NONE=y
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not setCONFIG_INIT_ON_FREE_DEFAULT_ON=y
# end of Memory initialization # end of Kernel hardening options # end of Security options
CONFIG_XOR_BLOCKS=yCONFIG_CRYPTO=y
#
# Crypto core or helper
#CONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_ALGAPI2=yCONFIG_CRYPTO_AEAD=yCONFIG_CRYPTO_AEAD2=yCONFIG_CRYPTO_SKCIPHER=yCONFIG_CRYPTO_SKCIPHER2=yCONFIG_CRYPTO_HASH=yCONFIG_CRYPTO_HASH2=yCONFIG_CRYPTO_RNG=yCONFIG_CRYPTO_RNG2=yCONFIG_CRYPTO_RNG_DEFAULT=yCONFIG_CRYPTO_AKCIPHER2=yCONFIG_CRYPTO_AKCIPHER=yCONFIG_CRYPTO_KPP2=yCONFIG_CRYPTO_KPP=mCONFIG_CRYPTO_ACOMP2=yCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_MANAGER2=yCONFIG_CRYPTO_USER=mCONFIG_CRYPTO_MANAGER_DISABLE_TESTS=yCONFIG_CRYPTO_GF128MUL=yCONFIG_CRYPTO_NULL=yCONFIG_CRYPTO_NULL2=yCONFIG_CRYPTO_PCRYPT=mCONFIG_CRYPTO_CRYPTD=yCONFIG_CRYPTO_AUTHENC=yCONFIG_CRYPTO_TEST=mCONFIG_CRYPTO_SIMD=yCONFIG_CRYPTO_GLUE_HELPER_X86=y
#
# Public-key cryptography
#CONFIG_CRYPTO_RSA=y
# CONFIG_CRYPTO_DH is not setCONFIG_CRYPTO_ECC=yCONFIG_CRYPTO_ECDH=mCONFIG_CRYPTO_ECRDSA=y
# CONFIG_CRYPTO_SM2 is not set
# CONFIG_CRYPTO_CURVE25519 is not setCONFIG_CRYPTO_CURVE25519_X86=m
#
# Authenticated Encryption with Associated Data
#CONFIG_CRYPTO_CCM=yCONFIG_CRYPTO_GCM=mCONFIG_CRYPTO_CHACHA20POLY1305=m
# CONFIG_CRYPTO_AEGIS128 is not setCONFIG_CRYPTO_AEGIS128_AESNI_SSE2=yCONFIG_CRYPTO_SEQIV=mCONFIG_CRYPTO_ECHAINIV=y
#
# Block modes
#CONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_CFB=mCONFIG_CRYPTO_CTR=yCONFIG_CRYPTO_CTS=yCONFIG_CRYPTO_ECB=yCONFIG_CRYPTO_LRW=yCONFIG_CRYPTO_OFB=mCONFIG_CRYPTO_PCBC=mCONFIG_CRYPTO_XTS=yCONFIG_CRYPTO_KEYWRAP=mCONFIG_CRYPTO_NHPOLY1305=yCONFIG_CRYPTO_NHPOLY1305_SSE2=mCONFIG_CRYPTO_NHPOLY1305_AVX2=yCONFIG_CRYPTO_ADIANTUM=m
# CONFIG_CRYPTO_ESSIV is not set
#
# Hash modes
#CONFIG_CRYPTO_CMAC=mCONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_VMAC is not set
#
# Digest
#CONFIG_CRYPTO_CRC32C=y
# CONFIG_CRYPTO_CRC32C_INTEL is not set
# CONFIG_CRYPTO_CRC32 is not setCONFIG_CRYPTO_CRC32_PCLMUL=yCONFIG_CRYPTO_XXHASH=yCONFIG_CRYPTO_BLAKE2B=yCONFIG_CRYPTO_BLAKE2S=yCONFIG_CRYPTO_BLAKE2S_X86=mCONFIG_CRYPTO_CRCT10DIF=y
# CONFIG_CRYPTO_CRCT10DIF_PCLMUL is not setCONFIG_CRYPTO_GHASH=mCONFIG_CRYPTO_POLY1305=m
# CONFIG_CRYPTO_POLY1305_X86_64 is not setCONFIG_CRYPTO_MD4=yCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_MICHAEL_MIC=y
# CONFIG_CRYPTO_RMD128 is not setCONFIG_CRYPTO_RMD160=y
# CONFIG_CRYPTO_RMD256 is not setCONFIG_CRYPTO_RMD320=mCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA1_SSSE3=mCONFIG_CRYPTO_SHA256_SSSE3=mCONFIG_CRYPTO_SHA512_SSSE3=mCONFIG_CRYPTO_SHA256=yCONFIG_CRYPTO_SHA512=yCONFIG_CRYPTO_SHA3=yCONFIG_CRYPTO_SM3=mCONFIG_CRYPTO_STREEBOG=yCONFIG_CRYPTO_TGR192=mCONFIG_CRYPTO_WP512=yCONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=y
#
# Ciphers
#CONFIG_CRYPTO_AES=yCONFIG_CRYPTO_AES_TI=y CONFIG_CRYPTO_AES_NI_INTEL=y CONFIG_CRYPTO_ANUBIS=y
# CONFIG_CRYPTO_ARC4 is not set CONFIG_CRYPTO_BLOWFISH=m CONFIG_CRYPTO_BLOWFISH_COMMON=y CONFIG_CRYPTO_BLOWFISH_X86_64=y CONFIG_CRYPTO_CAMELLIA=y
# CONFIG_CRYPTO_CAMELLIA_X86_64 is not set
# CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64 is not set # CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 is not set CONFIG_CRYPTO_CAST_COMMON=y CONFIG_CRYPTO_CAST5=y CONFIG_CRYPTO_CAST5_AVX_X86_64=m CONFIG_CRYPTO_CAST6=y
# CONFIG_CRYPTO_CAST6_AVX_X86_64 is not set CONFIG_CRYPTO_DES=m CONFIG_CRYPTO_DES3_EDE_X86_64=m CONFIG_CRYPTO_FCRYPT=mCONFIG_CRYPTO_KHAZAD=m CONFIG_CRYPTO_SALSA20=m CONFIG_CRYPTO_CHACHA20=m
# CONFIG_CRYPTO_CHACHA20_X86_64 is not set
# CONFIG_CRYPTO_SEED is not set CONFIG_CRYPTO_SERPENT=y CONFIG_CRYPTO_SERPENT_SSE2_X86_64=y CONFIG_CRYPTO_SERPENT_AVX_X86_64=y
# CONFIG_CRYPTO_SERPENT_AVX2_X86_64 is not set # CONFIG_CRYPTO_SM4 is not set
# CONFIG_CRYPTO_TEA is not set CONFIG_CRYPTO_TWOFISH=y CONFIG_CRYPTO_TWOFISH_COMMON=y CONFIG_CRYPTO_TWOFISH_X86_64=y CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=y
# CONFIG_CRYPTO_TWOFISH_AVX_X86_64 is not set
#
# Compression
#CONFIG_CRYPTO_DEFLATE=m
# CONFIG_CRYPTO_LZO is not setCONFIG_CRYPTO_842=yCONFIG_CRYPTO_LZ4=yCONFIG_CRYPTO_LZ4HC=yCONFIG_CRYPTO_ZSTD=y
#
# Random Number Generation
#CONFIG_CRYPTO_ANSI_CPRNG=mCONFIG_CRYPTO_DRBG_MENU=yCONFIG_CRYPTO_DRBG_HMAC=y
# CONFIG_CRYPTO_DRBG_HASH is not setCONFIG_CRYPTO_DRBG_CTR=yCONFIG_CRYPTO_DRBG=yCONFIG_CRYPTO_JITTERENTROPY=yCONFIG_CRYPTO_USER_API=mCONFIG_CRYPTO_USER_API_HASH=m
# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
# CONFIG_CRYPTO_USER_API_RNG is not setCONFIG_CRYPTO_USER_API_AEAD=mCONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=yCONFIG_CRYPTO_STATS=yCONFIG_CRYPTO_HASH_INFO=y
#
# Crypto library routines
#CONFIG_CRYPTO_LIB_AES=yCONFIG_CRYPTO_LIB_ARC4=yCONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=mCONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
# CONFIG_CRYPTO_LIB_BLAKE2S is not setCONFIG_CRYPTO_LIB_CHACHA_GENERIC=yCONFIG_CRYPTO_LIB_CHACHA=yCONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519=mCONFIG_CRYPTO_LIB_CURVE25519_GENERIC=mCONFIG_CRYPTO_LIB_CURVE25519=mCONFIG_CRYPTO_LIB_DES=mCONFIG_CRYPTO_LIB_POLY1305_RSIZE=11CONFIG_CRYPTO_LIB_POLY1305_GENERIC=yCONFIG_CRYPTO_LIB_POLY1305=yCONFIG_CRYPTO_LIB_CHACHA20POLY1305=yCONFIG_CRYPTO_LIB_SHA256=y
# CONFIG_CRYPTO_HW is not setCONFIG_ASYMMETRIC_KEY_TYPE=yCONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=yCONFIG_X509_CERTIFICATE_PARSER=yCONFIG_PKCS8_PRIVATE_KEY_PARSER=mCONFIG_PKCS7_MESSAGE_PARSER=yCONFIG_PKCS7_TEST_KEY=y
# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set
#
# Certificates for signature checking
#CONFIG_SYSTEM_TRUSTED_KEYRING=yCONFIG_SYSTEM_TRUSTED_KEYS=""
# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
# CONFIG_SECONDARY_TRUSTED_KEYRING is not set
# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set
# end of Certificates for signature checking
CONFIG_BINARY_PRINTF=y
#
# Library routines
#CONFIG_RAID6_PQ=y
# CONFIG_RAID6_PQ_BENCHMARK is not setCONFIG_LINEAR_RANGES=yCONFIG_PACKING=yCONFIG_BITREVERSE=yCONFIG_GENERIC_STRNCPY_FROM_USER=yCONFIG_GENERIC_STRNLEN_USER=yCONFIG_GENERIC_NET_UTILS=yCONFIG_GENERIC_FIND_FIRST_BIT=yCONFIG_CORDIC=y
# CONFIG_PRIME_NUMBERS is not setCONFIG_RATIONAL=yCONFIG_GENERIC_PCI_IOMAP=yCONFIG_GENERIC_IOMAP=yCONFIG_ARCH_USE_CMPXCHG_LOCKREF=yCONFIG_ARCH_HAS_FAST_MULTIPLIER=yCONFIG_ARCH_USE_SYM_ANNOTATIONS=yCONFIG_CRC_CCITT=yCONFIG_CRC16=yCONFIG_CRC_T10DIF=yCONFIG_CRC_ITU_T=yCONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
# CONFIG_CRC32_SLICEBY8 is not set
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not setCONFIG_CRC32_BIT=y
# CONFIG_CRC64 is not setCONFIG_CRC4=mCONFIG_CRC7=yCONFIG_LIBCRC32C=y
# CONFIG_CRC8 is not setCONFIG_XXHASH=y
# CONFIG_RANDOM32_SELFTEST is not setCONFIG_842_COMPRESS=yCONFIG_842_DECOMPRESS=yCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=yCONFIG_LZO_COMPRESS=yCONFIG_LZO_DECOMPRESS=yCONFIG_LZ4_COMPRESS=yCONFIG_LZ4HC_COMPRESS=yCONFIG_LZ4_DECOMPRESS=yCONFIG_ZSTD_COMPRESS=yCONFIG_ZSTD_DECOMPRESS=y
# CONFIG_XZ_DEC is not setCONFIG_DECOMPRESS_GZIP=yCONFIG_DECOMPRESS_BZIP2=yCONFIG_DECOMPRESS_LZ4=yCONFIG_GENERIC_ALLOCATOR=yCONFIG_INTERVAL_TREE=yCONFIG_XARRAY_MULTI=yCONFIG_ASSOCIATIVE_ARRAY=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT_MAP=yCONFIG_HAS_DMA=yCONFIG_DMA_OPS=yCONFIG_NEED_SG_DMA_LENGTH=yCONFIG_NEED_DMA_MAP_STATE=yCONFIG_ARCH_DMA_ADDR_T_64BIT=yCONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED=yCONFIG_DMA_VIRT_OPS=yCONFIG_SWIOTLB=yCONFIG_DMA_COHERENT_POOL=y
# CONFIG_DMA_API_DEBUG is not setCONFIG_SGL_ALLOC=yCONFIG_CHECK_SIGNATURE=yCONFIG_CPUMASK_OFFSTACK=yCONFIG_CPU_RMAP=yCONFIG_DQL=yCONFIG_GLOB=yCONFIG_GLOB_SELFTEST=mCONFIG_NLATTR=yCONFIG_CLZ_TAB=yCONFIG_IRQ_POLL=yCONFIG_MPILIB=yCONFIG_DIMLIB=yCONFIG_OID_REGISTRY=yCONFIG_UCS2_STRING=yCONFIG_HAVE_GENERIC_VDSO=yCONFIG_GENERIC_GETTIMEOFDAY=yCONFIG_GENERIC_VDSO_TIME_NS=yCONFIG_FONT_SUPPORT=yCONFIG_FONTS=y
# CONFIG_FONT_8x8 is not set
# CONFIG_FONT_8x16 is not set
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
CONFIG_FONT_ACORN_8x8=y
CONFIG_FONT_MINI_4x6=y
# CONFIG_FONT_6x10 is not set
CONFIG_FONT_10x18=y
# CONFIG_FONT_SUN8x16 is not set
CONFIG_FONT_SUN12x22=y
# CONFIG_FONT_TER16x32 is not set
# CONFIG_FONT_6x8 is not setCONFIG_SG_POOL=yCONFIG_ARCH_HAS_PMEM_API=yCONFIG_MEMREGION=yCONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=yCONFIG_ARCH_HAS_COPY_MC=yCONFIG_ARCH_STACKWALK=yCONFIG_STACKDEPOT=yCONFIG_SBITMAP=yCONFIG_STRING_SELFTEST=m
# end of Library routines
#
# Kernel hacking
#
#
# printk and dmesg options # CONFIG_PRINTK_TIME=y # CONFIG_PRINTK_CALLER is not set CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 CONFIG_CONSOLE_LOGLEVEL_QUIET=4 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_BOOT_PRINTK_DELAY is not set CONFIG_DYNAMIC_DEBUG=y CONFIG_DYNAMIC_DEBUG_CORE=y CONFIG_SYMBOLIC_ERRNAME=y CONFIG_DEBUG_BUGVERBOSE=y # end of printk and dmesg options
#
# Compile-time checks and compiler options
#CONFIG_DEBUG_INFO=yCONFIG_DEBUG_INFO_REDUCED=y
# CONFIG_DEBUG_INFO_COMPRESSED is not set
# CONFIG_DEBUG_INFO_SPLIT is not set
# CONFIG_DEBUG_INFO_DWARF4 is not set
# CONFIG_GDB_SCRIPTS is not setCONFIG_ENABLE_MUST_CHECK=yCONFIG_FRAME_WARN=2048CONFIG_STRIP_ASM_SYMS=y
# CONFIG_READABLE_ASM is not setCONFIG_HEADERS_INSTALL=yCONFIG_DEBUG_SECTION_MISMATCH=yCONFIG_SECTION_MISMATCH_WARN_ONLY=yCONFIG_STACK_VALIDATION=yCONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
# end of Compile-time checks and compiler options
#
# Generic Kernel Debugging Instruments
#CONFIG_MAGIC_SYSRQ=yCONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1CONFIG_MAGIC_SYSRQ_SERIAL=yCONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_FS_ALLOW_ALL is not setCONFIG_DEBUG_FS_DISALLOW_MOUNT=y
# CONFIG_DEBUG_FS_ALLOW_NONE is not setCONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not setCONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
# CONFIG_UBSAN is not setCONFIG_HAVE_ARCH_KCSAN=y
# end of Generic Kernel Debugging Instruments
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_MISC is not set
#
# Memory Debugging
#CONFIG_PAGE_EXTENSION=y
# CONFIG_DEBUG_PAGEALLOC is not setCONFIG_PAGE_OWNER=yCONFIG_PAGE_POISONING=yCONFIG_PAGE_POISONING_NO_SANITY=yCONFIG_PAGE_POISONING_ZERO=yCONFIG_DEBUG_PAGE_REF=y
# CONFIG_DEBUG_RODATA_TEST is not setCONFIG_ARCH_HAS_DEBUG_WX=yCONFIG_DEBUG_WX=yCONFIG_GENERIC_PTDUMP=yCONFIG_PTDUMP_CORE=yCONFIG_PTDUMP_DEBUGFS=yCONFIG_DEBUG_OBJECTS=y
# CONFIG_DEBUG_OBJECTS_SELFTEST is not setCONFIG_DEBUG_OBJECTS_FREE=y
# CONFIG_DEBUG_OBJECTS_TIMERS is not set
# CONFIG_DEBUG_OBJECTS_WORK is not set
# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set
# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not setCONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not setCONFIG_HAVE_DEBUG_KMEMLEAK=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_STACK_USAGE is not setCONFIG_SCHED_STACK_END_CHECK=yCONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_VM_PGTABLE is not setCONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
# CONFIG_DEBUG_VIRTUAL is not setCONFIG_DEBUG_MEMORY_INIT=yCONFIG_MEMORY_NOTIFIER_ERROR_INJECT=mCONFIG_DEBUG_PER_CPU_MAPS=yCONFIG_HAVE_ARCH_KASAN=yCONFIG_HAVE_ARCH_KASAN_VMALLOC=yCONFIG_CC_HAS_KASAN_GENERIC=yCONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
# CONFIG_KASAN is not set
# end of Memory Debugging
CONFIG_DEBUG_SHIRQ=y
#
# Debug Oops, Lockups and Hangs
#CONFIG_PANIC_ON_OOPS=yCONFIG_PANIC_ON_OOPS_VALUE=1CONFIG_PANIC_TIMEOUT=0CONFIG_LOCKUP_DETECTOR=yCONFIG_SOFTLOCKUP_DETECTOR=y
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not setCONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0CONFIG_HARDLOCKUP_DETECTOR_PERF=yCONFIG_HARDLOCKUP_CHECK_TIMESTAMP=yCONFIG_HARDLOCKUP_DETECTOR=yCONFIG_BOOTPARAM_HARDLOCKUP_PANIC=yCONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=1
# CONFIG_DETECT_HUNG_TASK is not set
# CONFIG_WQ_WATCHDOG is not setCONFIG_TEST_LOCKUP=m
# end of Debug Oops, Lockups and Hangs
#
# Scheduler Debugging
#CONFIG_SCHED_DEBUG=yCONFIG_SCHED_INFO=yCONFIG_SCHEDSTATS=y
# end of Scheduler Debugging
CONFIG_DEBUG_TIMEKEEPING=y
#
# Lock Debugging (spinlocks, mutexes, etc...)
#CONFIG_LOCK_DEBUGGING_SUPPORT=y
# CONFIG_PROVE_LOCKING is not setCONFIG_LOCK_STAT=yCONFIG_DEBUG_RT_MUTEXES=yCONFIG_DEBUG_SPINLOCK=yCONFIG_DEBUG_MUTEXES=yCONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
# CONFIG_DEBUG_RWSEMS is not setCONFIG_DEBUG_LOCK_ALLOC=yCONFIG_LOCKDEP=y
# CONFIG_DEBUG_LOCKDEP is not setCONFIG_DEBUG_ATOMIC_SLEEP=y
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not setCONFIG_LOCK_TORTURE_TEST=m
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_SCF_TORTURE_TEST is not set
# CONFIG_CSD_LOCK_WAIT_DEBUG is not set
# end of Lock Debugging (spinlocks, mutexes, etc...)
CONFIG_STACKTRACE=yCONFIG_WARN_ALL_UNSEEDED_RANDOM=y
# CONFIG_DEBUG_KOBJECT is not set
#
# Debug kernel data structures
#CONFIG_DEBUG_LIST=y
# CONFIG_DEBUG_PLIST is not setCONFIG_DEBUG_SG=y
# CONFIG_DEBUG_NOTIFIERS is not set
# CONFIG_BUG_ON_DATA_CORRUPTION is not set
# end of Debug kernel data structures
# CONFIG_DEBUG_CREDENTIALS is not set
#
# RCU Debugging
#CONFIG_TORTURE_TEST=mCONFIG_RCU_SCALE_TEST=mCONFIG_RCU_TORTURE_TEST=mCONFIG_RCU_REF_SCALE_TEST=mCONFIG_RCU_CPU_STALL_TIMEOUT=21CONFIG_RCU_TRACE=yCONFIG_RCU_EQS_DEBUG=y
# end of RCU Debugging
CONFIG_DEBUG_WQ_FORCE_RR_CPU=y
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not setCONFIG_CPU_HOTPLUG_STATE_CONTROL=yCONFIG_LATENCYTOP=yCONFIG_USER_STACKTRACE_SUPPORT=yCONFIG_NOP_TRACER=yCONFIG_HAVE_FUNCTION_TRACER=yCONFIG_HAVE_FUNCTION_GRAPH_TRACER=yCONFIG_HAVE_DYNAMIC_FTRACE=yCONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=yCONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=yCONFIG_HAVE_FTRACE_MCOUNT_RECORD=yCONFIG_HAVE_SYSCALL_TRACEPOINTS=yCONFIG_HAVE_FENTRY=yCONFIG_HAVE_C_RECORDMCOUNT=yCONFIG_TRACE_CLOCK=yCONFIG_RING_BUFFER=yCONFIG_EVENT_TRACING=yCONFIG_CONTEXT_SWITCH_TRACER=yCONFIG_TRACING=yCONFIG_GENERIC_TRACER=yCONFIG_TRACING_SUPPORT=yCONFIG_FTRACE=y
# CONFIG_BOOTTIME_TRACING is not setCONFIG_FUNCTION_TRACER=y
# CONFIG_FUNCTION_GRAPH_TRACER is not setCONFIG_DYNAMIC_FTRACE=yCONFIG_DYNAMIC_FTRACE_WITH_REGS=yCONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=yCONFIG_FUNCTION_PROFILER=yCONFIG_STACK_TRACER=y
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_SCHED_TRACER is not setCONFIG_HWLAT_TRACER=y
# CONFIG_MMIOTRACE is not setCONFIG_FTRACE_SYSCALLS=y
# CONFIG_TRACER_SNAPSHOT is not setCONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
# CONFIG_PROFILE_ALL_BRANCHES is not setCONFIG_BLK_DEV_IO_TRACE=yCONFIG_UPROBE_EVENTS=yCONFIG_BPF_EVENTS=yCONFIG_DYNAMIC_EVENTS=yCONFIG_PROBE_EVENTS=yCONFIG_FTRACE_MCOUNT_RECORD=yCONFIG_SYNTH_EVENTS=y
# CONFIG_HIST_TRIGGERS is not setCONFIG_TRACE_EVENT_INJECT=y
# CONFIG_TRACEPOINT_BENCHMARK is not setCONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_TRACE_EVAL_MAP_FILE is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
# CONFIG_RING_BUFFER_STARTUP_TEST is not setCONFIG_PREEMPTIRQ_DELAY_TEST=mCONFIG_SYNTH_EVENT_GEN_TEST=m
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not setCONFIG_SAMPLES=yCONFIG_SAMPLE_AUXDISPLAY=y
# CONFIG_SAMPLE_TRACE_EVENTS is not setCONFIG_SAMPLE_TRACE_PRINTK=mCONFIG_SAMPLE_FTRACE_DIRECT=mCONFIG_SAMPLE_TRACE_ARRAY=mCONFIG_SAMPLE_KOBJECT=mCONFIG_SAMPLE_HW_BREAKPOINT=mCONFIG_SAMPLE_KFIFO=m
# CONFIG_SAMPLE_RPMSG_CLIENT is not setCONFIG_SAMPLE_CONFIGFS=mCONFIG_SAMPLE_CONNECTOR=mCONFIG_SAMPLE_HIDRAW=yCONFIG_SAMPLE_PIDFD=yCONFIG_SAMPLE_TIMER=y
# CONFIG_SAMPLE_UHID is not setCONFIG_SAMPLE_VFIO_MDEV_MDPY_FB=mCONFIG_SAMPLE_ANDROID_BINDERFS=yCONFIG_SAMPLE_VFS=yCONFIG_SAMPLE_WATCHDOG=y
# CONFIG_SAMPLE_WATCH_QUEUE is not setCONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
# CONFIG_STRICT_DEVMEM is not set
#
# x86 Debugging # CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y CONFIG_EARLY_PRINTK_USB=y CONFIG_X86_VERBOSE_BOOTUP=y CONFIG_EARLY_PRINTK=y CONFIG_EARLY_PRINTK_DBGP=y CONFIG_EARLY_PRINTK_USB_XDBC=y CONFIG_EFI_PGT_DUMP=y CONFIG_DEBUG_TLBFLUSH=y CONFIG_HAVE_MMIOTRACE_SUPPORT=y # CONFIG_X86_DECODER_SELFTEST is not set # CONFIG_IO_DELAY_0X80 is not set # CONFIG_IO_DELAY_0XED is not set # CONFIG_IO_DELAY_UDELAY is not set CONFIG_IO_DELAY_NONE=y # CONFIG_DEBUG_BOOT_PARAMS is not set # CONFIG_CPA_DEBUG is not set # CONFIG_DEBUG_ENTRY is not set CONFIG_DEBUG_NMI_SELFTEST=y CONFIG_X86_DEBUG_FPU=y # CONFIG_PUNIT_ATOM_DEBUG is not set CONFIG_UNWINDER_ORC=y # CONFIG_UNWINDER_FRAME_POINTER is not set # end of x86 Debugging
#
# Kernel Testing and Coverage
#CONFIG_KUNIT=mCONFIG_KUNIT_DEBUGFS=yCONFIG_KUNIT_TEST=m
# CONFIG_KUNIT_EXAMPLE_TEST is not set
# CONFIG_KUNIT_ALL_TESTS is not setCONFIG_NOTIFIER_ERROR_INJECTION=m
# CONFIG_PM_NOTIFIER_ERROR_INJECT is not set
# CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set
# CONFIG_FAULT_INJECTION is not setCONFIG_ARCH_HAS_KCOV=yCONFIG_CC_HAS_SANCOV_TRACE_PC=yCONFIG_KCOV=y
# CONFIG_KCOV_ENABLE_COMPARISONS is not set
# CONFIG_KCOV_INSTRUMENT_ALL is not setCONFIG_KCOV_IRQ_AREA_SIZE=0x40000CONFIG_RUNTIME_TESTING_MENU=y
# CONFIG_LKDTM is not set
# CONFIG_TEST_LIST_SORT is not set
# CONFIG_TEST_MIN_HEAP is not set
# CONFIG_TEST_SORT is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_RBTREE_TEST is not set
# CONFIG_REED_SOLOMON_TEST is not set
# CONFIG_INTERVAL_TREE_TEST is not set
# CONFIG_PERCPU_TEST is not set
# CONFIG_ATOMIC64_SELFTEST is not set
# CONFIG_TEST_HEXDUMP is not set
# CONFIG_TEST_STRING_HELPERS is not set
# CONFIG_TEST_STRSCPY is not set
# CONFIG_TEST_KSTRTOX is not setCONFIG_TEST_PRINTF=yCONFIG_TEST_BITMAP=y
# CONFIG_TEST_UUID is not set
# CONFIG_TEST_XARRAY is not set
# CONFIG_TEST_OVERFLOW is not set
# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_IDA is not set
# CONFIG_TEST_LKM is not setCONFIG_TEST_BITOPS=m
# CONFIG_TEST_VMALLOC is not setCONFIG_TEST_USER_COPY=mCONFIG_TEST_BPF=m
# CONFIG_TEST_BLACKHOLE_DEV is not set
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_TEST_FIRMWARE is not setCONFIG_TEST_SYSCTL=y
# CONFIG_BITFIELD_KUNIT is not setCONFIG_SYSCTL_KUNIT_TEST=mCONFIG_LIST_KUNIT_TEST=mCONFIG_LINEAR_RANGES_TEST=m
# CONFIG_BITS_TEST is not set
# CONFIG_TEST_UDELAY is not setCONFIG_TEST_STATIC_KEYS=m
# CONFIG_TEST_MEMCAT_P is not setCONFIG_TEST_STACKINIT=y
# CONFIG_TEST_MEMINIT is not set
# CONFIG_TEST_FREE_PAGES is not set
# CONFIG_TEST_FPU is not set
# CONFIG_MEMTEST is not setCONFIG_HYPERV_TESTING=y
# end of Kernel Testing and Coverage # end of Kernel hacking
#!/bin/sh
export_top_env()
{
export suite='locktorture'
export testcase='locktorture'
export category='functional'
export need_modules=true
export need_memory='300MB'
export runtime=300
export job_origin='/lkp-src/allot/rand/vm-snb/locktorture.yaml'
export queue_cmdline_keys='branch
commit
queue_at_least_once'
export queue='validate'
export testbox='vm-snb-98'
export tbox_group='vm-snb'
export branch='linux-review/Will-Deacon/tlb-Fix-access-and-soft-dirty-bit-management/20201120-223809'
export commit='e242a269fa4b7aee0b157ce5b1d7d12179fc3c44'
export kconfig='x86_64-randconfig-a002-20201120'
export repeat_to=4
export nr_vm=160
export submit_id='5fb862332a154a3154a46b86'
export job_file='/lkp/jobs/scheduled/vm-snb-98/locktorture-300s-default-yocto-x86_64-minimal-20190520.cgz-e242a269fa4b7aee0b157ce5b1d7d12179fc3c44-20201121-12628-4xi74e-2.yaml'
export id='640413995831ed649bbcee0a6409ee6241a99468'
export queuer_version='/lkp-src'
export model='qemu-system-x86_64 -enable-kvm -cpu SandyBridge'
export nr_cpu=2
export memory='8G'
export need_kconfig='CONFIG_LOCK_TORTURE_TEST=m
CONFIG_KVM_GUEST=y'
export ssh_base_port=23032
export rootfs='yocto-x86_64-minimal-20190520.cgz'
export compiler='gcc-9'
export enqueue_time='2020-11-21 08:41:23 +0800'
export _id='5fb862332a154a3154a46b86'
export _rt='/result/locktorture/300s-default/vm-snb/yocto-x86_64-minimal-20190520.cgz/x86_64-randconfig-a002-20201120/gcc-9/e242a269fa4b7aee0b157ce5b1d7d12179fc3c44'
export user='lkp'
export result_root='/result/locktorture/300s-default/vm-snb/yocto-x86_64-minimal-20190520.cgz/x86_64-randconfig-a002-20201120/gcc-9/e242a269fa4b7aee0b157ce5b1d7d12179fc3c44/3'
export scheduler_version='/lkp/lkp/.src-20201120-230606'
export LKP_SERVER='internal-lkp-server'
export arch='x86_64'
export max_uptime=3600
export initrd='/osimage/yocto/yocto-x86_64-minimal-20190520.cgz'
export bootloader_append='root=/dev/ram0user=lkp job=/lkp/jobs/scheduled/vm-snb-98/locktorture-300s-default-yocto-x86_64-minimal-20190520.cgz-e242a269fa4b7aee0b157ce5b1d7d12179fc3c44-20201121-12628-4xi74e-2.yaml ARCH=x86_64
kconfig=x86_64-randconfig-a002-20201120
branch=linux-review/Will-Deacon/tlb-Fix-access-and-soft-dirty-bit-management/20201120-223809 commit=e242a269fa4b7aee0b157ce5b1d7d12179fc3c44 BOOT_IMAGE=/pkg/linux/x86_64-randconfig-a002-20201120/gcc-9/e242a269fa4b7aee0b157ce5b1d7d12179fc3c44/vmlinuz-5.10.0-rc3-00061-ge242a269fa4b max_uptime=3600 RESULT_ROOT=/result/locktorture/300s-default/vm-snb/yocto-x86_64-minimal-20190520.cgz/x86_64-randconfig-a002-20201120/gcc-9/e242a269fa4b7aee0b157ce5b1d7d12179fc3c44/3 LKP_SERVER=internal-lkp-server
selinux=0
debug
apic=debugsysrq_always_enabled
rcupdate.rcu_cpu_stall_timeout=100
net.ifnames=0
printk.devkmsg=on
panic=-1
softlockup_panic=1
nmi_watchdog=panic
oops=panic
load_ramdisk=2
prompt_ramdisk=0
drbd.minor_count=8
systemd.log_level=errignore_loglevel
console=tty0
earlyprintk=ttyS0,115200
console=ttyS0,115200
vga=normal
rw'
export modules_initrd='/pkg/linux/x86_64-randconfig-a002-20201120/gcc-9/e242a269fa4b7aee0b157ce5b1d7d12179fc3c44/modules.cgz'
export lkp_initrd='/osimage/user/lkp/lkp-x86_64.cgz'
export site='inn'
export LKP_CGI_PORT=80
export LKP_CIFS_PORT=139
export schedule_notify_address=
export queue_at_least_once=1
export kernel='/pkg/linux/x86_64-randconfig-a002-20201120/gcc-9/e242a269fa4b7aee0b157ce5b1d7d12179fc3c44/vmlinuz-5.10.0-rc3-00061-ge242a269fa4b'
export dequeue_time='2020-11-21 08:41:45 +0800'
export job_initrd='/lkp/jobs/scheduled/vm-snb-98/locktorture-300s-default-yocto-x86_64-minimal-20190520.cgz-e242a269fa4b7aee0b157ce5b1d7d12179fc3c44-20201121-12628-4xi74e-2.cgz'
[ -n "$LKP_SRC" ] ||
export LKP_SRC=/lkp/${user:-lkp}/src
}run_job()
{
echo $$ > $TMP/run-job.pid
. $LKP_SRC/lib/http.sh
. $LKP_SRC/lib/job.sh
. $LKP_SRC/lib/env.sh
export_top_env
run_monitor $LKP_SRC/monitors/wrapper kmsg run_monitor $LKP_SRC/monitors/wrapper heartbeat run_monitor $LKP_SRC/monitors/wrapper meminfo run_monitor $LKP_SRC/monitors/wrapper oom-killer run_monitor $LKP_SRC/monitors/plain/watchdog
run_test test='default' $LKP_SRC/tests/wrapper locktorture
}
extract_stats()
{
export stats_part_begin=
export stats_part_end=
$LKP_SRC/stats/wrapper locktorture
$LKP_SRC/stats/wrapper kmsg
$LKP_SRC/stats/wrapper meminfo
$LKP_SRC/stats/wrapper time locktorture.time $LKP_SRC/stats/wrapper dmesg $LKP_SRC/stats/wrapper kmsg $LKP_SRC/stats/wrapper last_state $LKP_SRC/stats/wrapper stderr $LKP_SRC/stats/wrapper time
}
"$@"
Will Deacon
maintainerRe: [tlb] e242a269fa: WARNING:at_mm/mmu_gather.c:#tlb_gather_mmu
Hmm, this is interesting but my x86-fu is a bit lacking:
Quoted 3 lines · kernel test robot
commit:
e242a269fa4b7aee0b157ce5b1d7d12179fc3c44("[PATCH 5/6] tlb:mmu_gather: Introducetlb_gather_mmu_fullmm()")
url: https://github.com/0day-ci/linux/commits/Will-Deacon/tlb-Fix-access-and-soft-dirty-bit-management/20201120-223809
base: https://git.kernel.org/cgit/linux/kernel/git/arm64/linux.git for-next/core
[...]
Quoted 1 line
[ 14.182822] WARNING: CPU: 0 PID: 1 at mm/mmu_gather.c:293 tlb_gather_mmu+0x40/0x99
This fires because free_ldt_pgtables() initialises an mmu_gather() with an end address > TASK_SIZE. In other words, this code:
unsigned long start = LDT_BASE_ADDR; unsigned long end = LDT_END_ADDR; if (!boot_cpu_has(X86_FEATURE_PTI)) return; tlb_gather_mmu(&tlb, mm, start, end);
seems to be passing kernel addresses to tlb_gather_mmu(), which will cause the range adjusment logic in __tlb_adjust_range() to round the base down to TASK_SIZE afaict. At which point, I suspect the low-level invalidation routine replaces the enormous range with a fullmm flush (see the check in flush_tlb_mm_range()).
If that's the case (and I would appreciate some input from somebody who knows what an LDT is), then I think the right answer is to replace this with a call to tlb_gather_mmu_fullmm, although I haven't ever anticipated these things working on kernel addresses and whether that would do the right kind of invalidation for x86 w/ PTI. A quick read of the code suggests it should work out...
Will
Will Deacon
maintainerPATCH 6/6 mm: proc: Avoid fullmm flush for young/dirty bit toggling
In reply to Will Deaconclear_refs_write() uses the 'fullmm' API for invalidating TLBs after updating the page-tables for the current mm. However, since the mm is not being freed, this can result in stale TLB entries on architectures which elide 'fullmm' invalidation.
Ensure that TLB invalidation is performed after updating soft-dirty entries via clear_refs_write() by using the non-fullmm API to MMU gather.
--- fs/proc/task_mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/proc/task_mmu.c +1 -1
@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm; } -tlb_gather_mmu_fullmm (&tlb, mm); +tlb_gather_mmu (&tlb, mm,0 ,TASK_SIZE );if (type ==CLEAR_REFS_SOFT_DIRTY ) {for (vma = mm->mmap; vma; vma = vma->vm_next) {if (!(vma->vm_flags &VM_SOFTDIRTY ))
Signature · 1 line
2.29.2.454.gaff20da3a2-goog
Re: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
Quoted 3 lines · Will Deacon
Ensure that TLB invalidation is performed after updating soft-dirty entries via
clear_refs_write()by using the non-fullmm API to MMU gather.
This code sequence looks bogus to begin with.
It does that
tlb_gather_mmu(&tlb, mm, 0, -1);
..
tlb_finish_mmu(&tlb, 0, -1);around the loop (all, your patch series changes those arguments), but it doesn't actually use "tlb" anywhere inside the loop itself that I can see.
Yeah., yeah, it sets the flush_pending thing etc, but that still sounds fundamentally wrong. It should do the proper range adjustments if/when it actually wals the range. No?
If I read this all right, it will do a full TLB flush even when it doesn't do anything (eg CLEAR_REFS_SOFT_DIRTY with no softdirty pages).
So this looks all kinds of bogus. Not your patch, but the code it patches.
Linus
Re: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
Quoted 2 lines · Linus Torvalds
This code sequence looks bogus to begin with.
Oh, never mind.
I was reading the patches out of order, because 4/6 showed up later in my inbox since it had other replies.
You seem to have fixed that bogosity in 4/6.
Linus
Re: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
In reply to Will DeaconQuoted 18 lines · Will Deacon
clear_refs_write()uses the 'fullmm' API for invalidating TLBs after updating the page-tables for the current mm. However, since the mm is not being freed, this can result in stale TLB entries on architectures which elide 'fullmm' invalidation.Ensure that TLB invalidation is performed after updating soft-dirty entries via
clear_refs_write()by using the non-fullmm API to MMU gather.Signed-off-by Will Deacon <[email protected]>--- fs/proc/task_mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)fs/proc/task_mmu.c +0
-0
fs/proc/task_mmu.c static ssize_t clear_refs_write(struct file *file, const char __user *buf, · line 1241
Quoted 5 lines
fs/proc/task_mmu.c +1
-1@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm; } -tlb_gather_mmu_fullmm (&tlb, mm); +tlb_gather_mmu (&tlb, mm,0 ,TASK_SIZE );
Let's assume my reply to patch 4 is wrong, and therefore we still need tlb_gather/finish_mmu() here. But then wouldn't this change deprive architectures other than ARM the opportunity to optimize based on the fact it's a full-mm flush?
It seems to me ARM's interpretation of tlb->fullmm is a special case, not the other way around.
Will Deacon
maintainerRe: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
Quoted 14 lines · Yu Zhao
Quoted 13 lines · Will Deacon
clear_refs_write()uses the 'fullmm' API for invalidating TLBs after updating the page-tables for the current mm. However, since the mm is not being freed, this can result in stale TLB entries on architectures which elide 'fullmm' invalidation.Ensure that TLB invalidation is performed after updating soft-dirty entries via
clear_refs_write()by using the non-fullmm API to MMU gather.Signed-off-by Will Deacon <[email protected]>--- fs/proc/task_mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Quoted 15 lines
fs/proc/task_mmu.c static ssize_t clear_refs_write(struct file *file, const char __user *buf, · line 1241
Quoted 10 lines
fs/proc/task_mmu.c +1
-1@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm; } -tlb_gather_mmu_fullmm (&tlb, mm); +tlb_gather_mmu (&tlb, mm,0 ,TASK_SIZE );Let's assume my reply to patch 4 is wrong, and therefore we still need tlb_gather/finish_mmu() here. But then wouldn't this change deprive architectures other than ARM the opportunity to optimize based on the fact it's a full-mm flush?
Only for the soft-dirty case, but I think TLB invalidation is required there because we are write-protecting the entries and I don't see any mechanism to handle lazy invalidation for that (compared with the aging case, which is handled via pte_accessible()).
Furthermore, If we decide that we can relax the TLB invalidation requirements here, then I'd much rather than was done deliberately, rather than as an accidental side-effect of another commit (since I think the current behaviour was a consequence of 7a30df49f63a).
Quoted 2 lines
It seems to me ARM's interpretation of
tlb->fullmmis a special case, not the other way around.
Although I agree that this is subtle and error-prone (which is why I'm trying to make the API more explicit here), it _is_ documented clearly in asm-generic/tlb.h:
* - mmu_gather::fullmm
*
* A flag set by tlb_gather_mmu() to indicate we're going to free
* the entire mm; this allows a number of optimizations.
*
* - We can ignore tlb_{start,end}_vma(); because we don't
* care about ranges. Everything will be shot down.
*
* - (RISC) architectures that use ASIDs can cycle to a new ASID
* and delay the invalidation until ASID space runs out.
Will
Re: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
Quoted 15 lines · Will Deacon
Quoted 14 lines · Yu Zhao
Quoted 13 lines · Will Deacon
clear_refs_write()uses the 'fullmm' API for invalidating TLBs after updating the page-tables for the current mm. However, since the mm is not being freed, this can result in stale TLB entries on architectures which elide 'fullmm' invalidation.Ensure that TLB invalidation is performed after updating soft-dirty entries via
clear_refs_write()by using the non-fullmm API to MMU gather.Signed-off-by Will Deacon <[email protected]>--- fs/proc/task_mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Quoted 15 lines
Quoted 7 lines
Quoted 7 lines
fs/proc/task_mmu.c +0
-0@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm;Quoted 8 lines
fs/proc/task_mmu.c static ssize_t clear_refs_write(struct file *file, const char __user *buf, · line 1241
Quoted 3 lines
fs/proc/task_mmu.c +1
-1} -tlb_gather_mmu_fullmm (&tlb, mm); +tlb_gather_mmu (&tlb, mm,0 ,TASK_SIZE );Let's assume my reply to patch 4 is wrong, and therefore we still need tlb_gather/finish_mmu() here. But then wouldn't this change deprive architectures other than ARM the opportunity to optimize based on the fact it's a full-mm flush?
I double checked my conclusion on patch 4, and aside from a couple of typos, it still seems correct after the weekend.
Quoted 4 lines
Only for the soft-dirty case, but I think TLB invalidation is required there because we are write-protecting the entries and I don't see any mechanism to handle lazy invalidation for that (compared with the aging case, which is handled via
pte_accessible()).
The lazy invalidation for that is done when we write-protect a page, not an individual PTE. When we do so, our decision is based on both the dirty bit and the writable bit on each PTE mapping this page. So we only need to make sure we don't lose both on a PTE. And we don't here.
Quoted 4 lines
Furthermore, If we decide that we can relax the TLB invalidation requirements here, then I'd much rather than was done deliberately, rather than as an accidental side-effect of another commit (since I think the current behaviour was a consequence of
7a30df49f63a).
Nope. tlb_gather/finish_mmu() should be added by b3a81d0841a9 ("mm: fix KSM data corruption") in the first place.
Quoted 7 lines
Quoted 2 lines
It seems to me ARM's interpretation of
tlb->fullmmis a special case, not the other way around.Although I agree that this is subtle and error-prone (which is why I'm trying to make the API more explicit here), it _is_ documented clearly in
asm-generic/tlb.h:
Quoted 10 lines
* -
mmu_gather::fullmm
*
* A flag set bytlb_gather_mmu()to indicate we're going to free
* the entire mm; this allows a number of optimizations.
*
* - We can ignore tlb_{start,end}_vma(); because we don't
* care about ranges. Everything will be shot down.
*
* - (RISC) architectures that use ASIDs can cycle to a new ASID
* and delay the invalidation until ASID space runs out.
I'd leave the original tlb_gather/finish_mmu() for the first case and add a new API for the second case, the special case that only applies to exit_mmap()). This way we won't change any existing behaviors on other architectures, which seems important to me.
Additional cleanups to tlb_gather/finish_mmu() come thereafter.
Will Deacon
maintainerRe: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
Quoted 32 lines · Yu Zhao
Quoted 15 lines · Will Deacon
Quoted 14 lines · Yu Zhao
Quoted 13 lines · Will Deacon
clear_refs_write()uses the 'fullmm' API for invalidating TLBs after updating the page-tables for the current mm. However, since the mm is not being freed, this can result in stale TLB entries on architectures which elide 'fullmm' invalidation.Ensure that TLB invalidation is performed after updating soft-dirty entries via
clear_refs_write()by using the non-fullmm API to MMU gather.Signed-off-by Will Deacon <[email protected]>--- fs/proc/task_mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Quoted 15 lines
Quoted 7 lines
Quoted 7 lines
fs/proc/task_mmu.c +0
-0@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm;Quoted 8 lines
fs/proc/task_mmu.c static ssize_t clear_refs_write(struct file *file, const char __user *buf, · line 1241
Quoted 3 lines
fs/proc/task_mmu.c +1
-1} -tlb_gather_mmu_fullmm (&tlb, mm); +tlb_gather_mmu (&tlb, mm,0 ,TASK_SIZE );Let's assume my reply to patch 4 is wrong, and therefore we still need tlb_gather/finish_mmu() here. But then wouldn't this change deprive architectures other than ARM the opportunity to optimize based on the fact it's a full-mm flush?
Quoted 2 lines
I double checked my conclusion on patch 4, and aside from a couple of typos, it still seems correct after the weekend.
I still need to digest that, but I would prefer that we restore the invalidation first, and then have a subsequent commit to relax it. I find it hard to believe that the behaviour in mainline at the moment is deliberate.
That is, I'm not against optimising this, but I'd rather get it "obviously correct" first and the current code is definitely not that.
Quoted 10 lines
Quoted 4 lines
Only for the soft-dirty case, but I think TLB invalidation is required there because we are write-protecting the entries and I don't see any mechanism to handle lazy invalidation for that (compared with the aging case, which is handled via
pte_accessible()).The lazy invalidation for that is done when we write-protect a page, not an individual PTE. When we do so, our decision is based on both the dirty bit and the writable bit on each PTE mapping this page. So we only need to make sure we don't lose both on a PTE. And we don't here.
Sorry, I don't follow what you're getting at here (page vs pte). Please can you point me to the code you're referring to? The case I'm worried about is code that holds sufficient locks (e.g. mmap_sem + ptl) finding an entry where !pte_write() and assuming (despite pte_dirty()) that there can't be any concurrent modifications to the mapped page. Granted, I haven't found anything doing that, but I could not convince myself that it would be a bug to write such code, either.
Quoted 7 lines
Quoted 4 lines
Furthermore, If we decide that we can relax the TLB invalidation requirements here, then I'd much rather than was done deliberately, rather than as an accidental side-effect of another commit (since I think the current behaviour was a consequence of
7a30df49f63a).Nope. tlb_gather/finish_mmu() should be added by
b3a81d0841a9("mm: fix KSM data corruption") in the first place.
Sure, but if you check out b3a81d0841a9 then you have a fullmm TLB invalidation in tlb_finish_mmu(). 7a30df49f63a is what removed that, no?
Will
Re: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
Quoted 36 lines · Will Deacon
Quoted 32 lines · Yu Zhao
Quoted 15 lines · Will Deacon
Quoted 14 lines · Yu Zhao
Quoted 13 lines · Will Deacon
clear_refs_write()uses the 'fullmm' API for invalidating TLBs after updating the page-tables for the current mm. However, since the mm is not being freed, this can result in stale TLB entries on architectures which elide 'fullmm' invalidation.Ensure that TLB invalidation is performed after updating soft-dirty entries via
clear_refs_write()by using the non-fullmm API to MMU gather.Signed-off-by Will Deacon <[email protected]>--- fs/proc/task_mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Quoted 15 lines
Quoted 7 lines
Quoted 7 lines
fs/proc/task_mmu.c +0
-0@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm;Quoted 8 lines
fs/proc/task_mmu.c static ssize_t clear_refs_write(struct file *file, const char __user *buf, · line 1241
Quoted 3 lines
fs/proc/task_mmu.c +1
-1} -tlb_gather_mmu_fullmm (&tlb, mm); +tlb_gather_mmu (&tlb, mm,0 ,TASK_SIZE );Let's assume my reply to patch 4 is wrong, and therefore we still need tlb_gather/finish_mmu() here. But then wouldn't this change deprive architectures other than ARM the opportunity to optimize based on the fact it's a full-mm flush?
Quoted 2 lines
I double checked my conclusion on patch 4, and aside from a couple of typos, it still seems correct after the weekend.
Quoted 6 lines
I still need to digest that, but I would prefer that we restore the invalidation first, and then have a subsequent commit to relax it. I find it hard to believe that the behaviour in mainline at the moment is deliberate.
That is, I'm not against optimising this, but I'd rather get it "obviously correct" first and the current code is definitely not that.
I wouldn't mind having this patch and patch 4 if the invalidation they restore were in a correct state -- b3a81d0841a9 ("mm: fix KSM data corruption") isn't correct to start with.
It is complicated, so please bear with me. Let's study this by looking at examples this time.
Quoted 11 lines
Quoted 10 lines
Quoted 4 lines
Only for the soft-dirty case, but I think TLB invalidation is required there because we are write-protecting the entries and I don't see any mechanism to handle lazy invalidation for that (compared with the aging case, which is handled via
pte_accessible()).The lazy invalidation for that is done when we write-protect a page, not an individual PTE. When we do so, our decision is based on both the dirty bit and the writable bit on each PTE mapping this page. So we only need to make sure we don't lose both on a PTE. And we don't here.
Quoted 7 lines
Sorry, I don't follow what you're getting at here (page vs pte). Please can you point me to the code you're referring to? The case I'm worried about is code that holds sufficient locks (e.g.
mmap_sem+ ptl) finding an entry where !pte_write() and assuming (despitepte_dirty()) that there can't be any concurrent modifications to the mapped page. Granted, I haven't found anything doing that, but I could not convince myself that it would be a bug to write such code, either.
Example 1: memory corruption is still possible with patch 4 & 6
CPU0 CPU1 CPU2 CPU3 ---- ---- ---- ---- userspace page writeback
[cache writable
PTE in TLB]
inc_tlb_flush_pending()
clean_record_pte()
pte_mkclean()
tlb_gather_mmu() [set mm_tlb_flush_pending()] clear_refs_write() pte_wrprotect()
page_mkclean_one() !pte_dirty() && !pte_write() [true, no flush]
write page to disk
Write to page
[using stale PTE]
drop clean page [data integrity compromised]
flush_tlb_range()
tlb_finish_mmu()
[flush (with patch 4)]
Example 2: why no flush when write-protecting is not a problem (after we fix the problem correctly by adding mm_tlb_flush_pending()).
Case a:
CPU0 CPU1 CPU2 CPU3 ---- ---- ---- ---- userspace page writeback
[cache writable
PTE in TLB]
inc_tlb_flush_pending()
clean_record_pte()
pte_mkclean()
clear_refs_write()
pte_wrprotect()
page_mkclean_one()
!pte_dirty() && !pte_write() &&
!mm_tlb_flush_pending()
[false: flush]
write page to disk Write to page
[page fault]
drop clean page [data integrity guaranteed]
flush_tlb_range()
Case b:
CPU0 CPU1 CPU2 ---- ---- ---- userspace page writeback
[cache writable
PTE in TLB]
clear_refs_write()
pte_wrprotect()
[pte_dirty() is false]
page_mkclean_one() !pte_dirty() && !pte_write() && !mm_tlb_flush_pending() [true: no flush]
write page to disk
Write to page
[h/w tries to set
the dirty bit
but sees write-
protected PTE,
page fault]
drop clean page [data integrity guaranteed]
Case c:
CPU0 CPU1 CPU2 ---- ---- ---- userspace page writeback
[cache writable
PTE in TLB]
clear_refs_write()
pte_wrprotect()
[pte_dirty() is true]
page_mkclean_one() !pte_dirty() && !pte_write() && !mm_tlb_flush_pending() [false: flush]
write page to disk
Write to page
[page fault]
drop clean page [data integrity guaranteed]
Quoted 6 lines
Quoted 6 lines
Quoted 4 lines
Furthermore, If we decide that we can relax the TLB invalidation requirements here, then I'd much rather than was done deliberately, rather than as an accidental side-effect of another commit (since I think the current behaviour was a consequence of
7a30df49f63a).Nope. tlb_gather/finish_mmu() should be added by
b3a81d0841a9
^^^^^^ shouldn't
Another typo, I apologize.
Quoted 6 lines
Quoted 1 line
("mm: fix KSM data corruption") in the first place.
Sure, but if you check out
b3a81d0841a9then you have a fullmm TLB invalidation intlb_finish_mmu().7a30df49f63ais what removed that, no?Will
Will Deacon
maintainerRe: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
Quoted 44 lines · Yu Zhao
Quoted 36 lines · Will Deacon
Quoted 32 lines · Yu Zhao
Quoted 15 lines · Will Deacon
Quoted 14 lines · Yu Zhao
Quoted 13 lines · Will Deacon
clear_refs_write()uses the 'fullmm' API for invalidating TLBs after updating the page-tables for the current mm. However, since the mm is not being freed, this can result in stale TLB entries on architectures which elide 'fullmm' invalidation.Ensure that TLB invalidation is performed after updating soft-dirty entries via
clear_refs_write()by using the non-fullmm API to MMU gather.Signed-off-by Will Deacon <[email protected]>--- fs/proc/task_mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Quoted 15 lines
Quoted 7 lines
Quoted 7 lines
fs/proc/task_mmu.c +0
-0@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm;Quoted 8 lines
fs/proc/task_mmu.c static ssize_t clear_refs_write(struct file *file, const char __user *buf, · line 1241
Quoted 3 lines
fs/proc/task_mmu.c +1
-1} -tlb_gather_mmu_fullmm (&tlb, mm); +tlb_gather_mmu (&tlb, mm,0 ,TASK_SIZE );Let's assume my reply to patch 4 is wrong, and therefore we still need tlb_gather/finish_mmu() here. But then wouldn't this change deprive architectures other than ARM the opportunity to optimize based on the fact it's a full-mm flush?
Quoted 2 lines
I double checked my conclusion on patch 4, and aside from a couple of typos, it still seems correct after the weekend.
Quoted 6 lines
I still need to digest that, but I would prefer that we restore the invalidation first, and then have a subsequent commit to relax it. I find it hard to believe that the behaviour in mainline at the moment is deliberate.
That is, I'm not against optimising this, but I'd rather get it "obviously correct" first and the current code is definitely not that.
Quoted 6 lines
I wouldn't mind having this patch and patch 4 if the invalidation they restore were in a correct state --
b3a81d0841a9("mm: fix KSM data corruption") isn't correct to start with.It is complicated, so please bear with me. Let's study this by looking at examples this time.
Thanks for putting these together. If you're right, then it looks like it's even worse than I thought :(
Quoted 25 lines
Quoted 11 lines
Quoted 10 lines
Quoted 4 lines
Only for the soft-dirty case, but I think TLB invalidation is required there because we are write-protecting the entries and I don't see any mechanism to handle lazy invalidation for that (compared with the aging case, which is handled via
pte_accessible()).The lazy invalidation for that is done when we write-protect a page, not an individual PTE. When we do so, our decision is based on both the dirty bit and the writable bit on each PTE mapping this page. So we only need to make sure we don't lose both on a PTE. And we don't here.
Quoted 7 lines
Sorry, I don't follow what you're getting at here (page vs pte). Please can you point me to the code you're referring to? The case I'm worried about is code that holds sufficient locks (e.g.
mmap_sem+ ptl) finding an entry where !pte_write() and assuming (despitepte_dirty()) that there can't be any concurrent modifications to the mapped page. Granted, I haven't found anything doing that, but I could not convince myself that it would be a bug to write such code, either.Example 1: memory corruption is still possible with patch 4 & 6
CPU0 CPU1 CPU2 CPU3 ---- ---- ---- ---- userspace page writeback
Quoted 6 lines
[cache writable
PTE in TLB]
inc_tlb_flush_pending()
clean_record_pte()
pte_mkclean()
This path: ^^^^^ looks a bit weird to me and I _think_ only happens
via some vmware DRM driver (i.e. the only caller of clean_record_shared_mapping_range()). Are you sure that's operating on pages that can be reclaimed? I have a feeling it might all be pinned.
Quoted 14 lines
tlb_gather_mmu()[setmm_tlb_flush_pending()]clear_refs_write()pte_wrprotect()
page_mkclean_one()!pte_dirty() && !pte_write() [true, no flush]write page to disk
Write to page
[using stale PTE]
Quoted 7 lines
drop clean page [data integrity compromised]
flush_tlb_range()
tlb_finish_mmu()
[flush (with patch 4)]
Setting my earlier comment aside, I think a useful observation here is that even with correct TLB invalidation, there is still a window between modifying the page-table and flushing the TLB where another CPU could see the updated page-table and incorrectly elide a flush. In these cases we need to rely either on locking or use of tlb_flush_pending() to ensure the correct behaviour.
Quoted 2 lines
Example 2: why no flush when write-protecting is not a problem (after we fix the problem correctly by adding
mm_tlb_flush_pending()).
So here you add an mm_tlb_flush_pending() check to the reclaim path to resolve the race above.
Quoted 49 lines
Case a:
CPU0 CPU1 CPU2 CPU3 ---- ---- ---- ---- userspace page writeback[cache writable
PTE in TLB]inc_tlb_flush_pending() clean_record_pte() pte_mkclean() clear_refs_write() pte_wrprotect() page_mkclean_one() !pte_dirty() && !pte_write() && !mm_tlb_flush_pending() [false: flush] write page to diskWrite to page
[page fault]drop clean page [data integrity guaranteed]
flush_tlb_range()Case b:
CPU0 CPU1 CPU2 ---- ---- ---- userspace page writeback[cache writable
PTE in TLB]
clear_refs_write()
pte_wrprotect()
[pte_dirty()is false]
page_mkclean_one()!pte_dirty() && !pte_write() && !mm_tlb_flush_pending() [true: no flush]
Quoted 8 lines
write page to disk
Write to page
[h/w tries to set
the dirty bit
but sees write-
protected PTE,
page fault]
I agree with you for this example, but I think if the page writeback ran on CPU 1 after clear_refs_write() then we could have a problem: the updated pte could sit in the store buffer of CPU1 and the walker on CPU0 would be able to set the dirty bit. TLB invalidation in clear_refs_write() would prevent that.
Will
Re: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
In reply to Yu ZhaoQuoted 195 lines · Yu Zhao
Quoted 36 lines · Will Deacon
Quoted 32 lines · Yu Zhao
Quoted 15 lines · Will Deacon
Quoted 14 lines · Yu Zhao
Quoted 13 lines · Will Deacon
clear_refs_write()uses the 'fullmm' API for invalidating TLBs after updating the page-tables for the current mm. However, since the mm is not being freed, this can result in stale TLB entries on architectures which elide 'fullmm' invalidation.Ensure that TLB invalidation is performed after updating soft-dirty entries via
clear_refs_write()by using the non-fullmm API to MMU gather.Signed-off-by Will Deacon <[email protected]>--- fs/proc/task_mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Quoted 15 lines
Quoted 7 lines
Quoted 7 lines
fs/proc/task_mmu.c +0
-0@@ -1238,7 +1238,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, count = -EINTR ; goto out_mm;Quoted 8 lines
fs/proc/task_mmu.c static ssize_t clear_refs_write(struct file *file, const char __user *buf, · line 1241
Quoted 3 lines
fs/proc/task_mmu.c +1
-1} -tlb_gather_mmu_fullmm (&tlb, mm); +tlb_gather_mmu (&tlb, mm,0 ,TASK_SIZE );Let's assume my reply to patch 4 is wrong, and therefore we still need tlb_gather/finish_mmu() here. But then wouldn't this change deprive architectures other than ARM the opportunity to optimize based on the fact it's a full-mm flush?
Quoted 2 lines
I double checked my conclusion on patch 4, and aside from a couple of typos, it still seems correct after the weekend.
Quoted 6 lines
I still need to digest that, but I would prefer that we restore the invalidation first, and then have a subsequent commit to relax it. I find it hard to believe that the behaviour in mainline at the moment is deliberate.
That is, I'm not against optimising this, but I'd rather get it "obviously correct" first and the current code is definitely not that.
I wouldn't mind having this patch and patch 4 if the invalidation they restore were in a correct state --
b3a81d0841a9("mm: fix KSM data corruption") isn't correct to start with.It is complicated, so please bear with me. Let's study this by looking at examples this time.
Quoted 11 lines
Quoted 10 lines
Quoted 4 lines
Only for the soft-dirty case, but I think TLB invalidation is required there because we are write-protecting the entries and I don't see any mechanism to handle lazy invalidation for that (compared with the aging case, which is handled via
pte_accessible()).The lazy invalidation for that is done when we write-protect a page, not an individual PTE. When we do so, our decision is based on both the dirty bit and the writable bit on each PTE mapping this page. So we only need to make sure we don't lose both on a PTE. And we don't here.
Quoted 7 lines
Sorry, I don't follow what you're getting at here (page vs pte). Please can you point me to the code you're referring to? The case I'm worried about is code that holds sufficient locks (e.g.
mmap_sem+ ptl) finding an entry where !pte_write() and assuming (despitepte_dirty()) that there can't be any concurrent modifications to the mapped page. Granted, I haven't found anything doing that, but I could not convince myself that it would be a bug to write such code, either.Example 1: memory corruption is still possible with patch 4 & 6
CPU0 CPU1 CPU2 CPU3 ---- ---- ---- ---- userspace page writeback[cache writable
PTE in TLB]
inc_tlb_flush_pending()
clean_record_pte()
pte_mkclean()
tlb_gather_mmu()[setmm_tlb_flush_pending()]clear_refs_write()pte_wrprotect()
page_mkclean_one()!pte_dirty() && !pte_write() [true, no flush]write page to disk
Write to page
[using stale PTE]drop clean page [data integrity compromised]
flush_tlb_range()
tlb_finish_mmu()
[flush (with patch 4)]Example 2: why no flush when write-protecting is not a problem (after we fix the problem correctly by adding
mm_tlb_flush_pending()).Case a:
CPU0 CPU1 CPU2 CPU3 ---- ---- ---- ---- userspace page writeback[cache writable
PTE in TLB]inc_tlb_flush_pending() clean_record_pte() pte_mkclean() clear_refs_write() pte_wrprotect() page_mkclean_one() !pte_dirty() && !pte_write() && !mm_tlb_flush_pending() [false: flush] write page to diskWrite to page
[page fault]drop clean page [data integrity guaranteed]
flush_tlb_range()Case b:
CPU0 CPU1 CPU2 ---- ---- ---- userspace page writeback[cache writable
PTE in TLB]
clear_refs_write()
pte_wrprotect()
[pte_dirty()is false]
page_mkclean_one()!pte_dirty() && !pte_write() && !mm_tlb_flush_pending() [true: no flush]write page to disk
Write to page
[h/w tries to set
the dirty bit
but sees write-
protected PTE,
page fault]drop clean page [data integrity guaranteed]
Case c:
CPU0 CPU1 CPU2 ---- ---- ---- userspace page writeback[cache writable
PTE in TLB]
clear_refs_write()
pte_wrprotect()
[pte_dirty()is true]
page_mkclean_one()!pte_dirty() && !pte_write() && !mm_tlb_flush_pending() [false: flush]write page to disk
Write to page
[page fault]drop clean page [data integrity guaranteed]
Quoted 7 lines
Quoted 6 lines
Quoted 6 lines
Quoted 4 lines
Furthermore, If we decide that we can relax the TLB invalidation requirements here, then I'd much rather than was done deliberately, rather than as an accidental side-effect of another commit (since I think the current behaviour was a consequence of
7a30df49f63a).Nope. tlb_gather/finish_mmu() should be added by
b3a81d0841a9^^^^^^ shouldn't
I read all examples Yu mentioned and think they are all correct. Furthermore, I agree with Yu we don't need the tlb gathering in clear_refs_writes from the beginning to just increase the tlb flush pending count since MADV_FREE already have it. However, I'd like to keep the last flushing logic in clear_refs_writes to avoid relying on the luck for better accuracy as well as guarantees.
So, IMHO, technically, Yu's points are all valid to me - we need to fix page writeback path. About this clear_refs_writes, Will's chages are still improvement(based on assumption if Yu agree on that we need the TLB flush for accuracy, not correctness) so still worth to have it.
Then, Wu, could you send the writeback path fix? Please Ccing Hugh, Mel, Adnrea and Nadav in next patchset since they all are experts in this domain - referenced in https://lkml.org/lkml/2015/4/15/565
Quoted 9 lines
Another typo, I apologize.
Quoted 6 lines
Quoted 1 line
("mm: fix KSM data corruption") in the first place.
Sure, but if you check out
b3a81d0841a9then you have a fullmm TLB invalidation intlb_finish_mmu().7a30df49f63ais what removed that, no?Will
Peter Zijlstra
maintainerRe: [PATCH 6/6] mm: proc: Avoid fullmm flush for young/dirty bit toggling
In reply to Yu ZhaoQuoted 2 lines · Yu Zhao
It seems to me ARM's interpretation of
tlb->fullmmis a special case, not the other way around.
I don't think ARM is special here, IIRC there were more architectures that did that.