|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] vPCI: make vpci_add_register() an out-of-line function
commit 62cb3c7510d2757cf1521cf918d832cfbcf9e1ed
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon Dec 29 09:35:11 2025 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Dec 29 09:35:11 2025 +0100
vPCI: make vpci_add_register() an out-of-line function
Calling a function with 10 arguments is inefficient on many architectures:
x86-64 allows for up to 6 register parameters, Arm64 for up to 8.
Everything else needs passing on the stack, i.e. forcing the compiler to
emit stack manipulation insns at every call site.
Shrinks generated code on x86 (with gcc15) by over 250 bytes. The gains on
Arm64 are a little less.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
xen/drivers/vpci/vpci.c | 8 ++++++++
xen/include/xen/vpci.h | 14 +++++---------
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c
index 07c7071d0a..c824bf8a8a 100644
--- a/xen/drivers/vpci/vpci.c
+++ b/xen/drivers/vpci/vpci.c
@@ -573,6 +573,14 @@ int vpci_add_register_mask(struct vpci *vpci, vpci_read_t
*read_handler,
return 0;
}
+int vpci_add_register(struct vpci *vpci, vpci_read_t *read_handler,
+ vpci_write_t *write_handler, unsigned int offset,
+ unsigned int size, void *data)
+{
+ return vpci_add_register_mask(vpci, read_handler, write_handler, offset,
+ size, data, 0, 0, 0, 0);
+}
+
int vpci_remove_registers(struct vpci *vpci, unsigned int start,
unsigned int size)
{
diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h
index 9ae75d946a..d6310104ea 100644
--- a/xen/include/xen/vpci.h
+++ b/xen/include/xen/vpci.h
@@ -60,15 +60,11 @@ int __must_check vpci_add_register_mask(struct vpci *vpci,
void *data, uint32_t ro_mask,
uint32_t rw1c_mask, uint32_t
rsvdp_mask,
uint32_t rsvdz_mask);
-static inline int __must_check vpci_add_register(struct vpci *vpci,
- vpci_read_t *read_handler,
- vpci_write_t *write_handler,
- unsigned int offset,
- unsigned int size, void *data)
-{
- return vpci_add_register_mask(vpci, read_handler, write_handler, offset,
- size, data, 0, 0, 0, 0);
-}
+int __must_check vpci_add_register(struct vpci *vpci,
+ vpci_read_t *read_handler,
+ vpci_write_t *write_handler,
+ unsigned int offset, unsigned int size,
+ void *data);
int vpci_remove_registers(struct vpci *vpci, unsigned int start,
unsigned int size);
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |