From: Nicholas Piggin <npiggin@gmail.com> To: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org>, Catalin Marinas <catalin.marinas@arm.com>, Johannes Weiner <hannes@cmpxchg.org>, Hillf Danton <hdanton@sina.com>, Hugh Dickins <hughd@google.com>, Josef Bacik <josef@toxicpanda.com>, "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>, linux-arch <linux-arch@vger.kernel.org>, Linux-MM <linux-mm@kvack.org>, linuxppc-dev <linuxppc-dev@lists.ozlabs.org>, mm-commits@vger.kernel.org, Will Deacon <will.deacon@arm.com>, Matthew Wilcox <willy@infradead.org>, Yu Xu <xuyu@linux.alibaba.com>, Yang Shi <yang.shi@linux.alibaba.com> Subject: Re: [patch 01/15] mm/memory.c: avoid access flag update TLB flush for retried page fault Date: Wed, 29 Jul 2020 08:53:48 +1000 [thread overview] Message-ID: <1595974242.esf9644sf3.astroid@bobo.none> (raw) In-Reply-To: <CAHk-=wgrgRqeEo-YUgec7yQNkN+_+sHBP-NtCnfktCFEuPHTDQ@mail.gmail.com> Excerpts from Linus Torvalds's message of July 29, 2020 5:02 am: > On Tue, Jul 28, 2020 at 3:53 AM Nicholas Piggin <npiggin@gmail.com> wrote: >> >> The quirk is a problem with coprocessor where it's supposed to >> invalidate the translation after a fault but it doesn't, so we can get a >> read-only TLB stuck after something else does a RO->RW upgrade on the >> TLB. Something like that IIRC. Coprocessors have their own MMU which >> lives in the nest not the core, so you need a global TLB flush to >> invalidate that thing. > > So I assumed, but it does seem confused. > > Why? Because if there are stale translations on the co-processor, > there's no guarantee that one of the CPU's will have them and take a > fault. > > So I'm not seeing why a core CPU doing spurious TLB invalidation would > follow from "stale TLB in the Nest". If the nest MMU access faults, it sends an interrupt to the CPU and the driver tries to handle the page fault for it (I think that's how it works). > If anything, I think "we have a coprocessor that needs to never have > stale TLB entries" would impact the _regular_ TLB invalidates (by > update_mmu_cache()) and perhaps make those more aggressive, exactly > because the coprocessor may not handle the fault as gracefully. It could be done that way... Hmm although we do have something similar also in radix__ptep_set_access_flags for the relaxing permissions case so maybe this is required for not-present faults as well? I'm not actually sure now. But it's a bit weird and awkward because it's working around quirks in the hardware which aren't regular, not because we're _completely_ confused (I hope). Thanks, Nick
WARNING: multiple messages have this Message-ID (diff)
From: Nicholas Piggin <npiggin@gmail.com> To: Linus Torvalds <torvalds@linux-foundation.org> Cc: linux-arch <linux-arch@vger.kernel.org>, Hillf Danton <hdanton@sina.com>, mm-commits@vger.kernel.org, Catalin Marinas <catalin.marinas@arm.com>, Hugh Dickins <hughd@google.com>, Josef Bacik <josef@toxicpanda.com>, Will Deacon <will.deacon@arm.com>, Linux-MM <linux-mm@kvack.org>, Matthew Wilcox <willy@infradead.org>, Johannes Weiner <hannes@cmpxchg.org>, Yu Xu <xuyu@linux.alibaba.com>, Andrew Morton <akpm@linux-foundation.org>, linuxppc-dev <linuxppc-dev@lists.ozlabs.org>, Yang Shi <yang.shi@linux.alibaba.com>, "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com> Subject: Re: [patch 01/15] mm/memory.c: avoid access flag update TLB flush for retried page fault Date: Wed, 29 Jul 2020 08:53:48 +1000 [thread overview] Message-ID: <1595974242.esf9644sf3.astroid@bobo.none> (raw) In-Reply-To: <CAHk-=wgrgRqeEo-YUgec7yQNkN+_+sHBP-NtCnfktCFEuPHTDQ@mail.gmail.com> Excerpts from Linus Torvalds's message of July 29, 2020 5:02 am: > On Tue, Jul 28, 2020 at 3:53 AM Nicholas Piggin <npiggin@gmail.com> wrote: >> >> The quirk is a problem with coprocessor where it's supposed to >> invalidate the translation after a fault but it doesn't, so we can get a >> read-only TLB stuck after something else does a RO->RW upgrade on the >> TLB. Something like that IIRC. Coprocessors have their own MMU which >> lives in the nest not the core, so you need a global TLB flush to >> invalidate that thing. > > So I assumed, but it does seem confused. > > Why? Because if there are stale translations on the co-processor, > there's no guarantee that one of the CPU's will have them and take a > fault. > > So I'm not seeing why a core CPU doing spurious TLB invalidation would > follow from "stale TLB in the Nest". If the nest MMU access faults, it sends an interrupt to the CPU and the driver tries to handle the page fault for it (I think that's how it works). > If anything, I think "we have a coprocessor that needs to never have > stale TLB entries" would impact the _regular_ TLB invalidates (by > update_mmu_cache()) and perhaps make those more aggressive, exactly > because the coprocessor may not handle the fault as gracefully. It could be done that way... Hmm although we do have something similar also in radix__ptep_set_access_flags for the relaxing permissions case so maybe this is required for not-present faults as well? I'm not actually sure now. But it's a bit weird and awkward because it's working around quirks in the hardware which aren't regular, not because we're _completely_ confused (I hope). Thanks, Nick
next prev parent reply other threads:[~2020-07-28 22:53 UTC|newest] Thread overview: 141+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-24 4:14 incoming Andrew Morton 2020-07-24 4:15 ` [patch 01/15] mm/memory.c: avoid access flag update TLB flush for retried page fault Andrew Morton 2020-07-24 4:38 ` Yang Shi 2020-07-24 4:56 ` Andrew Morton 2020-07-24 19:27 ` Linus Torvalds 2020-07-24 20:22 ` Linus Torvalds 2020-07-25 0:36 ` Yang Shi 2020-07-25 1:29 ` Linus Torvalds 2020-07-25 15:58 ` Catalin Marinas 2020-07-28 9:22 ` Will Deacon 2020-07-28 9:39 ` Catalin Marinas 2020-07-28 10:07 ` Yu Xu 2020-07-28 11:46 ` Catalin Marinas 2020-07-28 10:21 ` Will Deacon 2020-07-28 18:28 ` Linus Torvalds 2020-07-27 17:52 ` Yang Shi 2020-07-27 18:04 ` Linus Torvalds 2020-07-27 18:42 ` Catalin Marinas 2020-07-27 20:56 ` Linus Torvalds 2020-07-27 20:56 ` Linus Torvalds 2020-07-27 22:34 ` Yang Shi 2020-07-27 7:31 ` Yu Xu 2020-07-27 11:05 ` Catalin Marinas 2020-07-27 17:01 ` Linus Torvalds 2020-07-28 11:19 ` Catalin Marinas 2020-07-27 17:12 ` Yu Xu 2020-07-27 18:04 ` Yang Shi 2020-07-27 18:37 ` Linus Torvalds 2020-07-27 18:37 ` Linus Torvalds 2020-07-27 22:43 ` Yang Shi 2020-07-28 0:38 ` Linus Torvalds 2020-07-28 0:38 ` Linus Torvalds 2020-07-28 0:13 ` Yu Xu 2020-07-28 10:53 ` Nicholas Piggin 2020-07-28 10:53 ` Nicholas Piggin 2020-07-28 19:02 ` Linus Torvalds 2020-07-28 19:02 ` Linus Torvalds 2020-07-28 19:02 ` Linus Torvalds 2020-07-28 22:53 ` Nicholas Piggin [this message] 2020-07-28 22:53 ` Nicholas Piggin 2020-07-29 13:58 ` Michael Ellerman 2020-07-28 6:41 ` Yu Xu 2020-07-24 4:15 ` [patch 02/15] mm/mmap.c: close race between munmap() and expand_upwards()/downwards() Andrew Morton 2020-07-24 4:15 ` [patch 03/15] vfs/xattr: mm/shmem: kernfs: release simple xattr entry in a right way Andrew Morton 2020-07-24 4:15 ` [patch 04/15] mm: initialize return of vm_insert_pages Andrew Morton 2020-07-24 4:15 ` [patch 05/15] mm/memcontrol: fix OOPS inside mem_cgroup_get_nr_swap_pages() Andrew Morton 2020-07-24 4:15 ` [patch 06/15] mm/memcg: fix refcount error while moving and swapping Andrew Morton 2020-07-24 13:41 ` Alex Shi 2020-07-24 4:15 ` [patch 07/15] mm: memcg/slab: fix memory leak at non-root kmem_cache destroy Andrew Morton 2020-07-24 4:15 ` [patch 08/15] mm/hugetlb: avoid hardcoding while checking if cma is enabled Andrew Morton 2020-07-24 4:15 ` [patch 09/15] khugepaged: fix null-pointer dereference due to race Andrew Morton 2020-07-24 4:15 ` [patch 10/15] mailmap: add entry for Mike Rapoport Andrew Morton 2020-07-24 4:15 ` [patch 11/15] squashfs: fix length field overlap check in metadata reading Andrew Morton 2020-07-24 4:15 ` [patch 12/15] scripts/decode_stacktrace: strip basepath from all paths Andrew Morton 2020-07-24 4:15 ` [patch 13/15] io-mapping: indicate mapping failure Andrew Morton 2020-07-24 4:15 ` [patch 14/15] MAINTAINERS: add KCOV section Andrew Morton 2020-07-24 4:15 ` [patch 15/15] scripts/gdb: fix lx-symbols 'gdb.error' while loading modules Andrew Morton 2020-07-27 19:47 ` + mm-remove-unnecessary-wrapper-function-do_mmap_pgoff.patch added to -mm tree Andrew Morton 2020-07-27 19:56 ` + nilfs2-only-call-unlock_new_inode-if-i_new.patch " Andrew Morton 2020-07-27 19:57 ` + nilfs2-convert-__nilfs_msg-to-integrate-the-level-and-format.patch " Andrew Morton 2020-07-27 19:57 ` + nilfs2-use-a-more-common-logging-style.patch " Andrew Morton 2020-07-27 19:58 ` + checkpatch-add-test-for-repeated-words.patch " Andrew Morton 2020-07-27 20:05 ` + ocfs2-replace-http-links-with-https-ones.patch " Andrew Morton 2020-07-27 20:09 ` + ocfs2-fix-unbalanced-locking.patch " Andrew Morton 2020-07-27 20:10 ` + kernelh-remove-duplicate-include-of-asm-div64h.patch " Andrew Morton 2020-07-27 20:11 ` + tools-replace-http-links-with-https-ones.patch " Andrew Morton 2020-07-27 20:12 ` + lib-replace-http-links-with-https-ones.patch " Andrew Morton 2020-07-27 20:12 ` + include-replace-http-links-with-https-ones.patch " Andrew Morton 2020-07-27 20:34 ` + mm-make-mm-locked_vm-an-atomic64-counter.patch " Andrew Morton 2020-07-27 20:34 ` + mm-util-account_locked_vm-does-not-hold-mmap_lock.patch " Andrew Morton 2020-07-27 20:37 ` + cg_read_strcmp-fix-null-pointer-dereference.patch " Andrew Morton 2020-07-27 20:51 ` + mm-hugetlb-add-mempolicy-check-in-the-reservation-routine.patch " Andrew Morton 2020-07-27 20:52 ` [withdrawn] checkpatch-support-deprecated-terms-checking.patch removed from " Andrew Morton 2020-07-27 23:47 ` [obsolete] scripts-deprecated_terms-recommend-denylist-allowlist-instead-of-blacklist-whitelist.patch " Andrew Morton 2020-07-27 23:50 ` [obsolete] scripts-deprecated_terms-sync-with-inclusive-terms.patch " Andrew Morton 2020-07-28 0:18 ` [failures] mm-hugetlb-add-mempolicy-check-in-the-reservation-routine.patch " Andrew Morton 2020-07-28 1:19 ` mmotm 2020-07-27-18-18 uploaded Andrew Morton 2020-07-28 2:14 ` Stephen Rothwell 2020-07-28 3:22 ` mmotm 2020-07-27-18-18 uploaded (drivers/scsi/ufs/: SCSI_UFS_EXYNOS) Randy Dunlap 2020-07-28 8:23 ` Alim Akhtar 2020-07-28 12:33 ` mmotm 2020-07-27-18-18 uploaded (mm/page_alloc.c) Randy Dunlap 2020-07-28 21:55 ` Andrew Morton 2020-07-28 22:20 ` Stephen Rothwell 2020-07-28 22:31 ` Andrew Morton 2020-07-29 14:18 ` Michael S. Tsirkin 2020-07-29 14:38 ` David Hildenbrand 2020-07-29 16:14 ` David Hildenbrand 2020-07-29 17:29 ` Randy Dunlap 2020-07-28 22:39 ` Randy Dunlap 2020-07-29 1:43 ` Nathan Chancellor 2020-07-29 1:44 ` Andrew Morton 2020-07-29 2:04 ` Randy Dunlap 2020-07-29 14:09 ` make oldconfig (Re: mmotm 2020-07-27-18-18 uploaded (mm/page_alloc.c)) Alexey Dobriyan 2020-07-28 20:53 ` + mm-mempolicy-fix-kerneldoc-of-numa_map_to_online_node.patch added to -mm tree Andrew Morton 2020-07-28 20:53 ` + mm-mmu_notifier-fix-and-extend-kerneldoc.patch " Andrew Morton 2020-07-28 20:54 ` + mm-swap-fix-kerneldoc-of-swap_vma_readahead.patch " Andrew Morton 2020-07-28 20:58 ` + mm-memcontrol-dont-count-limit-setting-reclaim-as-memory-pressure.patch " Andrew Morton 2020-07-28 21:01 ` + mm-memcontrol-restore-proper-dirty-throttling-when-memoryhigh-changes.patch " Andrew Morton 2020-07-28 22:06 ` + mm-compaction-correct-the-comments-of-compact_defer_shift.patch " Andrew Morton 2020-07-28 22:09 ` + selftests-add-mincore-tests.patch " Andrew Morton 2020-07-28 22:16 ` + proc-pid-smaps-consistent-whitespace-output-format.patch " Andrew Morton 2020-07-28 22:21 ` + xtensa-switch-to-generic-version-of-pte-allocation-fix.patch " Andrew Morton 2020-07-28 22:21 ` Andrew Morton 2020-07-29 21:49 ` + mm-slab-avoid-the-use-of-one-element-array-and-use-struct_size-helper.patch " Andrew Morton 2020-07-29 23:52 ` [obsolete] mm-slab-avoid-the-use-of-one-element-array-and-use-struct_size-helper.patch removed from " Andrew Morton 2020-07-31 19:24 ` + kasan-dont-tag-stacks-allocated-with-pagealloc.patch added to " Andrew Morton 2020-07-31 19:24 ` + kasan-arm64-dont-instrument-functions-that-enable-kasan.patch " Andrew Morton 2020-07-31 19:24 ` + kasan-allow-enabling-stack-tagging-for-tag-based-mode.patch " Andrew Morton 2020-07-31 19:24 ` + kasan-adjust-kasan_stack_oob-for-tag-based-mode.patch " Andrew Morton 2020-07-31 20:00 ` [obsolete] mmhwpoison-rework-soft-offline-for-in-use-pages-fix.patch removed from " Andrew Morton 2020-07-31 20:05 ` + mmhwpoison-cleanup-unused-pagehuge-check.patch added to " Andrew Morton 2020-07-31 20:05 ` + mm-hwpoison-remove-recalculating-hpage.patch " Andrew Morton 2020-07-31 20:05 ` + mmmadvise-call-soft_offline_page-without-mf_count_increased.patch " Andrew Morton 2020-07-31 20:05 ` + mmmadvise-refactor-madvise_inject_error.patch " Andrew Morton 2020-07-31 20:05 ` + mmhwpoison-inject-dont-pin-for-hwpoison_filter.patch " Andrew Morton 2020-07-31 20:05 ` + mmhwpoison-un-export-get_hwpoison_page-and-make-it-static.patch " Andrew Morton 2020-07-31 20:05 ` + mmhwpoison-kill-put_hwpoison_page.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-remove-mf_count_increased.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-remove-flag-argument-from-soft-offline-functions.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-unify-thp-handling-for-hard-and-soft-offline.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-rework-soft-offline-for-free-pages.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-rework-soft-offline-for-in-use-pages.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-refactor-soft_offline_huge_page-and-__soft_offline_page.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-return-0-if-the-page-is-already-poisoned-in-soft-offline.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-introduce-mf_msg_unsplit_thp.patch " Andrew Morton 2020-07-31 20:06 ` + mmhwpoison-double-check-page-count-in-__get_any_page.patch " Andrew Morton 2020-07-31 20:23 ` + mm-gup-restrict-cma-region-by-using-allocation-scope-api.patch " Andrew Morton 2020-07-31 20:23 ` + mm-hugetlb-make-hugetlb-migration-callback-cma-aware.patch " Andrew Morton 2020-07-31 20:23 ` + mm-gup-use-a-standard-migration-target-allocation-callback.patch " Andrew Morton 2020-07-31 20:25 ` + mm-migrate-make-a-standard-migration-target-allocation-function-fix.patch " Andrew Morton 2020-07-31 20:26 ` + mm-memcontrol-decouple-reference-counting-from-page-accounting-fix.patch " Andrew Morton 2020-07-31 20:32 ` + mm-dmapoolc-add-warn_on-in-dma_pool_destroy.patch " Andrew Morton 2020-07-31 20:49 ` + kstrto-correct-documentation-references-to-simple_strto.patch " Andrew Morton 2020-07-31 20:49 ` + kstrto-do-not-describe-simple_strto-as-obsolete-replaced.patch " Andrew Morton 2020-07-31 20:57 ` + mm-hugetlb-fix-calculation-of-adjust_range_if_pmd_sharing_possible.patch " Andrew Morton 2020-07-31 20:59 ` + poison-remove-obsolete-comment.patch " Andrew Morton 2020-07-31 21:02 ` + cma-dont-quit-at-first-error-when-activating-reserved-areas.patch " Andrew Morton 2020-07-31 21:10 ` [nacked] mm-dmapoolc-add-warn_on-in-dma_pool_destroy.patch removed from " Andrew Morton 2020-07-31 23:46 ` mmotm 2020-07-31-16-45 uploaded Andrew Morton 2020-08-01 5:24 ` mmotm 2020-07-31-16-45 uploaded (drivers/staging/vc04_services/) Randy Dunlap 2020-08-01 5:24 ` Randy Dunlap
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1595974242.esf9644sf3.astroid@bobo.none \ --to=npiggin@gmail.com \ --cc=akpm@linux-foundation.org \ --cc=catalin.marinas@arm.com \ --cc=hannes@cmpxchg.org \ --cc=hdanton@sina.com \ --cc=hughd@google.com \ --cc=josef@toxicpanda.com \ --cc=kirill.shutemov@linux.intel.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=mm-commits@vger.kernel.org \ --cc=torvalds@linux-foundation.org \ --cc=will.deacon@arm.com \ --cc=willy@infradead.org \ --cc=xuyu@linux.alibaba.com \ --cc=yang.shi@linux.alibaba.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.