Re: [RFC PATCH 03/25] kvx: Add build infrastructure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 1/3/23 08:43, Yann Sionneau wrote:
> Add Kbuild, Makefile, Kconfig and link script for kvx build infrastructure.
> 
> CC: linux-kernel@xxxxxxxxxxxxxxx
> CC: bpf@xxxxxxxxxxxxxxx
> Co-developed-by: Clement Leger <clement.leger@xxxxxxxxxxx>
> Signed-off-by: Clement Leger <clement.leger@xxxxxxxxxxx>
> Co-developed-by: Guillaume Thouvenin <gthouvenin@xxxxxxxxx>
> Signed-off-by: Guillaume Thouvenin <gthouvenin@xxxxxxxxx>
> Co-developed-by: Jonathan Borne <jborne@xxxxxxxxx>
> Signed-off-by: Jonathan Borne <jborne@xxxxxxxxx>
> Co-developed-by: Jules Maselbas <jmaselbas@xxxxxxxxx>
> Signed-off-by: Jules Maselbas <jmaselbas@xxxxxxxxx>
> Co-developed-by: Julian Vetter <jvetter@xxxxxxxxx>
> Signed-off-by: Julian Vetter <jvetter@xxxxxxxxx>
> Co-developed-by: Marc Poulhiès <dkm@xxxxxxxxxxxx>
> Signed-off-by: Marc Poulhiès <dkm@xxxxxxxxxxxx>
> Co-developed-by: Marius Gligor <mgligor@xxxxxxxxx>
> Signed-off-by: Marius Gligor <mgligor@xxxxxxxxx>
> Co-developed-by: Samuel Jones <sjones@xxxxxxxxx>
> Signed-off-by: Samuel Jones <sjones@xxxxxxxxx>
> Co-developed-by: Vincent Chardon <vincent.chardon@xxxxxxxxxxxxxxxx>
> Signed-off-by: Vincent Chardon <vincent.chardon@xxxxxxxxxxxxxxxx>
> Co-developed-by: Yann Sionneau <ysionneau@xxxxxxxxx>
> Signed-off-by: Yann Sionneau <ysionneau@xxxxxxxxx>
> ---
>  arch/kvx/Kconfig                 | 249 +++++++++++++++++++++++++++++++
>  arch/kvx/Kconfig.debug           |  70 +++++++++
>  arch/kvx/Makefile                |  52 +++++++
>  arch/kvx/include/asm/Kbuild      |  20 +++
>  arch/kvx/include/uapi/asm/Kbuild |   1 +
>  arch/kvx/kernel/Makefile         |  27 ++++
>  arch/kvx/kernel/kvx_ksyms.c      |  24 +++
>  arch/kvx/kernel/vmlinux.lds.S    | 173 +++++++++++++++++++++
>  arch/kvx/lib/Makefile            |   6 +
>  arch/kvx/mm/Makefile             |  10 ++
>  arch/kvx/platform/Makefile       |   7 +
>  11 files changed, 639 insertions(+)
>  create mode 100644 arch/kvx/Kconfig
>  create mode 100644 arch/kvx/Kconfig.debug
>  create mode 100644 arch/kvx/Makefile
>  create mode 100644 arch/kvx/include/asm/Kbuild
>  create mode 100644 arch/kvx/include/uapi/asm/Kbuild
>  create mode 100644 arch/kvx/kernel/Makefile
>  create mode 100644 arch/kvx/kernel/kvx_ksyms.c
>  create mode 100644 arch/kvx/kernel/vmlinux.lds.S
>  create mode 100644 arch/kvx/lib/Makefile
>  create mode 100644 arch/kvx/mm/Makefile
>  create mode 100644 arch/kvx/platform/Makefile
> 
> diff --git a/arch/kvx/Kconfig b/arch/kvx/Kconfig
> new file mode 100644
> index 000000000000..8e8820c5c860
> --- /dev/null
> +++ b/arch/kvx/Kconfig
> @@ -0,0 +1,249 @@
> +#
> +# For a description of the syntax of this configuration file,
> +# see Documentation/kbuild/kconfig-language.txt.
> +#
> +
> +config 64BIT
> +	def_bool y
> +
> +config GENERIC_CALIBRATE_DELAY
> +	def_bool y
> +
> +config FIX_EARLYCON_MEM
> +	def_bool y
> +
> +config MMU
> +	def_bool y
> +
> +config KALLSYMS_BASE_RELATIVE
> +	def_bool n
> +
> +config GENERIC_CSUM
> +	def_bool y
> +
> +config RWSEM_GENERIC_SPINLOCK
> +	def_bool y
> +
> +config GENERIC_HWEIGHT
> +	def_bool y
> +
> +config ARCH_MMAP_RND_BITS_MAX
> +	default 24
> +

Do the above and below configs need an "int" line for their type?
I notice that the patch does that below for PGTABLE_LEVELS.

> +config ARCH_MMAP_RND_BITS_MIN
> +	default 18
> +
> +config STACKTRACE_SUPPORT
> +	def_bool y
> +
> +config LOCKDEP_SUPPORT
> +	def_bool y
> +
> +config GENERIC_BUG
> +	def_bool y
> +	depends on BUG
> +
> +config KVX_4K_PAGES
> +	def_bool y
> +
> +config KVX
> +	def_bool y
[deletes]
> +
> +config PGTABLE_LEVELS
> +	int
> +	default 3
^^^^^^^^^^^^^^^^^^^^^^^^

> +
> +config HAVE_KPROBES
> +	def_bool n
> +
> +menu "System setup"
> +
> +config POISON_INITMEM
> +	bool "Enable to poison freed initmem"
> +	default y
> +	help
> +	  In order to debug initmem, using poison allows to verify if
> +	  some data/code is stille using them. Enable this for debug

	                    still

> +	  purposes

	  purposes.

> +
> +config KVX_PHYS_OFFSET
> +	hex "RAM address of memory base"
> +	default 0x100000000
> +
> +config KVX_PAGE_OFFSET
> +	hex "kernel virtual address of memory base"
> +	default 0xFFFFFF8000000000
> +
> +config ARCH_FLATMEM_ENABLE
> +	def_bool y
> +
> +config ARCH_SPARSEMEM_ENABLE
> +	def_bool y
> +
> +config ARCH_SPARSEMEM_DEFAULT
> +	def_bool ARCH_SPARSEMEM_ENABLE
> +
> +config ARCH_SELECT_MEMORY_MODEL
> +	def_bool ARCH_SPARSEMEM_ENABLE
> +
> +config STACK_MAX_DEPTH_TO_PRINT
> +	int "Maximum depth of stack to print"
> +	range 1 128
> +	default "24"
> +
> +config L2_CACHE
> +	bool "Enable l2 cache driver"

	             L2

> +	default y
> +	help
> +	  Enable L2 cache driver in order to handle it. This driver can be
> +	  disabled to eliminate any overhead related to L2 cache
> +	  inval/writeback. Note that L2 cache is mandatory for SMP in order
> +	  to maintain coherency on DDR between all PEs.
> +
> +config SECURE_DAME_HANDLING
> +	bool "Secure DAME handling"
> +	default y
> +	help
> +	  In order to securely handle Data Asynchronous Memory Errors, we need
> +	  to do a barrier upon kernel entry when coming from userspace. This
> +	  barrier guarantee us that any pending DAME will be serviced right

	          guarantees

> +	  away. We also need to do a barrier when returning from kernel to user.
> +	  This way, if the kernel or the user triggered a DAME, it will be
> +	  serviced by knowing we are coming from kernel or user and avoid
> +	  pulling the wrong lever (panic for kernel or sigfault for user).
> +	  This can be costly but ensure that user cannot interfere with kernel.

	                         ensures

> +	  /!\ Do not disable unless you want to open a giant breach between
> +	  user and kernel /!\
> +
> +config CACHECTL_UNSAFE_PHYS_OPERATIONS
> +	bool "Enable cachectl syscall unsafe physical operations"
> +	default n
> +	help
> +	  Enable cachectl syscall to allow writebacking/invalidating ranges
> +	  based on physical addresses. These operations requires the
> +	  CAP_SYS_ADMIN capability

	                capability.

> +
> +config ENABLE_TCA
> +	bool "Enable TCA coprocessor support"
> +	default y
> +	help
> +	  This option enables TCA coprocessor support. It will allow the user to
> +	  use the coprocessor and save registers on context switch if used.
> +	  Registers content will also be cleared when switching.
> +
> +config SMP
> +	bool "Symmetric multi-processing support"
> +	default n
> +	select GENERIC_SMP_IDLE_THREAD
> +	select GENERIC_IRQ_IPI
> +	select IRQ_DOMAIN_HIERARCHY
> +	select IRQ_DOMAIN
> +	select L2_CACHE
> +	help
> +	  This enables support for systems with more than one CPU. If you have
> +	  a system with only one CPU, say N. If you have a system with more
> +	  than one CPU, say Y.
> +
> +	  If you say N here, the kernel will run on uni- and multiprocessor
> +	  machines, but will use only one CPU of a multiprocessor machine. If
> +	  you say Y here, the kernel will run on many, but not all,
> +	  uniprocessor machines. On a uniprocessor machine, the kernel
> +	  will run faster if you say N here.
> +
> +config NR_CPUS
> +	int "Maximum number of CPUs"
> +	range 1 16
> +	default "16"
> +	depends on SMP
> +	help
> +	  Kalray support can handle a maximum of 16 CPUs.
> +
> +config KVX_PAGE_SHIFT
> +	int
> +	default 12
> +
> +config CMDLINE
> +	string "Default kernel command string"
> +	default ""
> +	help
> +	  On some architectures there is currently no way for the boot loader
> +	  to pass arguments to the kernel. For these architectures, you should
> +	  supply some command-line options at build time by entering them
> +	  here.
> +
> +endmenu
> +
> +menu "Kernel Features"
> +source "kernel/Kconfig.hz"
> +endmenu
> diff --git a/arch/kvx/Kconfig.debug b/arch/kvx/Kconfig.debug
> new file mode 100644
> index 000000000000..027e919a1e14
> --- /dev/null
> +++ b/arch/kvx/Kconfig.debug
> @@ -0,0 +1,70 @@
> +menu "KVX debugging"
> +
> +config KVX_DEBUG_ASN
> +	bool "Check ASN before writing TLB entry"
> +	default n
> +	help
> +	  This option allows to check if the ASN of the current
> +	  process is matching the ASN found in MMC. If it is not the

	s/is matching/matches/

> +	  case an error will be printed.
> +
> +config KVX_DEBUG_TLB_WRITE
> +	bool "Enable TLBs write checks"
> +	default n
> +	help
> +	  Enabling this option will enable TLB access checks. This is
> +	  particularly helpful when modifying the assembly code responsible
> +	  of TLB refill. If set, mmc.e will be checked each time the tlb are

	  for TLB refill.                                            TLB

> +	  written and a panic will be thrown on error.
> +
> +config KVX_DEBUG_TLB_ACCESS
> +	bool "Enable TLBs accesses logging"
> +	default n
> +	help
> +	  Enabling this option will enable TLB entry manipulation logging.
> +	  Each time an entry will be added to the TLBs, it will be logged in

	                    s/will be/is/               s/will be/is/

> +	  an array readable via gdb scripts. This can be useful to understand
> +	  strange crashes related to suspicious virtual/physical addresses.
> +
> +config KVX_DEBUG_TLB_ACCESS_BITS
> +	int "Number of bits used as index of entries in log table"
> +	default 12
> +	depends on KVX_DEBUG_TLB_ACCESS
> +	help
> +	  Set the number of bits used as index of entries that will be logged
> +	  in a ring buffer called kvx_tlb_access. One entry in the table
> +	  contains registers TEL, TEH and MMC. It also logs the type of the
> +	  operations (0:read, 1:write, 2:probe). Buffer is per CPU. For one
> +	  entry 24 bytes are used. So by default it uses 96Ko of memory per

What does "Ko" mean?

> +	  CPU to store 2^12 (4096) entries.
> +
> +config KVX_MMU_STATS
> +	bool "Register mmu stats debugfs entries"

Preferably             MMU

> +	default n
> +	select DEBUG_FS

Preferably:
	depends on DEBUG_FS

> +	help
> +	  Enable debugfs attribute which will allow inspecting various metric

	                                                               metrics

> +	  regarding MMU:
> +	  - Number of nomapping traps handled
> +	  - avg/min/max time for nomapping refill (user/kernel)
> +
> +config DEBUG_EXCEPTION_STACK
> +	bool "Enable exception stack debugging"
> +	default n
> +	help
> +	  Enable stack check debugging when entering/exiting
> +	  exception handlers.
> +	  This can be particularly helpful after modifying stack
> +	  handling to see if stack when exiting is the same as the one
> +	  when entering exception handler.
> +
> +config DEBUG_SFR_SET_MASK
> +	bool "Enable sfr set_mask debugging"
> +	default n
> +	help
> +	  Verify that values written using kvx_sfr_set_mask are matching the

	  s/are matching/match/

> +	  mask. This ensure that no extra bits of sfr will be overridden by some

	             ensures

and preferably s/sfr/SFR/ in 2 places (not in kvx_sfr_set_mask).

> +	  incorrectly truncated values. This can lead to huge problems by
> +	  modifying important bits in system registers.
> +
> +endmenu


Thanks.

-- 
~Randy



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux