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

[PATCH 0/5] Small PCI refactoring



The goal of this series is to make some refactoring of some
pci primitives to improve codegen and make code less verbose.

A big chunk of it is converting many places where (seg, bus, dev, fn)
is split into multiples variables and convert it into being just
pci_sbdf_t, in particular in some PCI function parameters to reduce
parameter count which usually translate into less registers to pass
to the function. Moreover, we also avoid translating back and forth
between pci_sbdf_t and individual (seg, bus, dev, fn).

Latest patch attempts to improve codegen of pci_conf_{read,write}N()
by making them inline specialized variants of pci_mmcfg_{read,write}()
in order to eliminate a particular `switch (len)` at compile time.

No intended functional change, aside some parts of the codebase that will
now correctly handle PCI segment when parsed while it was previously
ignored (e.g dbgp).

Bloat-o-meter is pretty telling

add/remove: 4/2 grow/shrink: 11/14 up/down: 529/-1470 (-941)
Function                                     old     new   delta
pci_mmcfg_base                                 -     106    +106
parse_pci_sbdf_seg                             -      88     +88
parse_pci_sbdf                                 -      85     +85
pci_dev_base                                   -      56     +56
pci_conf_read16                               92     118     +26
pci_conf_read8                                92     117     +25
ehci_dbgp_init                               629     652     +23
pci_conf_read32                               94     116     +22
pci_conf_write32                              88     109     +21
symbols_names                             106435  106452     +17
symbols_sorted_offsets                     59672   59688     +16
pci_conf_write16                              94     109     +15
pci_conf_write8                               94     108     +14
reserve_unity_map_for_device                 434     445     +11
symbols_offsets                            31920   31924      +4
mmcfg_intercept_write                        194     193      -1
add_one_user_rmrr                            653     644      -9
__find_dbgp                                   87      60     -27
pci_device_detect                             89      55     -34
pci_mmcfg_write                              197     152     -45
_scan_pci_devices                            286     241     -45
parse_ivrs_ioapic                            292     235     -57
parse_rmrr_param                             484     420     -64
register_one_rmrr                            389     324     -65
parse_ivrs_hpet                              249     184     -65
parse_ivmd_param                             651     570     -81
acpi_parse_dmar                             2625    2520    -105
get_virt                                     106       -    -106
pci_mmcfg_read                               189       -    -189
ns16550_init                                3205    3002    -203
acpi_parse_dev_scope                        1465    1091    -374

Teddy Astie (5):
  pci: Introduce parse_pci_sbdf{_seg}()
  vtd: Use pci_sbdf_t in acpi_parse_dev_scope()
  pci: Use pci_sbdf_t in pci_device_detect()
  pci: Parse into pci_sbdf_t directly
  RFC: pci: Migrate pci_mmcfg_{read,write}() to pci.c

 xen/arch/x86/pv/ro-page-fault.c          |   3 +-
 xen/arch/x86/x86_64/mmconfig.h           |  43 --------
 xen/arch/x86/x86_64/mmconfig_64.c        | 106 ++++----------------
 xen/arch/x86/x86_64/pci.c                | 122 +++++++++++++++++++++--
 xen/drivers/char/ehci-dbgp.c             |  35 +++----
 xen/drivers/char/ns16550.c               |  24 ++---
 xen/drivers/char/xhci-dbc.c              |   6 +-
 xen/drivers/passthrough/amd/iommu_acpi.c |  26 ++---
 xen/drivers/passthrough/pci.c            |  16 +--
 xen/drivers/passthrough/vtd/dmar.c       |  80 ++++++---------
 xen/drivers/pci/pci.c                    |  18 ++++
 xen/include/xen/pci.h                    |  11 +-
 12 files changed, 243 insertions(+), 247 deletions(-)

-- 
2.52.0



--
 | Vates

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.