|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |