qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] Remove PCI class code from virtio balloon devic


From: Michael S. Tsirkin
Subject: Re: [Qemu-devel] [PATCH] Remove PCI class code from virtio balloon device
Date: Sun, 18 Mar 2012 14:38:42 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Fri, Mar 16, 2012 at 12:03:08PM +1100, David Gibson wrote:
> Currently the virtio balloon device, when using the virtio-pci interface
> advertises itself with PCI class code MEMORY_RAM.  This is wrong; the
> balloon is vaguely related to memory, but is nothing like a PCI memory
> device in the meaning of the class code, and this code is not required or
> suggested by the virtio PCI specification.
> 
> Worse, this patch causes problems on the pseries machine, because the
> firmware, seeing this class code, advertises the device as memory in the
> device tree, and then a guest kernel bug causes it to see this "memory"
> before the real system memory, leading to a crash in early boot.
> 
> This patch fixes the problem by removing the bogus PCI class code on the
> balloon device.
> 
> Cc: Michael S. Tsirkin <address@hidden>
> Cc: Rusty Russell <address@hidden>
> 
> Signed-off-by: David Gibson <address@hidden>

Well, this gives the class a legacy value 00,
and the PCI spec says we should not use this:

D.1.
Base Class 00h
This base class is defined to provide backward compatibility for devices
that were built
before the Class Code field was defined. No new devices should use this
value and existing
devices should switch to a more appropriate value if possible.
For class codes with this base class value, there are two defined values
for the remaining
fields as shown in the table below. All other values are reserved.
Base Class
00h
Sub-Class
Interface
00h
01h
VGA-compatible device
00h
00h
All currently implemented devices
except VGA-compatible devices

You probably want this instead:

#define PCI_CLASS_OTHERS                0xff


> ---
>  hw/virtio-pci.c |    1 -
>  1 files changed, 0 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
> index a0fb7c1..3c3907a 100644
> --- a/hw/virtio-pci.c
> +++ b/hw/virtio-pci.c
> @@ -919,7 +919,6 @@ static void virtio_balloon_class_init(ObjectClass *klass, 
> void *data)
>      k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
>      k->device_id = PCI_DEVICE_ID_VIRTIO_BALLOON;
>      k->revision = VIRTIO_PCI_ABI_VERSION;
> -    k->class_id = PCI_CLASS_MEMORY_RAM;
>      dc->reset = virtio_pci_reset;
>      dc->props = virtio_balloon_properties;
>  }
> -- 
> 1.7.9.1



reply via email to

[Prev in Thread] Current Thread [Next in Thread]