All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/18] Tidy up cache.S
@ 2021-05-20 12:43 Fuad Tabba
  2021-05-20 12:43 ` [PATCH v3 01/18] arm64: assembler: replace `kaddr` with `addr` Fuad Tabba
                   ` (17 more replies)
  0 siblings, 18 replies; 42+ messages in thread
From: Fuad Tabba @ 2021-05-20 12:43 UTC (permalink / raw)
  To: linux-arm-kernel
  Cc: will, catalin.marinas, mark.rutland, maz, ardb, james.morse,
	alexandru.elisei, suzuki.poulose, robin.murphy, tabba

Hi,

Changes since v2 [1]:
- Brought in Mark's patches that add conditional cache fixups, only generating
  an extable entry if a label is provided [2]. NOTE: The patches missed some of
  the code comments to reflect the changes. I took the liberty of fixing the
  comments in Mark's patch.
- Modified the user_alt macro to make the fixup label optional, in the same
  way as Mark's patches [2], to avoid code duplication later in the series.
- Tidied up the new cache flush (clean/invalidate) macro by removing code
  duplication, conditional variables/labels. Moved the ttbr manipulation,
  fixup handler, and rets inline in __flush_cache_user_range. (Mark)
- Fixed comments and commit messages. (Mark)

Changes since v1 [3]:
- Apply ARM64_WORKAROUND_CLEAN_CACHE errata to
  swsusp_arch_suspend_exit (Mark)
- Remove toggling of uaccess from the newly created cache flush
  (clean/invalidate) macro and leave it up to the caller (Robin)
- Fix renaming of cache maintenance functions (Ard, Mark)
- Fix comment on maintenance operations in machine_kexec_post_load (Ard)
- Fix commit msg comments to clarify some of the changes and outline potential
  performance impact (Mark)
- Fix code comments that refer to flush_icache_range when the intended function
  is __flush_icache_range

As has been noted before [4], the code in cache.S isn't very tidy. Some of its
functions accept address ranges by start and size, whereas others with similar
names do so by start and end. This has resulted in at least one bug [5].

Moreover, invalidate_icache_range and __flush_icache_range toggle uaccess,
which isn't necessary because they work on the kernel linear map [6].

This patch series attempts to fix these issues, as well as tidy up the code in
general to reduce ambiguity and make it consistent with Arm terminology and
with the functions' actual operations.

No functional change intended in this series. However, there might be a
performance impact due to the reduced number of instructions in general.

This series is based on v5.13-rc1. You can find the applied series here [7].

Cheers,
/fuad

[1] https://lore.kernel.org/linux-arm-kernel/20210517075124.152151-1-tabba@google.com/
[2] https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/log/?h=arm64/cleanups/cache
[3] https://lore.kernel.org/linux-arm-kernel/20210511144252.3779113-1-tabba@google.com/T/
[4] https://lore.kernel.org/linux-arch/20200511075115.GA16134@willie-the-truck/
[5] https://lore.kernel.org/linux-arch/20200510075510.987823-3-hch@lst.de/
[6] https://lore.kernel.org/linux-arch/20200511110014.lb9PEahJ4hVOYrbwIb_qUHXyNy9KQzNFdb_I3YlzY6A@z/
[7] https://android-kvm.googlesource.com/linux/+/refs/heads/tabba/fixcache-5.13

Fuad Tabba (16):
  arm64: Apply errata to swsusp_arch_suspend_exit
  arm64: assembler: user_alt label optional
  arm64: Do not enable uaccess for flush_icache_range
  arm64: Do not enable uaccess for invalidate_icache_range
  arm64: Downgrade flush_icache_range to invalidate
  arm64: Move documentation of dcache_by_line_op
  arm64: Fix comments to refer to correct function __flush_icache_range
  arm64: __inval_dcache_area to take end parameter instead of size
  arm64: dcache_by_line_op to take end parameter instead of size
  arm64: __flush_dcache_area to take end parameter instead of size
  arm64: __clean_dcache_area_poc to take end parameter instead of size
  arm64: __clean_dcache_area_pop to take end parameter instead of size
  arm64: __clean_dcache_area_pou to take end parameter instead of size
  arm64: sync_icache_aliases to take end parameter instead of size
  arm64: Fix cache maintenance function comments
  arm64: Rename arm64-internal cache maintenance functions

Mark Rutland (2):
  arm64: assembler: replace `kaddr` with `addr`
  arm64: assembler: add conditional cache fixups

 arch/arm64/include/asm/alternative-macros.h |   9 +-
 arch/arm64/include/asm/arch_gicv3.h         |   3 +-
 arch/arm64/include/asm/assembler.h          |  80 ++++++----
 arch/arm64/include/asm/cacheflush.h         |  69 +++++----
 arch/arm64/include/asm/efi.h                |   2 +-
 arch/arm64/include/asm/kvm_mmu.h            |   7 +-
 arch/arm64/kernel/alternative.c             |   2 +-
 arch/arm64/kernel/efi-entry.S               |   9 +-
 arch/arm64/kernel/head.S                    |  13 +-
 arch/arm64/kernel/hibernate-asm.S           |   7 +-
 arch/arm64/kernel/hibernate.c               |  20 ++-
 arch/arm64/kernel/idreg-override.c          |   3 +-
 arch/arm64/kernel/image-vars.h              |   2 +-
 arch/arm64/kernel/insn.c                    |   2 +-
 arch/arm64/kernel/kaslr.c                   |  12 +-
 arch/arm64/kernel/machine_kexec.c           |  30 ++--
 arch/arm64/kernel/probes/uprobes.c          |   2 +-
 arch/arm64/kernel/smp.c                     |   8 +-
 arch/arm64/kernel/smp_spin_table.c          |   7 +-
 arch/arm64/kernel/sys_compat.c              |   2 +-
 arch/arm64/kvm/arm.c                        |   2 +-
 arch/arm64/kvm/hyp/nvhe/cache.S             |   4 +-
 arch/arm64/kvm/hyp/nvhe/setup.c             |   3 +-
 arch/arm64/kvm/hyp/nvhe/tlb.c               |   2 +-
 arch/arm64/kvm/hyp/pgtable.c                |  13 +-
 arch/arm64/lib/uaccess_flushcache.c         |   4 +-
 arch/arm64/mm/cache.S                       | 163 +++++++++++---------
 arch/arm64/mm/flush.c                       |  29 ++--
 28 files changed, 294 insertions(+), 215 deletions(-)


base-commit: 6efb943b8616ec53a5e444193dccf1af9ad627b5
-- 
2.31.1.751.gd2f1c929bd-goog


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2021-05-25 11:20 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-20 12:43 [PATCH v3 00/18] Tidy up cache.S Fuad Tabba
2021-05-20 12:43 ` [PATCH v3 01/18] arm64: assembler: replace `kaddr` with `addr` Fuad Tabba
2021-05-20 12:43 ` [PATCH v3 02/18] arm64: assembler: add conditional cache fixups Fuad Tabba
2021-05-20 12:43 ` [PATCH v3 03/18] arm64: Apply errata to swsusp_arch_suspend_exit Fuad Tabba
2021-05-20 12:46   ` Mark Rutland
2021-05-20 12:43 ` [PATCH v3 04/18] arm64: assembler: user_alt label optional Fuad Tabba
2021-05-20 12:57   ` Mark Rutland
2021-05-21 11:46     ` Fuad Tabba
2021-05-21 13:05       ` Mark Rutland
2021-05-20 12:43 ` [PATCH v3 05/18] arm64: Do not enable uaccess for flush_icache_range Fuad Tabba
2021-05-20 14:02   ` Mark Rutland
2021-05-20 15:37     ` Mark Rutland
2021-05-21 12:18       ` Mark Rutland
2021-05-25 11:18   ` Catalin Marinas
2021-05-20 12:43 ` [PATCH v3 06/18] arm64: Do not enable uaccess for invalidate_icache_range Fuad Tabba
2021-05-20 14:13   ` Mark Rutland
2021-05-25 11:18   ` Catalin Marinas
2021-05-20 12:43 ` [PATCH v3 07/18] arm64: Downgrade flush_icache_range to invalidate Fuad Tabba
2021-05-20 14:15   ` Mark Rutland
2021-05-25 11:18   ` Catalin Marinas
2021-05-20 12:43 ` [PATCH v3 08/18] arm64: Move documentation of dcache_by_line_op Fuad Tabba
2021-05-20 14:17   ` Mark Rutland
2021-05-20 12:43 ` [PATCH v3 09/18] arm64: Fix comments to refer to correct function __flush_icache_range Fuad Tabba
2021-05-20 14:18   ` Mark Rutland
2021-05-20 12:43 ` [PATCH v3 10/18] arm64: __inval_dcache_area to take end parameter instead of size Fuad Tabba
2021-05-20 15:46   ` Mark Rutland
2021-05-20 12:43 ` [PATCH v3 11/18] arm64: dcache_by_line_op " Fuad Tabba
2021-05-20 15:48   ` Mark Rutland
2021-05-20 12:44 ` [PATCH v3 12/18] arm64: __flush_dcache_area " Fuad Tabba
2021-05-20 16:06   ` Mark Rutland
2021-05-20 12:44 ` [PATCH v3 13/18] arm64: __clean_dcache_area_poc " Fuad Tabba
2021-05-20 16:16   ` Mark Rutland
2021-05-20 12:44 ` [PATCH v3 14/18] arm64: __clean_dcache_area_pop " Fuad Tabba
2021-05-20 16:19   ` Mark Rutland
2021-05-20 12:44 ` [PATCH v3 15/18] arm64: __clean_dcache_area_pou " Fuad Tabba
2021-05-20 16:24   ` Mark Rutland
2021-05-20 12:44 ` [PATCH v3 16/18] arm64: sync_icache_aliases " Fuad Tabba
2021-05-20 16:34   ` Mark Rutland
2021-05-20 12:44 ` [PATCH v3 17/18] arm64: Fix cache maintenance function comments Fuad Tabba
2021-05-20 16:48   ` Mark Rutland
2021-05-20 12:44 ` [PATCH v3 18/18] arm64: Rename arm64-internal cache maintenance functions Fuad Tabba
2021-05-20 17:01   ` Mark Rutland

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.