[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [PATCH v3] ivshmem: Fix 64 bit memory bar configuratio
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-stable] [PATCH v3] ivshmem: Fix 64 bit memory bar configuration |
Date: |
Fri, 18 Nov 2016 18:30:12 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 |
On 18/11/2016 16:27, Michael S. Tsirkin wrote:
> On Thu, Nov 17, 2016 at 08:31:03PM +0800, Zhuangyanying wrote:
>> From: Zhuang Yanying <address@hidden>
>>
>> Device ivshmem property use64=0 is designed to make the device
>> expose a 32 bit shared memory BAR instead of 64 bit one. The
>> default is a 64 bit BAR, except pc-1.2 and older retain a 32 bit
>> BAR. A 32 bit BAR can support only up to 1 GiB of shared memory.
>>
>> This worked as designed until commit 5400c02 accidentally flipped
>> its sense: since then, we misinterpret use64=0 as use64=1 and vice
>> versa. Worse, the default got flipped as well. Devices
>> ivshmem-plain and ivshmem-doorbell are not affected.
>>
>> Fix by restoring the test of IVShmemState member not_legacy_32bit
>> that got messed up in commit 5400c02. Also update its
>> initialization for devices ivhsmem-plain and ivshmem-doorbell.
>> Without that, they'd regress to 32 bit BARs.
>>
>> Cc: address@hidden
>> Signed-off-by: Zhuang Yanying <address@hidden>
>> Reviewed-by: Gonglei <address@hidden>
>> Reviewed-by: Marc-André Lureau <address@hidden>
>
> This is UTF-8 encoded, but your mail header says
> Content-Transfer-Encoding: 8bit
> so git am fails to apply this.
The problematic header is more likely
Content-Type: text/plain; charset=iso-8859-1
Paolo
>
>
>> ---
>> hw/misc/ivshmem.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
>> index 230e51b..abeaf3d 100644
>> --- a/hw/misc/ivshmem.c
>> +++ b/hw/misc/ivshmem.c
>> @@ -858,7 +858,7 @@ static void ivshmem_common_realize(PCIDevice *dev, Error
>> **errp)
>> pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY,
>> &s->ivshmem_mmio);
>>
>> - if (!s->not_legacy_32bit) {
>> + if (s->not_legacy_32bit) {
>> attr |= PCI_BASE_ADDRESS_MEM_TYPE_64;
>> }
>>
>> @@ -1045,6 +1045,7 @@ static void ivshmem_plain_init(Object *obj)
>> ivshmem_check_memdev_is_busy,
>> OBJ_PROP_LINK_UNREF_ON_RELEASE,
>> &error_abort);
>> + s->not_legacy_32bit = 1;
>> }
>>
>> static void ivshmem_plain_realize(PCIDevice *dev, Error **errp)
>> @@ -1116,6 +1117,7 @@ static void ivshmem_doorbell_init(Object *obj)
>>
>> s->features |= (1 << IVSHMEM_MSI);
>> s->legacy_size = SIZE_MAX; /* whatever the server sends */
>> + s->not_legacy_32bit = 1;
>> }
>>
>> static void ivshmem_doorbell_realize(PCIDevice *dev, Error **errp)
>> --
>> 1.8.3.1
>>