Good catch. This fix produces the correct index, but:
* It's not as clear, IMHO, where the math is coming from
* I think it may give the wrong result if the t_info struct ever
changes (e.g., more data before the cpu offset list)
The bug in the original math was that I should have added 3 to round
up, rather than 1.
I'm attaching a patch that will hopefully fix the bug and make it more
clear. Thoughts?
-George
On Tue, Jun 29, 2010 at 4:32 PM, Jan Beulich <JBeulich@xxxxxxxxxx> wrote:
> This wasn't defined correctly, thus allowing in the
> num_online_cpus() == NR_CPUS case to pass a corrupted MFN to
> Dom0.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
>
> --- 2010-06-15.orig/xen/common/trace.c 2010-06-28 11:58:37.000000000 +0200
> +++ 2010-06-15/xen/common/trace.c 2010-06-28 11:58:37.000000000 +0200
> @@ -51,7 +51,7 @@ static struct t_info *t_info;
> #define T_INFO_PAGES 2 /* Size fixed at 2 pages for now. */
> #define T_INFO_SIZE ((T_INFO_PAGES)*(PAGE_SIZE))
> /* t_info.tbuf_size + list of mfn offsets + 1 to round up / sizeof uint32_t
> */
> -#define T_INFO_FIRST_OFFSET ((sizeof(int16_t) + NR_CPUS * sizeof(int16_t) +
> 1) / sizeof(uint32_t))
> +#define T_INFO_FIRST_OFFSET (((2 + NR_CPUS) * sizeof(uint16_t)) /
> sizeof(uint32_t))
> static DEFINE_PER_CPU_READ_MOSTLY(struct t_buf *, t_bufs);
> static DEFINE_PER_CPU_READ_MOSTLY(unsigned char *, t_data);
> static DEFINE_PER_CPU_READ_MOSTLY(spinlock_t, t_lock);
>
>
>
>
trace-t_info-first-offset-v2.patch
Description: Text Data
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|