]> xenbits.xensource.com Git - xen.git/commitdiff
xen/trace: Fix trace metadata page count calculation (revert fbf96e6)
authorGeorge Dunlap <george.dunlap@citrix.com>
Fri, 30 Sep 2016 14:42:56 +0000 (15:42 +0100)
committerGeorge Dunlap <george.dunlap@citrix.com>
Tue, 11 Oct 2016 13:23:52 +0000 (14:23 +0100)
Changeset fbf96e6, "xentrace: correct formula to calculate
t_info_pages", broke the trace metadata page count calculation, by
mistaking t_info_first_offset as denominated in bytes, when in fact it
is denominated in words (uint32_t).

Effectively revert that change, and put a comment there to reduce the
chance that someone will make that mistake in the future.

Reviewed-by: Igor Druzhinin <igor.druzhinin@citrix.com>
Tested-by: Igor Druzhinin <igor.druzhinin@citrix.com>
Signed-off-by: George Dunlap <george.dunlap@citrix.com>
xen/common/trace.c

index f651cf36dda21c0beb8dc93a1da7a0a22119ea4f..2f4ecca76a399876a83a7cf276d17c9764fc22c9 100644 (file)
@@ -148,8 +148,12 @@ static int calculate_tbuf_size(unsigned int pages, uint16_t t_info_first_offset)
         pages = max_pages;
     }
 
-    t_info_words = num_online_cpus() * pages * sizeof(uint32_t);
-    t_info_pages = PFN_UP(t_info_first_offset + t_info_words);
+    /* 
+     * 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_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());