Pawel Moll <pawel.m...@arm.com> writes:
> On Fri, 2013-10-11 at 15:36 +0100, Marc Zyngier wrote:
>> As virtio-mmio config registers are specified to be little-endian,
>> using readl() to read the magic value and then memcmp() to check it
>> fails on BE (as readl() has an implicit swab).
>> 
>> Fix it by encoding the magic value as an integer instead of a string.
>> 
>> Cc: Rusty Russell <ru...@rustcorp.com.au>
>> Cc: Michael S. Tsirkin <m...@redhat.com>
>> Cc: Pawel Moll <pawel.m...@arm.com>
>> Signed-off-by: Marc Zyngier <marc.zyng...@arm.com>
>> ---
>>  drivers/virtio/virtio_mmio.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
>> index 1ba0d68..57f24fd 100644
>> --- a/drivers/virtio/virtio_mmio.c
>> +++ b/drivers/virtio/virtio_mmio.c
>> @@ -470,7 +470,7 @@ static int virtio_mmio_probe(struct platform_device 
>> *pdev)
>>  
>>      /* Check magic value */
>>      magic = readl(vm_dev->base + VIRTIO_MMIO_MAGIC_VALUE);
>> -    if (memcmp(&magic, "virt", 4) != 0) {
>> +    if (magic != ('v' | 'i' << 8 | 'r' << 16 | 't' << 24)) {
>>              dev_warn(&pdev->dev, "Wrong magic value 0x%08lx!\n", magic);
>>              return -ENODEV;
>>      }
>
> The new spec will clarify this:
>
> * 0x000 | R | MagicValue
>   Magic value. Must be 0x74726976 (a Little Endian equivalent
>   of a "virt" string).
>
> ... but I like the 'v'i'r't' characters still being there :-)
>
> Acked-by: Pawel Moll <pawel.m...@arm.com>

Applied, thanks.

Cheers,
Rusty.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to