WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] hvmloader: allow the possibility to alloc

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] hvmloader: allow the possibility to allocate the size of smbios table
From: Xen patchbot-unstable <patchbot@xxxxxxx>
Date: Thu, 16 Jun 2011 11:12:17 +0100
Delivery-date: Thu, 16 Jun 2011 03:24:44 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1306943363 -3600
# Node ID 303635b6fe5bd523e0919b0e60fd69b1a4322c55
# Parent  58a141a84d0f7e5d6c82a3f4fe1b23304b7177e2
hvmloader: allow the possibility to allocate the size of smbios table
we actually need.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---


diff -r 58a141a84d0f -r 303635b6fe5b tools/firmware/hvmloader/seabios.c
--- a/tools/firmware/hvmloader/seabios.c        Wed Jun 01 16:49:03 2011 +0100
+++ b/tools/firmware/hvmloader/seabios.c        Wed Jun 01 16:49:23 2011 +0100
@@ -103,8 +103,7 @@
 static void seabios_create_smbios_tables(void)
 {
     uint32_t ep = (uint32_t)scratch_alloc(sizeof(struct smbios_entry_point), 
0);
-    uint32_t t = (uint32_t)mem_alloc(32*1024, 0);
-    hvm_write_smbios_tables(ep, t, 32*1024);
+    hvm_write_smbios_tables(ep, 0UL, 0UL);
     add_table(ep);
 }
 
diff -r 58a141a84d0f -r 303635b6fe5b tools/firmware/hvmloader/smbios.c
--- a/tools/firmware/hvmloader/smbios.c Wed Jun 01 16:49:03 2011 +0100
+++ b/tools/firmware/hvmloader/smbios.c Wed Jun 01 16:49:23 2011 +0100
@@ -28,10 +28,11 @@
 #include "hypercall.h"
 
 static int
-write_smbios_tables(void *ep, void *start, unsigned long phys,
+write_smbios_tables(void *ep, void *start,
                     uint32_t vcpus, uint64_t memsize,
                     uint8_t uuid[16], char *xen_version,
-                    uint32_t xen_major_version, uint32_t xen_minor_version);
+                    uint32_t xen_major_version, uint32_t xen_minor_version,
+                    unsigned *nr_structs, unsigned *max_struct_size);
 
 static void
 get_cpu_manufacturer(char *buf, int len);
@@ -85,12 +86,13 @@
 }
 
 static int
-write_smbios_tables(void *ep, void *start, unsigned long phys,
+write_smbios_tables(void *ep, void *start,
                     uint32_t vcpus, uint64_t memsize,
                     uint8_t uuid[16], char *xen_version,
-                    uint32_t xen_major_version, uint32_t xen_minor_version)
+                    uint32_t xen_major_version, uint32_t xen_minor_version,
+                    unsigned *nr_structs, unsigned *max_struct_size)
 {
-    unsigned cpu_num, nr_structs = 0, max_struct_size = 0;
+    unsigned cpu_num;
     char *p, *q;
     char cpu_manufacturer[15];
     int i, nr_mem_devs;
@@ -101,9 +103,9 @@
 
 #define do_struct(fn) do {                      \
     q = (fn);                                   \
-    nr_structs++;                               \
-    if ( (q - p) > max_struct_size )            \
-        max_struct_size = q - p;                \
+    (*nr_structs)++;                            \
+    if ( (q - p) > *max_struct_size )           \
+        *max_struct_size = q - p;               \
     p = q;                                      \
 } while (0)
 
@@ -133,10 +135,6 @@
 
 #undef do_struct
 
-    smbios_entry_point_init(ep, max_struct_size,
-                            (p - (char *)start), phys,
-                            nr_structs);
-
     return ((char *)p - (char *)start);
 }
 
@@ -159,7 +157,7 @@
     return (sz + (1ul << 20) - 1) >> 20;
 }
 
-int
+void
 hvm_write_smbios_tables(unsigned long ep, unsigned long smbios_start, unsigned 
long smbios_end)
 {
     xen_domain_handle_t uuid;
@@ -173,6 +171,7 @@
     unsigned len = 0; /* length of string already composed */
     char tmp[16]; /* holds result of itoa() */
     unsigned tmp_len; /* length of next string to add */
+    unsigned nr_structs = 0, max_struct_size = 0;
 
     hypercall_xen_version(XENVER_guest_handle, uuid);
     BUILD_BUG_ON(sizeof(xen_domain_handle_t) != 16);
@@ -220,21 +219,26 @@
     xen_version_str[sizeof(xen_version_str)-1] = '\0';
 
     /* scratch_start is a safe large memory area for scratch. */
-    len = write_smbios_tables((void *)ep, (void *)scratch_start, smbios_start,
+    len = write_smbios_tables((void *)ep, (void *)scratch_start,
                               hvm_info->nr_vcpus, get_memsize(),
                               uuid, xen_version_str,
-                              xen_major_version, xen_minor_version);
-    if ( smbios_start + len > smbios_end )
+                              xen_major_version, xen_minor_version,
+                              &nr_structs, &max_struct_size);
+    if ( smbios_start && smbios_start + len > smbios_end )
         goto error_out;
-    /* Okay, not too large: copy out of scratch to final location. */
+
+    if ( !smbios_start )
+        smbios_start = (unsigned long)mem_alloc(len, 0);
+
     memcpy((void *)smbios_start, (void *)scratch_start, len);
 
-    return len;
+    smbios_entry_point_init((void *)ep, max_struct_size, len, smbios_start, 
nr_structs);
+
+    return;
 
  error_out:
     printf("Could not write SMBIOS tables, error in hvmloader.c:"
            "hvm_write_smbios_tables()\n");
-    return 0;
 }
 
 
diff -r 58a141a84d0f -r 303635b6fe5b tools/firmware/hvmloader/util.h
--- a/tools/firmware/hvmloader/util.h   Wed Jun 01 16:49:03 2011 +0100
+++ b/tools/firmware/hvmloader/util.h   Wed Jun 01 16:49:23 2011 +0100
@@ -192,7 +192,7 @@
 /* Miscellaneous. */
 void cacheattr_init(void);
 unsigned long create_mp_tables(void *table);
-int hvm_write_smbios_tables(unsigned long ep,
+void hvm_write_smbios_tables(unsigned long ep,
                            unsigned long smbios_start,
                            unsigned long smbios_end);
 void smp_initialise(void);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] hvmloader: allow the possibility to allocate the size of smbios table, Xen patchbot-unstable <=