1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
From 0a53565f1886201cc8a8afe9b2619ee297c20955 Mon Sep 17 00:00:00 2001
From: Andrew Cooper <andrew.cooper3@citrix.com>
Date: Fri, 2 Feb 2024 00:39:42 +0000
Subject: [PATCH 47/67] xen: Swap order of actions in the FREE*() macros
Wherever possible, it is a good idea to NULL out the visible reference to an
object prior to freeing it. The FREE*() macros already collect together both
parts, making it easy to adjust.
This has a marginal code generation improvement, as some of the calls to the
free() function can be tailcall optimised.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
(cherry picked from commit c4f427ec879e7c0df6d44d02561e8bee838a293e)
---
xen/include/xen/mm.h | 3 ++-
xen/include/xen/xmalloc.h | 7 ++++---
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 3dc61bcc3c..211685a5d2 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -80,8 +80,9 @@ bool scrub_free_pages(void);
/* Free an allocation, and zero the pointer to it. */
#define FREE_XENHEAP_PAGES(p, o) do { \
- free_xenheap_pages(p, o); \
+ void *_ptr_ = (p); \
(p) = NULL; \
+ free_xenheap_pages(_ptr_, o); \
} while ( false )
#define FREE_XENHEAP_PAGE(p) FREE_XENHEAP_PAGES(p, 0)
diff --git a/xen/include/xen/xmalloc.h b/xen/include/xen/xmalloc.h
index 16979a117c..d857298011 100644
--- a/xen/include/xen/xmalloc.h
+++ b/xen/include/xen/xmalloc.h
@@ -66,9 +66,10 @@
extern void xfree(void *);
/* Free an allocation, and zero the pointer to it. */
-#define XFREE(p) do { \
- xfree(p); \
- (p) = NULL; \
+#define XFREE(p) do { \
+ void *_ptr_ = (p); \
+ (p) = NULL; \
+ xfree(_ptr_); \
} while ( false )
/* Underlying functions */
--
2.44.0
|