mbox series

[for,4.21,v1,0/9] Move parts of Arm's Dom0less to common code

Message ID cover.1736334615.git.oleksii.kurochko@gmail.com (mailing list archive)
Headers show
Series Move parts of Arm's Dom0less to common code | expand

Message

Oleksii Kurochko Jan. 8, 2025, 11:13 a.m. UTC
Some parts of Arm's Dom0less solution could be moved to common code as they are
not truly Arm-specific.

Most of the code is moved as is, with only minor changes introduced to provide
abstractions that hide Arm-specific details, while maintaining functional
equivalence with original Arm's code.

There are several open questions:
1. Probably, the introduced headers currently placed in asm-generic should
   instead reside in the xen/include folder.
2. Perhaps the introduced *.c files should always be placed elsewhere. They
   have been put in device-tree common as they somewhat depend on device tree
   functionality.
3. The u64 and u32 types are widely used in the code where device tree
   functionality is implemented because these types are used in device tree
   function arguments.
   Should this be reworked to use uint32_t and uint64_t instead? If so, will it
   also be necessary to change the type of variables passed to dt-related
   functions, or should the argument types of device tree functions be updated
   too? For example:
   ```
    u64 mem;
    ...
    rc = dt_property_read_u64(node, "memory", &mem);
   ```
   where dt_property_read_u64 is declared as:
     bool dt_property_read_u64(... , u64 *out_value);
4. Instead of providing init_intc_phandle() (see the patch: [1]), perhaps it
   would be better to add a for loop in domain_handle_dtb_bootmodule()?
   Something like:
   ```
    bool is_intc_phandle_inited = false;
    for ( unsigned int i = 0; i < ARRAY_SIZE(intc_names_array); i++ )
    {
        if ( dt_node_cmp(name, intc_names_array[i]) == 0 )
        {
            uint32_t phandle_intc = fdt_get_phandle(pfdt, node_next);

            if ( phandle_intc != 0 )
                kinfo->phandle_intc = phandle_intc;

            is_intc_phandle_inited = true;
            break;
        }
    }

    if ( is_intc_phandle_inited ) continue;
  ```
5. If some function prototypes are moved from asm/* headers, the inclusion of
   arch-specific headers (asm/*.h) could potentially be dropped. For example,
   if we examine common/device-tree/kernel.c, the following inclusions exist:
   - <asm/setup.h>: Included because of the use of copy_from_paddr(). The name
     copy_from_paddr() seems generic enough, so it might make sense to move it
     to a common header.
   - <asm/page.h>: Included because of clean_dcache_va_range(). This function
     is already used in common code in grant_table.c, so its prototype should
     be placed in a common header.
   - asm/kernel.h: Included because of struct kernel_info, which could also be
     a candidate to be moved to a common header.

[1] [PATCH v1 9/9] xen/common: dom0less: introduce common dom0less-build.c

Oleksii Kurochko (9):
  xen/common: dom0less: make some parts of Arm's CONFIG_DOM0LESS common
  asm-generic: move parts of Arm's asm/kernel.h to asm-generic
  arm/static-shmem.h: drop inclusion of asm/setup.h
  asm-generic: move Arm's static-memory.h to asm-generic
  asm-generic: move Arm's static-shmem.h to asm-generic
  asm-generic: move some parts of Arm's domain_build.h to asm-generic
    header
  xen/common: dom0less: introduce common kernel.c
  xen/common: dom0less: introduce common domain-build.c
  xen/common: dom0less: introduce common dom0less-build.c

 xen/arch/arm/Kconfig                      |   9 +-
 xen/arch/arm/dom0less-build.c             | 842 +++-------------------
 xen/arch/arm/domain_build.c               | 410 +----------
 xen/arch/arm/include/asm/Makefile         |   4 +
 xen/arch/arm/include/asm/dom0less-build.h |  32 -
 xen/arch/arm/include/asm/domain_build.h   |  19 +-
 xen/arch/arm/include/asm/kernel.h         | 115 +--
 xen/arch/arm/include/asm/static-memory.h  |  58 --
 xen/arch/arm/include/asm/static-shmem.h   | 118 ---
 xen/arch/arm/kernel.c                     | 231 +-----
 xen/arch/arm/static-memory.c              |   1 +
 xen/arch/arm/static-shmem.c               |   1 +
 xen/common/Kconfig                        |  16 +
 xen/common/device-tree/Makefile           |   3 +
 xen/common/device-tree/dom0less-build.c   | 720 ++++++++++++++++++
 xen/common/device-tree/domain-build.c     | 405 +++++++++++
 xen/common/device-tree/dt-overlay.c       |   2 +
 xen/common/device-tree/kernel.c           | 242 +++++++
 xen/include/asm-generic/dom0less-build.h  |  54 ++
 xen/include/asm-generic/domain-build.h    |  72 ++
 xen/include/asm-generic/kernel.h          | 159 ++++
 xen/include/asm-generic/static-memory.h   |  58 ++
 xen/include/asm-generic/static-shmem.h    | 117 +++
 23 files changed, 1986 insertions(+), 1702 deletions(-)
 delete mode 100644 xen/arch/arm/include/asm/dom0less-build.h
 delete mode 100644 xen/arch/arm/include/asm/static-memory.h
 delete mode 100644 xen/arch/arm/include/asm/static-shmem.h
 create mode 100644 xen/common/device-tree/dom0less-build.c
 create mode 100644 xen/common/device-tree/domain-build.c
 create mode 100644 xen/common/device-tree/kernel.c
 create mode 100644 xen/include/asm-generic/dom0less-build.h
 create mode 100644 xen/include/asm-generic/domain-build.h
 create mode 100644 xen/include/asm-generic/kernel.h
 create mode 100644 xen/include/asm-generic/static-memory.h
 create mode 100644 xen/include/asm-generic/static-shmem.h