[libvirt] [PATCH] udev: Don't try to dump DMI on non-intel archs
Michal Privoznik
mprivozn at redhat.com
Wed Jul 20 14:54:45 UTC 2011
On 20.07.2011 16:20, Eric Blake wrote:
> On 07/20/2011 08:09 AM, Michal Privoznik wrote:
>>> That depends on how things behave on other arches. I don't have ready
>>> access to such an architecture, which is why I'm asking - do we already
>>> gracefully handle any failures on code paths that try to use dmidecode,
>>> or are there currently code paths that make unconditional use of
>>> dmidecode (and fail) which should be made arch-conditional?
>>>
>>> It's pointless to write a patch until we know what behavior we're
>>> patching.
>>>
>> So I've managed to run libvirt on ppc64. Here are the results:
>>
>>
>> # virsh sysinfo
>> error: failed to get sysinfo
>> error: unsupported configuration: Host SMBIOS information is not
>> available
>
> Reasonable - we're gracefully handling the lack of information, and with
> an appropriate error message.
>
>> and in logs:
>> 05:25:40.682: 29653: error : virSysinfoRead:462 : internal error Failed
>> to find path for dmidecode binary
>
> Not so nice. "internal error" in a log message always sparks worry among
> people, even if in this case it did not stop libvirt from doing useful
> work. I would be in favor of a patch to src/util/sysinfo.c that changes
> the #ifdef WIN32 around virSysinfoRead() stub that fails with ENOSYS
> instead of VIR_ERR_INTERNAL_ERROR to also non-x86 arches. Could you test
> this, to see whether that makes the log less scary?
>
> diff --git i/src/util/sysinfo.c w/src/util/sysinfo.c
> index 2c8e687..9cd6849 100644
> --- i/src/util/sysinfo.c
> +++ w/src/util/sysinfo.c
> @@ -113,7 +113,10 @@ void virSysinfoDefFree(virSysinfoDefPtr def)
> *
> * Returns: a filled up sysinfo structure or NULL in case of error
> */
> -#ifdef WIN32
> +#if defined(WIN32) || \
> + defined(__x86_64__) || \
> + defined(__i386__) || \
> + defined(__amd64__)
> virSysinfoDefPtr
> virSysinfoRead(void) {
> /*
> @@ -125,7 +128,7 @@ virSysinfoRead(void) {
> return NULL;
> }
>
> -#else /* !WIN32 */
> +#else /* !WIN32 && x86 */
>
> static char *
> virSysinfoParseBIOS(char *base, virSysinfoDefPtr ret)
>
>
In fact, we need a patch with complement condition:
diff --git a/src/util/sysinfo.c b/src/util/sysinfo.c
index 2c8e687..6625cae 100644
--- a/src/util/sysinfo.c
+++ b/src/util/sysinfo.c
@@ -113,7 +113,10 @@ void virSysinfoDefFree(virSysinfoDefPtr def)
*
* Returns: a filled up sysinfo structure or NULL in case of error
*/
-#ifdef WIN32
+#if defined(WIN32) || \
+ !(defined(__x86_64__) || \
+ defined(__i386__) || \
+ defined(__amd64__))
virSysinfoDefPtr
virSysinfoRead(void) {
/*
@@ -125,7 +128,7 @@ virSysinfoRead(void) {
return NULL;
}
-#else /* !WIN32 */
+#else /* !WIN32 && x86 */
static char *
virSysinfoParseBIOS(char *base, virSysinfoDefPtr ret)
@@ -509,7 +512,7 @@ no_memory:
ret = NULL;
goto cleanup;
}
-#endif /* !WIN32 */
+#endif /* !WIN32 && x86 */
static void
virSysinfoBIOSFormat(virSysinfoDefPtr def, const char *prefix,
With this patch we transfer to error:
10:51:36.515: 4412: error : virSysinfoRead:127 : Host sysinfo extraction
not supported on this platform: Function not implemented
I think this is the right way of dealing with this, isn't it?
Michal
More information about the libvir-list
mailing list