qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] Don't use QEMU_VERSION in ATA/ATAPI replies to


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH] Don't use QEMU_VERSION in ATA/ATAPI replies to IDENTIFY cmds
Date: Wed, 10 Sep 2008 19:30:21 -0500
User-agent: Thunderbird 2.0.0.16 (X11/20080723)

Marc Bevand wrote:
At boottime, the licensing mechanism in Windows examines the reply to
ATA/ATAPI IDENTIFY commands to determine if the hardware has been
upgraded and whether Windows needs to be "reactivated" or not.

I can confirm this because my Windows XP VM asked for reactivation
after a QEMU upgrade and I was able to remove the need for
reactivation by applying a patch similar to the one below (the
versions were all hardcoded to "0.9.0" -- the version of QEMU I was
running before).

To prevent this kind of problem from happening again, I suggest QEMU
stops returning its constantly changing version (QEMU_VERSION) in
replies to IDENTIFY commands. Instead a constant version string
such as "1.0" should be returned.

Wouldn't it be better to just use whatever QEMU_VERSION is right now with a big fat comment? At least then, any VM made with QEMU 0.9.1 won't require reactivation.

No point in breaking everyone by changing it to 1.0.

Regards,

Anthony Liguori

Comments ?

-marc


Index: hw/ide.c
===================================================================
--- hw/ide.c    (revision 5193)
+++ hw/ide.c    (working copy)
@@ -549,7 +549,7 @@
     put_le16(p + 20, 3); /* XXX: retired, remove ? */
     put_le16(p + 21, 512); /* cache size in sectors */
     put_le16(p + 22, 4); /* ecc bytes */
-    padstr((char *)(p + 23), QEMU_VERSION, 8); /* firmware version */
+    padstr((char *)(p + 23), "1.0", 8); /* firmware version */
     padstr((char *)(p + 27), "QEMU HARDDISK", 40); /* model */
 #if MAX_MULT_SECTORS > 1
     put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
@@ -615,7 +615,7 @@
     put_le16(p + 20, 3); /* buffer type */
     put_le16(p + 21, 512); /* cache size in sectors */
     put_le16(p + 22, 4); /* ecc bytes */
-    padstr((char *)(p + 23), QEMU_VERSION, 8); /* firmware version */
+    padstr((char *)(p + 23), "1.0", 8); /* firmware version */
     padstr((char *)(p + 27), "QEMU DVD-ROM", 40); /* model */
     put_le16(p + 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
 #ifdef USE_DMA_CDROM
@@ -669,7 +669,7 @@
     snprintf(buf, sizeof(buf), "QM%05d", s->drive_serial);
     padstr((char *)(p + 10), buf, 20); /* Serial number in ASCII */
     put_le16(p + 22, 0x0004);                  /* ECC bytes */
-    padstr((char *) (p + 23), QEMU_VERSION, 8);        /* Firmware Revision */
+    padstr((char *) (p + 23), "1.0", 8);     /* Firmware Revision */
     padstr((char *) (p + 27), "QEMU MICRODRIVE", 40);/* Model number */
 #if MAX_MULT_SECTORS > 1
     put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
@@ -1821,7 +1821,7 @@
         buf[7] = 0; /* reserved */
         padstr8(buf + 8, 8, "QEMU");
         padstr8(buf + 16, 16, "QEMU DVD-ROM");
-        padstr8(buf + 32, 4, QEMU_VERSION);
+        padstr8(buf + 32, 4, "1.0");
         ide_atapi_cmd_reply(s, 36, max_len);
         break;
     case GPCMD_GET_CONFIGURATION:







reply via email to

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