[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1 of 4] xentrace: reduce trace buffer size to something mfn_offset can reach
Acked-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> Sorry for the delay! -George On Tue, May 10, 2011 at 3:32 PM, Olaf Hering <olaf@xxxxxxxxx> wrote: > # HG changeset patch > # User Olaf Hering <olaf@xxxxxxxxx> > # Date 1305037380 -7200 > # Node ID 8ac937fa527b28243227193bf4749feb3a234c2c > # Parent 19452acd23045f40c4e18437f0a60f016757e5bd > xentrace: reduce trace buffer size to something mfn_offset can reach > > The start of the array which holds the list of mfns for each cpus > tracebuffer is stored in an unsigned short. This limits the total amount > of pages for each cpu as the number of active cpus increases. > > Update the math in calculate_tbuf_size() to apply also this rule to the > max number of trace pages. Without this change the index can overflow. > > Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> > > diff -r 19452acd2304 -r 8ac937fa527b xen/common/trace.c > --- a/xen/common/trace.c Fri May 06 11:15:35 2011 +0100 > +++ b/xen/common/trace.c Tue May 10 16:23:00 2011 +0200 > @@ -112,11 +112,14 @@ static int calculate_tbuf_size(unsigned > typeof(dummy_size.prod) max_size; > 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 t_info_words; > > /* force maximum value for an unsigned type */ > max_size = -1; > max_pages = -1; > + max_mfn_offset = -1; > > /* max size holds up to n pages */ > max_size /= PAGE_SIZE; > @@ -124,6 +127,18 @@ static int calculate_tbuf_size(unsigned > if ( max_size < max_pages ) > max_pages = max_size; > > + /* > + * max mfn_offset holds up to n pages per cpu > + * The array of mfns for the highest cpu can start at the maximum value > + * mfn_offset can hold. So reduce the number of cpus and also the > mfn_offset. > + */ > + max_mfn_offset -= t_info_first_offset - 1; > + max_cpus--; > + if ( max_cpus ) > + max_mfn_offset /= max_cpus; > + if ( max_mfn_offset < max_pages ) > + max_pages = max_mfn_offset; > + > if ( pages > max_pages ) > { > printk(XENLOG_INFO "xentrace: requested number of %u pages " > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |