Message ID | 1338348951-11845-1-git-send-email-vianac@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
> diff --git a/hw/bt-sdp.c b/hw/bt-sdp.c > index 3e390ab..c0431d1 100644 > --- a/hw/bt-sdp.c > +++ b/hw/bt-sdp.c > @@ -834,7 +834,7 @@ SERVICE(hid, > ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) I know it's not relate to this patch, but the above link seems not available anymore. User document now is hosted on "http://qemu.weilnetz.de/qemu-doc.html". Regards, chenwj
On 30 May 2012 04:51, 陳韋任 (Wei-Ren Chen) <chenwj@iis.sinica.edu.tw> wrote: >> diff --git a/hw/bt-sdp.c b/hw/bt-sdp.c >> index 3e390ab..c0431d1 100644 >> --- a/hw/bt-sdp.c >> +++ b/hw/bt-sdp.c >> @@ -834,7 +834,7 @@ SERVICE(hid, >> ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) > > I know it's not relate to this patch, but the above link seems not available > anymore. User document now is hosted on "http://qemu.weilnetz.de/qemu-doc.html". Yeah, I noticed that before. I guess we should fix it if we can do so without breaking compatibility with something, but that's a different patch. -- PMM
On Wed, May 30, 2012 at 04:54:26AM +0100, Peter Maydell wrote: > On 30 May 2012 04:51, 陳韋任 (Wei-Ren Chen) <chenwj@iis.sinica.edu.tw> wrote: > >> diff --git a/hw/bt-sdp.c b/hw/bt-sdp.c > >> index 3e390ab..c0431d1 100644 > >> --- a/hw/bt-sdp.c > >> +++ b/hw/bt-sdp.c > >> @@ -834,7 +834,7 @@ SERVICE(hid, > >> ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) > > > > I know it's not relate to this patch, but the above link seems not available > > anymore. User document now is hosted on "http://qemu.weilnetz.de/qemu-doc.html". > > Yeah, I noticed that before. I guess we should fix it if we can do so > without breaking compatibility with something, but that's a different > patch. Anything depends on the link? o.0
On 30 May 2012 04:57, 陳韋任 (Wei-Ren Chen) <chenwj@iis.sinica.edu.tw> wrote: > On Wed, May 30, 2012 at 04:54:26AM +0100, Peter Maydell wrote: >> On 30 May 2012 04:51, 陳韋任 (Wei-Ren Chen) <chenwj@iis.sinica.edu.tw> wrote: >> >> diff --git a/hw/bt-sdp.c b/hw/bt-sdp.c >> >> index 3e390ab..c0431d1 100644 >> >> --- a/hw/bt-sdp.c >> >> +++ b/hw/bt-sdp.c >> >> @@ -834,7 +834,7 @@ SERVICE(hid, >> >> ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) >> > >> > I know it's not relate to this patch, but the above link seems not available >> > anymore. User document now is hosted on "http://qemu.weilnetz.de/qemu-doc.html". >> >> Yeah, I noticed that before. I guess we should fix it if we can do so >> without breaking compatibility with something, but that's a different >> patch. > > Anything depends on the link? o.0 It's exposed to the guest, so it's not impossible that it could provoke a guest OS to decide it was a new device, for example. My guess is it would be OK to fix but I'm not a bluetooth expert :-) -- PMM
On 05/29/2012 10:35 PM, Crístian Viana wrote: > QEMU exposes its version to the guest's hardware and in some cases that is wrong > (e.g. Windows prints messages about driver updates when you switch > the QEMU version). > There is a new field now on the struct QEmuMachine, hw_version, which may > contain the version that the specific machine should report. If that field is > set, then that machine will report that version to the guest. > > Signed-off-by: Crístian Viana<vianac@linux.vnet.ibm.com> Applied. Thanks. Regards, Anthony Liguori > --- > > Changes since v4: > - Rewrite commit message > - Replace snprintf calls by pstrcpy/pstrcat. > > hw/boards.h | 1 + > hw/bt-sdp.c | 6 +++--- > hw/ide/core.c | 2 +- > hw/nseries.c | 3 ++- > hw/pc_piix.c | 11 +++++++++-- > hw/scsi-bus.c | 2 +- > hw/scsi-disk.c | 2 +- > hw/usb/dev-bluetooth.c | 2 +- > hw/usb/dev-hid.c | 2 +- > hw/usb/dev-hub.c | 2 +- > hw/usb/dev-serial.c | 2 +- > hw/usb/dev-smartcard-reader.c | 4 ++-- > hw/usb/dev-storage.c | 2 +- > hw/usb/dev-wacom.c | 2 +- > hw/usb/redirect.c | 8 +++++--- > osdep.c | 11 +++++++++++ > osdep.h | 3 +++ > target-i386/cpu.c | 18 +++++++++++++----- > vl.c | 4 ++++ > 19 files changed, 62 insertions(+), 25 deletions(-) > > diff --git a/hw/boards.h b/hw/boards.h > index 667177d..59c01d0 100644 > --- a/hw/boards.h > +++ b/hw/boards.h > @@ -29,6 +29,7 @@ typedef struct QEMUMachine { > const char *default_machine_opts; > GlobalProperty *compat_props; > struct QEMUMachine *next; > + const char *hw_version; > } QEMUMachine; > > int qemu_register_machine(QEMUMachine *m); > diff --git a/hw/bt-sdp.c b/hw/bt-sdp.c > index 3e390ab..c0431d1 100644 > --- a/hw/bt-sdp.c > +++ b/hw/bt-sdp.c > @@ -834,7 +834,7 @@ SERVICE(hid, > ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) > ATTRIBUTE(SVCNAME_PRIMARY, STRING("QEMU Bluetooth HID")) > ATTRIBUTE(SVCDESC_PRIMARY, STRING("QEMU Keyboard/Mouse")) > - ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU " QEMU_VERSION)) > + ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU")) > > /* Profile specific */ > ATTRIBUTE(DEVICE_RELEASE_NUMBER, UINT16(0x0091)) /* Deprecated, remove */ > @@ -908,7 +908,7 @@ SERVICE(sdp, > LIST(UUID128(SDP_SERVER_PROFILE_ID) UINT16(0x0100)) > )) > ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) > - ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU " QEMU_VERSION)) > + ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU")) > > /* Profile specific */ > ATTRIBUTE(VERSION_NUM_LIST, LIST(UINT16(0x0100))) > @@ -931,7 +931,7 @@ SERVICE(pnp, > LIST(UUID128(PNP_INFO_PROFILE_ID) UINT16(0x0100)) > )) > ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) > - ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU " QEMU_VERSION)) > + ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU")) > > /* Profile specific */ > ATTRIBUTE(SPECIFICATION_ID, UINT16(0x0100)) > diff --git a/hw/ide/core.c b/hw/ide/core.c > index 9785d5f..c6de8a2 100644 > --- a/hw/ide/core.c > +++ b/hw/ide/core.c > @@ -1983,7 +1983,7 @@ int ide_init_drive(IDEState *s, BlockDriverState *bs, IDEDriveKind kind, > if (version) { > pstrcpy(s->version, sizeof(s->version), version); > } else { > - pstrcpy(s->version, sizeof(s->version), QEMU_VERSION); > + pstrcpy(s->version, sizeof(s->version), qemu_get_version()); > } > > ide_reset(s); > diff --git a/hw/nseries.c b/hw/nseries.c > index a5cfa8c..b70aa40 100644 > --- a/hw/nseries.c > +++ b/hw/nseries.c > @@ -1247,7 +1247,8 @@ static int n8x0_atag_setup(void *p, int model) > stw_raw(w ++, 24); /* u16 len */ > strcpy((void *) w, "hw-build"); /* char component[12] */ > w += 6; > - strcpy((void *) w, "QEMU " QEMU_VERSION); /* char version[12] */ > + strcpy((void *) w, "QEMU "); > + pstrcat((void *) w, 12, qemu_get_version()); /* char version[12] */ > w += 6; > > tag = (model == 810) ? "1.1.10-qemu" : "1.1.6-qemu"; > diff --git a/hw/pc_piix.c b/hw/pc_piix.c > index a7aad4b..67aa10d 100644 > --- a/hw/pc_piix.c > +++ b/hw/pc_piix.c > @@ -392,6 +392,7 @@ static QEMUMachine pc_machine_v1_0 = { > PC_COMPAT_1_0, > { /* end of list */ } > }, > + .hw_version = "1.0", > }; > > #define PC_COMPAT_0_15 \ > @@ -406,6 +407,7 @@ static QEMUMachine pc_machine_v0_15 = { > PC_COMPAT_0_15, > { /* end of list */ } > }, > + .hw_version = "0.15", > }; > > #define PC_COMPAT_0_14 \ > @@ -446,6 +448,7 @@ static QEMUMachine pc_machine_v0_14 = { > }, > { /* end of list */ } > }, > + .hw_version = "0.14", > }; > > #define PC_COMPAT_0_13 \ > @@ -482,6 +485,7 @@ static QEMUMachine pc_machine_v0_13 = { > }, > { /* end of list */ } > }, > + .hw_version = "0.13", > }; > > #define PC_COMPAT_0_12 \ > @@ -513,7 +517,8 @@ static QEMUMachine pc_machine_v0_12 = { > .value = stringify(0), > }, > { /* end of list */ } > - } > + }, > + .hw_version = "0.12", > }; > > #define PC_COMPAT_0_11 \ > @@ -545,7 +550,8 @@ static QEMUMachine pc_machine_v0_11 = { > .value = "0.11", > }, > { /* end of list */ } > - } > + }, > + .hw_version = "0.11", > }; > > static QEMUMachine pc_machine_v0_10 = { > @@ -578,6 +584,7 @@ static QEMUMachine pc_machine_v0_10 = { > }, > { /* end of list */ } > }, > + .hw_version = "0.10", > }; > > static QEMUMachine isapc_machine = { > diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c > index f10f3ec..688f6ac 100644 > --- a/hw/scsi-bus.c > +++ b/hw/scsi-bus.c > @@ -406,7 +406,7 @@ static bool scsi_target_emulate_inquiry(SCSITargetReq *r) > r->buf[7] = 0x10 | (r->req.bus->info->tcq ? 0x02 : 0); /* Sync, TCQ. */ > memcpy(&r->buf[8], "QEMU ", 8); > memcpy(&r->buf[16], "QEMU TARGET ", 16); > - strncpy((char *)&r->buf[32], QEMU_VERSION, 4); > + pstrcpy((char *)&r->buf[32], 4, qemu_get_version()); > } > return true; > } > diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c > index 045c764..19bc4ac 100644 > --- a/hw/scsi-disk.c > +++ b/hw/scsi-disk.c > @@ -1704,7 +1704,7 @@ static int scsi_initfn(SCSIDevice *dev) > } > > if (!s->version) { > - s->version = g_strdup(QEMU_VERSION); > + s->version = g_strdup(qemu_get_version()); > } > > if (bdrv_is_sg(s->qdev.conf.bs)) { > diff --git a/hw/usb/dev-bluetooth.c b/hw/usb/dev-bluetooth.c > index 6b74eff..55bc191 100644 > --- a/hw/usb/dev-bluetooth.c > +++ b/hw/usb/dev-bluetooth.c > @@ -57,7 +57,7 @@ enum { > }; > > static const USBDescStrings desc_strings = { > - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, > + [STR_MANUFACTURER] = "QEMU", > [STR_SERIALNUMBER] = "1", > }; > > diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c > index f29544d..b3dcd23 100644 > --- a/hw/usb/dev-hid.c > +++ b/hw/usb/dev-hid.c > @@ -60,7 +60,7 @@ enum { > }; > > static const USBDescStrings desc_strings = { > - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, > + [STR_MANUFACTURER] = "QEMU", > [STR_PRODUCT_MOUSE] = "QEMU USB Mouse", > [STR_PRODUCT_TABLET] = "QEMU USB Tablet", > [STR_PRODUCT_KEYBOARD] = "QEMU USB Keyboard", > diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c > index b5962da..8fd30df 100644 > --- a/hw/usb/dev-hub.c > +++ b/hw/usb/dev-hub.c > @@ -90,7 +90,7 @@ enum { > }; > > static const USBDescStrings desc_strings = { > - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, > + [STR_MANUFACTURER] = "QEMU", > [STR_PRODUCT] = "QEMU USB Hub", > [STR_SERIALNUMBER] = "314159", > }; > diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c > index 56743ee..8aa6552 100644 > --- a/hw/usb/dev-serial.c > +++ b/hw/usb/dev-serial.c > @@ -111,7 +111,7 @@ enum { > }; > > static const USBDescStrings desc_strings = { > - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, > + [STR_MANUFACTURER] = "QEMU", > [STR_PRODUCT_SERIAL] = "QEMU USB SERIAL", > [STR_PRODUCT_BRAILLE] = "QEMU USB BRAILLE", > [STR_SERIALNUMBER] = "1", > diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c > index 3b7604e..b0e70b0 100644 > --- a/hw/usb/dev-smartcard-reader.c > +++ b/hw/usb/dev-smartcard-reader.c > @@ -81,7 +81,7 @@ do { \ > #define CCID_CONTROL_GET_DATA_RATES 0x3 > > #define CCID_PRODUCT_DESCRIPTION "QEMU USB CCID" > -#define CCID_VENDOR_DESCRIPTION "QEMU " QEMU_VERSION > +#define CCID_VENDOR_DESCRIPTION "QEMU" > #define CCID_INTERFACE_NAME "CCID Interface" > #define CCID_SERIAL_NUMBER_STRING "1" > /* > @@ -401,7 +401,7 @@ enum { > }; > > static const USBDescStrings desc_strings = { > - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, > + [STR_MANUFACTURER] = "QEMU", > [STR_PRODUCT] = "QEMU USB CCID", > [STR_SERIALNUMBER] = "1", > [STR_INTERFACE] = "CCID Interface", > diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c > index ae22fb1..f863dfc 100644 > --- a/hw/usb/dev-storage.c > +++ b/hw/usb/dev-storage.c > @@ -82,7 +82,7 @@ enum { > }; > > static const USBDescStrings desc_strings = { > - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, > + [STR_MANUFACTURER] = "QEMU", > [STR_PRODUCT] = "QEMU USB HARDDRIVE", > [STR_SERIALNUMBER] = "1", > [STR_CONFIG_FULL] = "Full speed config (usb 1.1)", > diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c > index 3b51d45..ed9a5ee 100644 > --- a/hw/usb/dev-wacom.c > +++ b/hw/usb/dev-wacom.c > @@ -62,7 +62,7 @@ enum { > }; > > static const USBDescStrings desc_strings = { > - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, > + [STR_MANUFACTURER] = "QEMU", > [STR_PRODUCT] = "Wacom PenPartner", > [STR_SERIALNUMBER] = "1", > }; > diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c > index 51c27b4..d949f04 100644 > --- a/hw/usb/redirect.c > +++ b/hw/usb/redirect.c > @@ -143,8 +143,6 @@ static void usbredir_interrupt_packet(void *priv, uint32_t id, > static int usbredir_handle_status(USBRedirDevice *dev, > int status, int actual_len); > > -#define VERSION "qemu usb-redir guest " QEMU_VERSION > - > /* > * Logging stuff > */ > @@ -794,6 +792,10 @@ static void usbredir_open_close_bh(void *opaque) > { > USBRedirDevice *dev = opaque; > uint32_t caps[USB_REDIR_CAPS_SIZE] = { 0, }; > + char version[32]; > + > + strcpy(version, "qemu usb-redir guest "); > + pstrcat(version, sizeof(version), qemu_get_version()); > > usbredir_device_disconnect(dev); > > @@ -828,7 +830,7 @@ static void usbredir_open_close_bh(void *opaque) > > usbredirparser_caps_set_cap(caps, usb_redir_cap_connect_device_version); > usbredirparser_caps_set_cap(caps, usb_redir_cap_filter); > - usbredirparser_init(dev->parser, VERSION, caps, USB_REDIR_CAPS_SIZE, 0); > + usbredirparser_init(dev->parser, version, caps, USB_REDIR_CAPS_SIZE, 0); > usbredirparser_do_write(dev->parser); > } > } > diff --git a/osdep.c b/osdep.c > index 3e6bada..03817f0 100644 > --- a/osdep.c > +++ b/osdep.c > @@ -48,6 +48,8 @@ extern int madvise(caddr_t, size_t, int); > #include "trace.h" > #include "qemu_socket.h" > > +static const char *qemu_version = QEMU_VERSION; > + > int socket_set_cork(int fd, int v) > { > #if defined(SOL_TCP)&& defined(TCP_CORK) > @@ -242,3 +244,12 @@ ssize_t qemu_recv_full(int fd, void *buf, size_t count, int flags) > return total; > } > > +void qemu_set_version(const char *version) > +{ > + qemu_version = version; > +} > + > +const char *qemu_get_version(void) > +{ > + return qemu_version; > +} > diff --git a/osdep.h b/osdep.h > index 9db8766..3ea4af0 100644 > --- a/osdep.h > +++ b/osdep.h > @@ -149,4 +149,7 @@ static inline void qemu_timersub(const struct timeval *val1, > > void qemu_set_cloexec(int fd); > > +void qemu_set_version(const char *); > +const char *qemu_get_version(void); > + > #endif > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index 89b4ac7..b44c166 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -303,7 +303,6 @@ static x86_def_t builtin_x86_defs[] = { > .ext3_features = CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | > CPUID_EXT3_ABM | CPUID_EXT3_SSE4A, > .xlevel = 0x8000000A, > - .model_id = "QEMU Virtual CPU version " QEMU_VERSION, > }, > { > .name = "phenom", > @@ -386,7 +385,6 @@ static x86_def_t builtin_x86_defs[] = { > .features = PPRO_FEATURES, > .ext_features = CPUID_EXT_SSE3 | CPUID_EXT_POPCNT, > .xlevel = 0x80000004, > - .model_id = "QEMU Virtual CPU version " QEMU_VERSION, > }, > { > .name = "kvm32", > @@ -465,8 +463,6 @@ static x86_def_t builtin_x86_defs[] = { > .features = PPRO_FEATURES | CPUID_PSE36 | CPUID_VME | CPUID_MTRR | CPUID_MCA, > .ext2_features = (PPRO_FEATURES& EXT2_FEATURE_MASK) | CPUID_EXT2_MMXEXT | CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT, > .xlevel = 0x80000008, > - /* XXX: put another string ? */ > - .model_id = "QEMU Virtual CPU version " QEMU_VERSION, > }, > { > .name = "n270", > @@ -1324,11 +1320,23 @@ void cpu_clear_apic_feature(CPUX86State *env) > */ > void x86_cpudef_setup(void) > { > - int i; > + int i, j; > + static const char *model_with_versions[] = { "qemu32", "qemu64", "athlon" }; > > for (i = 0; i< ARRAY_SIZE(builtin_x86_defs); ++i) { > builtin_x86_defs[i].next = x86_defs; > builtin_x86_defs[i].flags = 1; > + > + /* Look for specific "cpudef" models that */ > + /* have the QEmu version in .model_id */ > + for (j = 0; j< ARRAY_SIZE(model_with_versions); j++) { > + if (strcmp(model_with_versions[j], builtin_x86_defs[i].name) == 0) { > + pstrcpy(builtin_x86_defs[i].model_id, sizeof(builtin_x86_defs[i].model_id), "QEMU Virtual CPU version "); > + pstrcat(builtin_x86_defs[i].model_id, sizeof(builtin_x86_defs[i].model_id), qemu_get_version()); > + break; > + } > + } > + > x86_defs =&builtin_x86_defs[i]; > } > #if !defined(CONFIG_USER_ONLY) > diff --git a/vl.c b/vl.c > index 23ab3a3..668917c 100644 > --- a/vl.c > +++ b/vl.c > @@ -3208,6 +3208,10 @@ int main(int argc, char **argv, char **envp) > } > loc_set_none(); > > + if (machine->hw_version) { > + qemu_set_version(machine->hw_version); > + } > + > /* Init CPU def lists, based on config > * - Must be called after all the qemu_read_config_file() calls > * - Must be called before list_cpus()
diff --git a/hw/boards.h b/hw/boards.h index 667177d..59c01d0 100644 --- a/hw/boards.h +++ b/hw/boards.h @@ -29,6 +29,7 @@ typedef struct QEMUMachine { const char *default_machine_opts; GlobalProperty *compat_props; struct QEMUMachine *next; + const char *hw_version; } QEMUMachine; int qemu_register_machine(QEMUMachine *m); diff --git a/hw/bt-sdp.c b/hw/bt-sdp.c index 3e390ab..c0431d1 100644 --- a/hw/bt-sdp.c +++ b/hw/bt-sdp.c @@ -834,7 +834,7 @@ SERVICE(hid, ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) ATTRIBUTE(SVCNAME_PRIMARY, STRING("QEMU Bluetooth HID")) ATTRIBUTE(SVCDESC_PRIMARY, STRING("QEMU Keyboard/Mouse")) - ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU " QEMU_VERSION)) + ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU")) /* Profile specific */ ATTRIBUTE(DEVICE_RELEASE_NUMBER, UINT16(0x0091)) /* Deprecated, remove */ @@ -908,7 +908,7 @@ SERVICE(sdp, LIST(UUID128(SDP_SERVER_PROFILE_ID) UINT16(0x0100)) )) ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) - ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU " QEMU_VERSION)) + ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU")) /* Profile specific */ ATTRIBUTE(VERSION_NUM_LIST, LIST(UINT16(0x0100))) @@ -931,7 +931,7 @@ SERVICE(pnp, LIST(UUID128(PNP_INFO_PROFILE_ID) UINT16(0x0100)) )) ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html")) - ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU " QEMU_VERSION)) + ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU")) /* Profile specific */ ATTRIBUTE(SPECIFICATION_ID, UINT16(0x0100)) diff --git a/hw/ide/core.c b/hw/ide/core.c index 9785d5f..c6de8a2 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -1983,7 +1983,7 @@ int ide_init_drive(IDEState *s, BlockDriverState *bs, IDEDriveKind kind, if (version) { pstrcpy(s->version, sizeof(s->version), version); } else { - pstrcpy(s->version, sizeof(s->version), QEMU_VERSION); + pstrcpy(s->version, sizeof(s->version), qemu_get_version()); } ide_reset(s); diff --git a/hw/nseries.c b/hw/nseries.c index a5cfa8c..b70aa40 100644 --- a/hw/nseries.c +++ b/hw/nseries.c @@ -1247,7 +1247,8 @@ static int n8x0_atag_setup(void *p, int model) stw_raw(w ++, 24); /* u16 len */ strcpy((void *) w, "hw-build"); /* char component[12] */ w += 6; - strcpy((void *) w, "QEMU " QEMU_VERSION); /* char version[12] */ + strcpy((void *) w, "QEMU "); + pstrcat((void *) w, 12, qemu_get_version()); /* char version[12] */ w += 6; tag = (model == 810) ? "1.1.10-qemu" : "1.1.6-qemu"; diff --git a/hw/pc_piix.c b/hw/pc_piix.c index a7aad4b..67aa10d 100644 --- a/hw/pc_piix.c +++ b/hw/pc_piix.c @@ -392,6 +392,7 @@ static QEMUMachine pc_machine_v1_0 = { PC_COMPAT_1_0, { /* end of list */ } }, + .hw_version = "1.0", }; #define PC_COMPAT_0_15 \ @@ -406,6 +407,7 @@ static QEMUMachine pc_machine_v0_15 = { PC_COMPAT_0_15, { /* end of list */ } }, + .hw_version = "0.15", }; #define PC_COMPAT_0_14 \ @@ -446,6 +448,7 @@ static QEMUMachine pc_machine_v0_14 = { }, { /* end of list */ } }, + .hw_version = "0.14", }; #define PC_COMPAT_0_13 \ @@ -482,6 +485,7 @@ static QEMUMachine pc_machine_v0_13 = { }, { /* end of list */ } }, + .hw_version = "0.13", }; #define PC_COMPAT_0_12 \ @@ -513,7 +517,8 @@ static QEMUMachine pc_machine_v0_12 = { .value = stringify(0), }, { /* end of list */ } - } + }, + .hw_version = "0.12", }; #define PC_COMPAT_0_11 \ @@ -545,7 +550,8 @@ static QEMUMachine pc_machine_v0_11 = { .value = "0.11", }, { /* end of list */ } - } + }, + .hw_version = "0.11", }; static QEMUMachine pc_machine_v0_10 = { @@ -578,6 +584,7 @@ static QEMUMachine pc_machine_v0_10 = { }, { /* end of list */ } }, + .hw_version = "0.10", }; static QEMUMachine isapc_machine = { diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index f10f3ec..688f6ac 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -406,7 +406,7 @@ static bool scsi_target_emulate_inquiry(SCSITargetReq *r) r->buf[7] = 0x10 | (r->req.bus->info->tcq ? 0x02 : 0); /* Sync, TCQ. */ memcpy(&r->buf[8], "QEMU ", 8); memcpy(&r->buf[16], "QEMU TARGET ", 16); - strncpy((char *) &r->buf[32], QEMU_VERSION, 4); + pstrcpy((char *) &r->buf[32], 4, qemu_get_version()); } return true; } diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 045c764..19bc4ac 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -1704,7 +1704,7 @@ static int scsi_initfn(SCSIDevice *dev) } if (!s->version) { - s->version = g_strdup(QEMU_VERSION); + s->version = g_strdup(qemu_get_version()); } if (bdrv_is_sg(s->qdev.conf.bs)) { diff --git a/hw/usb/dev-bluetooth.c b/hw/usb/dev-bluetooth.c index 6b74eff..55bc191 100644 --- a/hw/usb/dev-bluetooth.c +++ b/hw/usb/dev-bluetooth.c @@ -57,7 +57,7 @@ enum { }; static const USBDescStrings desc_strings = { - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, + [STR_MANUFACTURER] = "QEMU", [STR_SERIALNUMBER] = "1", }; diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c index f29544d..b3dcd23 100644 --- a/hw/usb/dev-hid.c +++ b/hw/usb/dev-hid.c @@ -60,7 +60,7 @@ enum { }; static const USBDescStrings desc_strings = { - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, + [STR_MANUFACTURER] = "QEMU", [STR_PRODUCT_MOUSE] = "QEMU USB Mouse", [STR_PRODUCT_TABLET] = "QEMU USB Tablet", [STR_PRODUCT_KEYBOARD] = "QEMU USB Keyboard", diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c index b5962da..8fd30df 100644 --- a/hw/usb/dev-hub.c +++ b/hw/usb/dev-hub.c @@ -90,7 +90,7 @@ enum { }; static const USBDescStrings desc_strings = { - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, + [STR_MANUFACTURER] = "QEMU", [STR_PRODUCT] = "QEMU USB Hub", [STR_SERIALNUMBER] = "314159", }; diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 56743ee..8aa6552 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -111,7 +111,7 @@ enum { }; static const USBDescStrings desc_strings = { - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, + [STR_MANUFACTURER] = "QEMU", [STR_PRODUCT_SERIAL] = "QEMU USB SERIAL", [STR_PRODUCT_BRAILLE] = "QEMU USB BRAILLE", [STR_SERIALNUMBER] = "1", diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c index 3b7604e..b0e70b0 100644 --- a/hw/usb/dev-smartcard-reader.c +++ b/hw/usb/dev-smartcard-reader.c @@ -81,7 +81,7 @@ do { \ #define CCID_CONTROL_GET_DATA_RATES 0x3 #define CCID_PRODUCT_DESCRIPTION "QEMU USB CCID" -#define CCID_VENDOR_DESCRIPTION "QEMU " QEMU_VERSION +#define CCID_VENDOR_DESCRIPTION "QEMU" #define CCID_INTERFACE_NAME "CCID Interface" #define CCID_SERIAL_NUMBER_STRING "1" /* @@ -401,7 +401,7 @@ enum { }; static const USBDescStrings desc_strings = { - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, + [STR_MANUFACTURER] = "QEMU", [STR_PRODUCT] = "QEMU USB CCID", [STR_SERIALNUMBER] = "1", [STR_INTERFACE] = "CCID Interface", diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c index ae22fb1..f863dfc 100644 --- a/hw/usb/dev-storage.c +++ b/hw/usb/dev-storage.c @@ -82,7 +82,7 @@ enum { }; static const USBDescStrings desc_strings = { - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, + [STR_MANUFACTURER] = "QEMU", [STR_PRODUCT] = "QEMU USB HARDDRIVE", [STR_SERIALNUMBER] = "1", [STR_CONFIG_FULL] = "Full speed config (usb 1.1)", diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c index 3b51d45..ed9a5ee 100644 --- a/hw/usb/dev-wacom.c +++ b/hw/usb/dev-wacom.c @@ -62,7 +62,7 @@ enum { }; static const USBDescStrings desc_strings = { - [STR_MANUFACTURER] = "QEMU " QEMU_VERSION, + [STR_MANUFACTURER] = "QEMU", [STR_PRODUCT] = "Wacom PenPartner", [STR_SERIALNUMBER] = "1", }; diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index 51c27b4..d949f04 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -143,8 +143,6 @@ static void usbredir_interrupt_packet(void *priv, uint32_t id, static int usbredir_handle_status(USBRedirDevice *dev, int status, int actual_len); -#define VERSION "qemu usb-redir guest " QEMU_VERSION - /* * Logging stuff */ @@ -794,6 +792,10 @@ static void usbredir_open_close_bh(void *opaque) { USBRedirDevice *dev = opaque; uint32_t caps[USB_REDIR_CAPS_SIZE] = { 0, }; + char version[32]; + + strcpy(version, "qemu usb-redir guest "); + pstrcat(version, sizeof(version), qemu_get_version()); usbredir_device_disconnect(dev); @@ -828,7 +830,7 @@ static void usbredir_open_close_bh(void *opaque) usbredirparser_caps_set_cap(caps, usb_redir_cap_connect_device_version); usbredirparser_caps_set_cap(caps, usb_redir_cap_filter); - usbredirparser_init(dev->parser, VERSION, caps, USB_REDIR_CAPS_SIZE, 0); + usbredirparser_init(dev->parser, version, caps, USB_REDIR_CAPS_SIZE, 0); usbredirparser_do_write(dev->parser); } } diff --git a/osdep.c b/osdep.c index 3e6bada..03817f0 100644 --- a/osdep.c +++ b/osdep.c @@ -48,6 +48,8 @@ extern int madvise(caddr_t, size_t, int); #include "trace.h" #include "qemu_socket.h" +static const char *qemu_version = QEMU_VERSION; + int socket_set_cork(int fd, int v) { #if defined(SOL_TCP) && defined(TCP_CORK) @@ -242,3 +244,12 @@ ssize_t qemu_recv_full(int fd, void *buf, size_t count, int flags) return total; } +void qemu_set_version(const char *version) +{ + qemu_version = version; +} + +const char *qemu_get_version(void) +{ + return qemu_version; +} diff --git a/osdep.h b/osdep.h index 9db8766..3ea4af0 100644 --- a/osdep.h +++ b/osdep.h @@ -149,4 +149,7 @@ static inline void qemu_timersub(const struct timeval *val1, void qemu_set_cloexec(int fd); +void qemu_set_version(const char *); +const char *qemu_get_version(void); + #endif diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 89b4ac7..b44c166 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -303,7 +303,6 @@ static x86_def_t builtin_x86_defs[] = { .ext3_features = CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | CPUID_EXT3_ABM | CPUID_EXT3_SSE4A, .xlevel = 0x8000000A, - .model_id = "QEMU Virtual CPU version " QEMU_VERSION, }, { .name = "phenom", @@ -386,7 +385,6 @@ static x86_def_t builtin_x86_defs[] = { .features = PPRO_FEATURES, .ext_features = CPUID_EXT_SSE3 | CPUID_EXT_POPCNT, .xlevel = 0x80000004, - .model_id = "QEMU Virtual CPU version " QEMU_VERSION, }, { .name = "kvm32", @@ -465,8 +463,6 @@ static x86_def_t builtin_x86_defs[] = { .features = PPRO_FEATURES | CPUID_PSE36 | CPUID_VME | CPUID_MTRR | CPUID_MCA, .ext2_features = (PPRO_FEATURES & EXT2_FEATURE_MASK) | CPUID_EXT2_MMXEXT | CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT, .xlevel = 0x80000008, - /* XXX: put another string ? */ - .model_id = "QEMU Virtual CPU version " QEMU_VERSION, }, { .name = "n270", @@ -1324,11 +1320,23 @@ void cpu_clear_apic_feature(CPUX86State *env) */ void x86_cpudef_setup(void) { - int i; + int i, j; + static const char *model_with_versions[] = { "qemu32", "qemu64", "athlon" }; for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); ++i) { builtin_x86_defs[i].next = x86_defs; builtin_x86_defs[i].flags = 1; + + /* Look for specific "cpudef" models that */ + /* have the QEmu version in .model_id */ + for (j = 0; j < ARRAY_SIZE(model_with_versions); j++) { + if (strcmp(model_with_versions[j], builtin_x86_defs[i].name) == 0) { + pstrcpy(builtin_x86_defs[i].model_id, sizeof(builtin_x86_defs[i].model_id), "QEMU Virtual CPU version "); + pstrcat(builtin_x86_defs[i].model_id, sizeof(builtin_x86_defs[i].model_id), qemu_get_version()); + break; + } + } + x86_defs = &builtin_x86_defs[i]; } #if !defined(CONFIG_USER_ONLY) diff --git a/vl.c b/vl.c index 23ab3a3..668917c 100644 --- a/vl.c +++ b/vl.c @@ -3208,6 +3208,10 @@ int main(int argc, char **argv, char **envp) } loc_set_none(); + if (machine->hw_version) { + qemu_set_version(machine->hw_version); + } + /* Init CPU def lists, based on config * - Must be called after all the qemu_read_config_file() calls * - Must be called before list_cpus()
QEMU exposes its version to the guest's hardware and in some cases that is wrong (e.g. Windows prints messages about driver updates when you switch the QEMU version). There is a new field now on the struct QEmuMachine, hw_version, which may contain the version that the specific machine should report. If that field is set, then that machine will report that version to the guest. Signed-off-by: Crístian Viana <vianac@linux.vnet.ibm.com> --- Changes since v4: - Rewrite commit message - Replace snprintf calls by pstrcpy/pstrcat. hw/boards.h | 1 + hw/bt-sdp.c | 6 +++--- hw/ide/core.c | 2 +- hw/nseries.c | 3 ++- hw/pc_piix.c | 11 +++++++++-- hw/scsi-bus.c | 2 +- hw/scsi-disk.c | 2 +- hw/usb/dev-bluetooth.c | 2 +- hw/usb/dev-hid.c | 2 +- hw/usb/dev-hub.c | 2 +- hw/usb/dev-serial.c | 2 +- hw/usb/dev-smartcard-reader.c | 4 ++-- hw/usb/dev-storage.c | 2 +- hw/usb/dev-wacom.c | 2 +- hw/usb/redirect.c | 8 +++++--- osdep.c | 11 +++++++++++ osdep.h | 3 +++ target-i386/cpu.c | 18 +++++++++++++----- vl.c | 4 ++++ 19 files changed, 62 insertions(+), 25 deletions(-)