|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 2/2] xentrace: handle sparse cpu ids correctly in xen trace buffer handling
The per-cpu buffers for Xentrace are addressed by cpu-id, but the info
array for the buffers is sized only by number of online cpus. This
might lead to crashes when using Xentrace with smt=0.
The t_info structure has to be sized based on nr_cpu_ids.
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
tools/xentrace/xentrace.c | 2 +-
xen/common/trace.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/xentrace/xentrace.c b/tools/xentrace/xentrace.c
index 590a91e091..12497a16b4 100644
--- a/tools/xentrace/xentrace.c
+++ b/tools/xentrace/xentrace.c
@@ -596,7 +596,7 @@ static unsigned int get_num_cpus(void)
exit(EXIT_FAILURE);
}
- return physinfo.nr_cpus;
+ return physinfo.max_cpu_id + 1;
}
/**
diff --git a/xen/common/trace.c b/xen/common/trace.c
index 8cdc17b731..c079454c6a 100644
--- a/xen/common/trace.c
+++ b/xen/common/trace.c
@@ -113,7 +113,7 @@ static int calculate_tbuf_size(unsigned int pages, uint16_t
t_info_first_offset)
struct t_info dummy_pages;
typeof(dummy_pages.tbuf_size) max_pages;
typeof(dummy_pages.mfn_offset[0]) max_mfn_offset;
- unsigned int max_cpus = num_online_cpus();
+ unsigned int max_cpus = nr_cpu_ids;
unsigned int t_info_words;
/* force maximum value for an unsigned type */
@@ -151,11 +151,11 @@ static int calculate_tbuf_size(unsigned int pages,
uint16_t t_info_first_offset)
* NB this calculation is correct, because t_info_first_offset is
* in words, not bytes, not bytes
*/
- t_info_words = num_online_cpus() * pages + t_info_first_offset;
+ t_info_words = nr_cpu_ids * pages + t_info_first_offset;
t_info_pages = PFN_UP(t_info_words * sizeof(uint32_t));
printk(XENLOG_INFO "xentrace: requesting %u t_info pages "
"for %u trace pages on %u cpus\n",
- t_info_pages, pages, num_online_cpus());
+ t_info_pages, pages, nr_cpu_ids);
return pages;
}
--
2.16.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |