|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] device-tree: optimize size of struct dt_device_node
From: Michal Orzel <michal.orzel@xxxxxxx>
The current placement of fields in struct dt_device_node is not optimal and
introduces holes due to fields alignment.
Checked with "'pahole xen-syms -C dt_device_node"
ARM64 size 144B, 16B holes:
/* size: 144, cachelines: 3, members: 15 */
/* sum members: 128, holes: 3, sum holes: 16 */
/* last cacheline: 16 bytes */
ARM32 size 72B, 4B holes
/* size: 72, cachelines: 2, members: 15 */
/* sum members: 68, holes: 2, sum holes: 4 */
/* last cacheline: 8 bytes */
This patch optimizes size of struct dt_device_node by rearranging its
field, which eliminates holes and reduces structure size by 16B(ARM64) and
4B(ARM32).
After ARM64 size 128B, no holes (-16B):
/* size: 128, cachelines: 2, members: 15 */
After ARM32 size 68B, no holes (-4B)
/* size: 68, cachelines: 2, members: 15 */
/* last cacheline: 4 bytes */
Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
Signed-off-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
---
This patch follows discussion in [1]
[1] https://patchwork.kernel.org/comment/26239672/
xen/include/xen/device_tree.h | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
index 5ff763bb80bb..0ff80fda04da 100644
--- a/xen/include/xen/device_tree.h
+++ b/xen/include/xen/device_tree.h
@@ -81,17 +81,10 @@ struct dt_property {
struct dt_device_node {
const char *name;
const char *type;
- dt_phandle phandle;
char *full_name;
+ dt_phandle phandle;
domid_t used_by; /* By default it's used by dom0 */
- struct dt_property *properties;
- struct dt_device_node *parent;
- struct dt_device_node *child;
- struct dt_device_node *sibling;
- struct dt_device_node *next; /* TODO: Remove it. Only use to know the last
children */
- struct dt_device_node *allnext;
-
/* IOMMU specific fields */
bool is_protected;
@@ -100,6 +93,13 @@ struct dt_device_node {
bool static_evtchn_created;
#endif
+ struct dt_property *properties;
+ struct dt_device_node *parent;
+ struct dt_device_node *child;
+ struct dt_device_node *sibling;
+ struct dt_device_node *next; /* TODO: Remove it. Only use to know the last
children */
+ struct dt_device_node *allnext;
+
/*
* The main purpose of this list is to link the structure in the list
* of devices assigned to domain.
--
2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |