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-ia64-devel

RE: [Xen-ia64-devel][PATCH] SMBios table support in XEN

Hi,

   I'll point out the specific place I was thinking below, along with a
couple other issues.  When I test this with the latest GFW, I'm also
getting a couple of these on domain startup:

xencomm_privcmd_xen_version: unknown version op 17

And I'm not seeing an SMBIOS table with dmidecode in the guest.  Is
there still something missing?  Thanks,

        Alex


On Fri, 2007-08-24 at 13:11 +0800, Zhang, Xing Z wrote:
> +/* Founctions for building SMBios table */
> +static void hypercall_xen_version(int xc_handle, domid_t dom, int
> type, void *val, int len)
> +{

   I think this needs to be more strict in it's "type" validation.
Currently XENVER_guest_handle returns one thing, anything at all passed
to it returns a version.  The version stuff seems a little redundant
with xc_version().  Could we use that instead?

> +    if ( type != XENVER_guest_handle )
> +    {
> +        DECLARE_HYPERCALL;
> +
> +        hypercall.op = __HYPERVISOR_xen_version;
> +        hypercall.arg[0] = __HYPERVISOR_xen_version;
> +
> +        lock_pages(val, len);
> +        do_xen_hypercall(xc_handle, &hypercall);
> +        unlock_pages(val, len);
> +
> +        memcpy(val, &hypercall.arg[1], len);
> +    }
> +    else
> +    {
> +        DECLARE_DOMCTL;
> +
> +        domctl.cmd = XEN_DOMCTL_getdomaininfo;
> +        domctl.domain = dom;
> +
> +        if (xc_domctl(xc_handle, &domctl) < 0)
> +        {
> +            PERROR("Get XEN UUID failed, SMBios may be built wrong!
> \n");
> +            memset(val, 0x0, len);
> +            return;
> +        }
> +
> +        memcpy(val, domctl.u.getdomaininfo.handle, len);
> +    }
>  }
...
> @@ -1068,15 +1142,31 @@ setup_guest(int xc_handle, uint32_t dom,
>  
>      vcpus = domctl.u.getdomaininfo.max_vcpu_id + 1;
>  
> -    // Hand-off state passed to guest firmware 
> -    if (xc_ia64_build_hob(xc_handle, dom, dom_memsize, vcpus,
> nvram_start) < 0) {
> +    // Get Xen version info for building SMBios table
> +    {
> +        uint8_t uuid[XENVER_UUID_LEN]; // This will break if
> xen_domain_handle_t is not uint8_t[16]

   This is where I thought maybe we should use a xen_domain_handle_t
like Keir did in uptream:

    xen_domain_handle_t uuid;

    ...

    BUILD_BUG_ON(sizeof(xen_domain_handle_t) != 16);

Also, these should be declared at the beginning of the function instead
of patched in to the middle by a sub-scope (this will also fix the
indenting of the xc_ia64_build_hob() call below).

> +        uint32_t xen_version;
> +        char xen_extra_version[XEN_EXTRAVERSION_LEN];
> +
> +        hypercall_xen_version(xc_handle, dom, XENVER_guest_handle,
> +                            (void *)uuid, sizeof(uuid));
> +        hypercall_xen_version(xc_handle, dom, XENVER_version,
> +                            (void *)&xen_version,
> sizeof(xen_version));
> +        hypercall_xen_version(xc_handle, dom, XENVER_extraversion,
> +                            (void *)xen_extra_version,
> sizeof(xen_extra_version));
> +
> +    // Hand-off state passed to guest firmware
> +    if (xc_ia64_build_hob(xc_handle, dom, dom_memsize, vcpus,
> nvram_start,
> +                uuid, xen_version, xen_extra_version) < 0) {
>          PERROR("Could not build hob\n");
>          goto error_out;
>      }
>  
-- 
Alex Williamson                             HP Open Source & Linux Org.


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