mirror of https://github.com/xemu-project/xemu.git
Bugfixes for HVF and Windows builds.
-----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAl+03H0UHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroNc3Af/S1z8GW2K7jAwXKUNLmJO4sX3uhan hps/VDEYV2qHANztrmXTx4wnsVj+hcHRK0ytGQd+FZFy+MefsHrjv8/hbCae7xji 7Pb07W4yI8FV7OZDW6+tU0gGbvlh9rR4gy4so6NFyZy8QLpc1MHjqPZvRhpzWZxB sAquqJvPno4JYuWCmiW34ldMRa72MNaSbkpndLVDikcMWkvLx62HqLy0kiHrnUTf mohRD6+YGQViL7/3ms8bJNP6ddslc9pyzFUakE5XM4/f4hwtnJ5RauGnL8vouAUi iaCkg5mF+6uJdgwWPXUefVLsr7xEo+w2MR4+leS4TAJ7Arc11qujMw2pMQ== =g7br -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging Bugfixes for HVF and Windows builds. # gpg: Signature made Wed 18 Nov 2020 08:34:05 GMT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini-gitlab/tags/for-upstream: buildsys: Help git-diff adding .gitattributes config file hvf: Fix segment selector format hvf: Gate RDTSCP on CPU_BASED2_RDTSCP, not just CPU_BASED_TSC_OFFSET meson: Fixes curses detection on msys2 meson: Fix build with --disable-guest-agent-msi docs: Fix some typos (found by codespell) meson: Fix argument for makensis (build regression) Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
269ff671c5
|
@ -0,0 +1,2 @@
|
||||||
|
*.c.inc diff=c
|
||||||
|
*.h.inc diff=c
|
|
@ -19,7 +19,7 @@ interface to implement because such device can be easily connected
|
||||||
to systems with different CPU architectures (x86, PowerPC, Arm, etc.).
|
to systems with different CPU architectures (x86, PowerPC, Arm, etc.).
|
||||||
|
|
||||||
In 2020, CTU CAN FD controller model has been added as part
|
In 2020, CTU CAN FD controller model has been added as part
|
||||||
of the bachelor theses of Jan Charvat. This controller is complete
|
of the bachelor thesis of Jan Charvat. This controller is complete
|
||||||
open-source/design/hardware solution. The core designer
|
open-source/design/hardware solution. The core designer
|
||||||
of the project is Ondrej Ille, the financial support has been
|
of the project is Ondrej Ille, the financial support has been
|
||||||
provided by CTU, and more companies including Volkswagen subsidiaries.
|
provided by CTU, and more companies including Volkswagen subsidiaries.
|
||||||
|
@ -31,7 +31,7 @@ testing lead to goal change to provide environment which provides complete
|
||||||
emulated environment for testing and RTEMS GSoC slot has been donated
|
emulated environment for testing and RTEMS GSoC slot has been donated
|
||||||
to work on CAN hardware emulation on QEMU.
|
to work on CAN hardware emulation on QEMU.
|
||||||
|
|
||||||
Examples how to use CAN emulation for SJA1000 based borads
|
Examples how to use CAN emulation for SJA1000 based boards
|
||||||
==========================================================
|
==========================================================
|
||||||
|
|
||||||
When QEMU with CAN PCI support is compiled then one of the next
|
When QEMU with CAN PCI support is compiled then one of the next
|
||||||
|
@ -106,8 +106,8 @@ This open-source core provides CAN FD support. CAN FD drames are
|
||||||
delivered even to the host systems when SocketCAN interface is found
|
delivered even to the host systems when SocketCAN interface is found
|
||||||
CAN FD capable.
|
CAN FD capable.
|
||||||
|
|
||||||
The PCIe borad emulation is provided for now (the device identifier is
|
The PCIe board emulation is provided for now (the device identifier is
|
||||||
ctucan_pci). The defauld build defines two CTU CAN FD cores
|
ctucan_pci). The default build defines two CTU CAN FD cores
|
||||||
on the board.
|
on the board.
|
||||||
|
|
||||||
Example how to connect the canbus0-bus (virtual wire) to the host
|
Example how to connect the canbus0-bus (virtual wire) to the host
|
||||||
|
|
|
@ -530,7 +530,7 @@ descriptor table (split virtqueue) or descriptor ring (packed
|
||||||
virtqueue). However, it can't work when we process descriptors
|
virtqueue). However, it can't work when we process descriptors
|
||||||
out-of-order because some entries which store the information of
|
out-of-order because some entries which store the information of
|
||||||
inflight descriptors in available ring (split virtqueue) or descriptor
|
inflight descriptors in available ring (split virtqueue) or descriptor
|
||||||
ring (packed virtqueue) might be overrided by new entries. To solve
|
ring (packed virtqueue) might be overridden by new entries. To solve
|
||||||
this problem, slave need to allocate an extra buffer to store this
|
this problem, slave need to allocate an extra buffer to store this
|
||||||
information of inflight descriptors and share it with master for
|
information of inflight descriptors and share it with master for
|
||||||
persistent. ``VHOST_USER_GET_INFLIGHT_FD`` and
|
persistent. ``VHOST_USER_GET_INFLIGHT_FD`` and
|
||||||
|
|
|
@ -328,7 +328,7 @@ between the snapshots. Each of the passes include the following steps:
|
||||||
1. loading the snapshot
|
1. loading the snapshot
|
||||||
2. replaying to examine the breakpoints
|
2. replaying to examine the breakpoints
|
||||||
3. if breakpoint or watchpoint was met
|
3. if breakpoint or watchpoint was met
|
||||||
- loading the snaphot again
|
- loading the snapshot again
|
||||||
- replaying to the required breakpoint
|
- replaying to the required breakpoint
|
||||||
4. else
|
4. else
|
||||||
- proceeding to the p.1 with the earlier snapshot
|
- proceeding to the p.1 with the earlier snapshot
|
||||||
|
|
|
@ -198,7 +198,7 @@ This is how it is being done:
|
||||||
* user distance 121 and beyond will be interpreted as 160
|
* user distance 121 and beyond will be interpreted as 160
|
||||||
* user distance 10 stays 10
|
* user distance 10 stays 10
|
||||||
|
|
||||||
The reasoning behind this aproximation is to avoid any round up to the local
|
The reasoning behind this approximation is to avoid any round up to the local
|
||||||
distance (10), keeping it exclusive to the 4th NUMA level (which is still
|
distance (10), keeping it exclusive to the 4th NUMA level (which is still
|
||||||
exclusive to the node_id). All other ranges were chosen under the developer
|
exclusive to the node_id). All other ranges were chosen under the developer
|
||||||
discretion of what would be (somewhat) sensible considering the user input.
|
discretion of what would be (somewhat) sensible considering the user input.
|
||||||
|
|
|
@ -473,7 +473,7 @@ default configuration.
|
||||||
|
|
||||||
The CPU model runnability guarantee won't apply anymore to
|
The CPU model runnability guarantee won't apply anymore to
|
||||||
existing CPU models. Management software that needs runnability
|
existing CPU models. Management software that needs runnability
|
||||||
guarantees must resolve the CPU model aliases using te
|
guarantees must resolve the CPU model aliases using the
|
||||||
``alias-of`` field returned by the ``query-cpu-definitions`` QMP
|
``alias-of`` field returned by the ``query-cpu-definitions`` QMP
|
||||||
command.
|
command.
|
||||||
|
|
||||||
|
@ -660,7 +660,7 @@ Splitting RAM by default between NUMA nodes had the same issues as ``mem``
|
||||||
parameter with the difference that the role of the user plays QEMU using
|
parameter with the difference that the role of the user plays QEMU using
|
||||||
implicit generic or board specific splitting rule.
|
implicit generic or board specific splitting rule.
|
||||||
Use ``memdev`` with *memory-backend-ram* backend or ``mem`` (if
|
Use ``memdev`` with *memory-backend-ram* backend or ``mem`` (if
|
||||||
it's supported by used machine type) to define mapping explictly instead.
|
it's supported by used machine type) to define mapping explicitly instead.
|
||||||
Users of existing VMs, wishing to preserve the same RAM distribution, should
|
Users of existing VMs, wishing to preserve the same RAM distribution, should
|
||||||
configure it explicitly using ``-numa node,memdev`` options. Current RAM
|
configure it explicitly using ``-numa node,memdev`` options. Current RAM
|
||||||
distribution can be retrieved using HMP command ``info numa`` and if separate
|
distribution can be retrieved using HMP command ``info numa`` and if separate
|
||||||
|
|
|
@ -174,7 +174,7 @@ Using ':' as the separator a rule is of the form:
|
||||||
- 'bad' - If a client tries to use a name matching 'key' it's
|
- 'bad' - If a client tries to use a name matching 'key' it's
|
||||||
denied using EPERM; when the server passes an attribute
|
denied using EPERM; when the server passes an attribute
|
||||||
name matching 'prepend' it's hidden. In many ways it's use is very like
|
name matching 'prepend' it's hidden. In many ways it's use is very like
|
||||||
'ok' as either an explict terminator or for special handling of certain
|
'ok' as either an explicit terminator or for special handling of certain
|
||||||
patterns.
|
patterns.
|
||||||
|
|
||||||
**key** is a string tested as a prefix on an attribute name originating
|
**key** is a string tested as a prefix on an attribute name originating
|
||||||
|
|
|
@ -535,7 +535,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Assume we have no GMS memory, but allow it to be overrided by device
|
* Assume we have no GMS memory, but allow it to be overridden by device
|
||||||
* option (experimental). The spec doesn't actually allow zero GMS when
|
* option (experimental). The spec doesn't actually allow zero GMS when
|
||||||
* when IVD (IGD VGA Disable) is clear, but the claim is that it's unused,
|
* when IVD (IGD VGA Disable) is clear, but the claim is that it's unused,
|
||||||
* so let's not waste VM memory for it.
|
* so let's not waste VM memory for it.
|
||||||
|
|
13
meson.build
13
meson.build
|
@ -490,10 +490,15 @@ if have_system and not get_option('curses').disabled()
|
||||||
return 0;
|
return 0;
|
||||||
}'''
|
}'''
|
||||||
|
|
||||||
curses = dependency((targetos == 'windows' ? 'ncurses' : 'ncursesw'),
|
curses_dep_list = targetos == 'windows' ? ['ncurses', 'ncursesw'] : ['ncursesw']
|
||||||
required: false,
|
foreach curses_dep : curses_dep_list
|
||||||
method: 'pkg-config',
|
if not curses.found()
|
||||||
static: enable_static)
|
curses = dependency(curses_dep,
|
||||||
|
required: false,
|
||||||
|
method: 'pkg-config',
|
||||||
|
static: enable_static)
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
msg = get_option('curses').enabled() ? 'curses library not found' : ''
|
msg = get_option('curses').enabled() ? 'curses library not found' : ''
|
||||||
if curses.found()
|
if curses.found()
|
||||||
if cc.links(curses_test, dependencies: [curses])
|
if cc.links(curses_test, dependencies: [curses])
|
||||||
|
|
|
@ -61,23 +61,25 @@ if targetos == 'windows'
|
||||||
if 'CONFIG_QGA_VSS' in config_host and 'QEMU_GA_MSI_WITH_VSS' in config_host
|
if 'CONFIG_QGA_VSS' in config_host and 'QEMU_GA_MSI_WITH_VSS' in config_host
|
||||||
deps += qga_vss
|
deps += qga_vss
|
||||||
endif
|
endif
|
||||||
qga_msi = custom_target('QGA MSI',
|
if 'CONFIG_QGA_MSI' in config_host
|
||||||
input: files('installer/qemu-ga.wxs'),
|
qga_msi = custom_target('QGA MSI',
|
||||||
output: 'qemu-ga-@0@.msi'.format(config_host['ARCH']),
|
input: files('installer/qemu-ga.wxs'),
|
||||||
depends: deps,
|
output: 'qemu-ga-@0@.msi'.format(config_host['ARCH']),
|
||||||
command: [
|
depends: deps,
|
||||||
find_program('env'),
|
command: [
|
||||||
'QEMU_GA_VERSION=' + config_host['QEMU_GA_VERSION'],
|
find_program('env'),
|
||||||
'QEMU_GA_MANUFACTURER=' + config_host['QEMU_GA_MANUFACTURER'],
|
'QEMU_GA_VERSION=' + config_host['QEMU_GA_VERSION'],
|
||||||
'QEMU_GA_DISTRO=' + config_host['QEMU_GA_DISTRO'],
|
'QEMU_GA_MANUFACTURER=' + config_host['QEMU_GA_MANUFACTURER'],
|
||||||
'BUILD_DIR=' + meson.build_root(),
|
'QEMU_GA_DISTRO=' + config_host['QEMU_GA_DISTRO'],
|
||||||
wixl, '-o', '@OUTPUT0@', '@INPUT0@',
|
'BUILD_DIR=' + meson.build_root(),
|
||||||
config_host['QEMU_GA_MSI_ARCH'].split(),
|
wixl, '-o', '@OUTPUT0@', '@INPUT0@',
|
||||||
config_host['QEMU_GA_MSI_WITH_VSS'].split(),
|
config_host['QEMU_GA_MSI_ARCH'].split(),
|
||||||
config_host['QEMU_GA_MSI_MINGW_DLL_PATH'].split(),
|
config_host['QEMU_GA_MSI_WITH_VSS'].split(),
|
||||||
])
|
config_host['QEMU_GA_MSI_MINGW_DLL_PATH'].split(),
|
||||||
all_qga += [qga_msi]
|
])
|
||||||
alias_target('msi', qga_msi)
|
all_qga += [qga_msi]
|
||||||
|
alias_target('msi', qga_msi)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
install_subdir('run', install_dir: get_option('localstatedir'))
|
install_subdir('run', install_dir: get_option('localstatedir'))
|
||||||
|
|
|
@ -65,7 +65,7 @@ def main():
|
||||||
dlldir = "w64"
|
dlldir = "w64"
|
||||||
makensis += ["-DW64"]
|
makensis += ["-DW64"]
|
||||||
if os.path.exists(os.path.join(args.srcdir, "dll")):
|
if os.path.exists(os.path.join(args.srcdir, "dll")):
|
||||||
makensis += "-DDLLDIR={0}/dll/{1}".format(args.srcdir, dlldir)
|
makensis += ["-DDLLDIR={0}/dll/{1}".format(args.srcdir, dlldir)]
|
||||||
|
|
||||||
makensis += ["-DOUTFILE=" + args.outfile] + args.nsisargs
|
makensis += ["-DOUTFILE=" + args.outfile] + args.nsisargs
|
||||||
subprocess.run(makensis)
|
subprocess.run(makensis)
|
||||||
|
|
|
@ -214,16 +214,16 @@ static inline uint32_t x86_call_gate_offset(x86_call_gate *gate)
|
||||||
return (uint32_t)((gate->offset1 << 16) | gate->offset0);
|
return (uint32_t)((gate->offset1 << 16) | gate->offset0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LDT_SEL 0
|
#define GDT_SEL 0
|
||||||
#define GDT_SEL 1
|
#define LDT_SEL 1
|
||||||
|
|
||||||
typedef struct x68_segment_selector {
|
typedef struct x68_segment_selector {
|
||||||
union {
|
union {
|
||||||
uint16_t sel;
|
uint16_t sel;
|
||||||
struct {
|
struct {
|
||||||
uint16_t rpl:3;
|
uint16_t rpl:2;
|
||||||
uint16_t ti:1;
|
uint16_t ti:1;
|
||||||
uint16_t index:12;
|
uint16_t index:13;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} __attribute__ ((__packed__)) x68_segment_selector;
|
} __attribute__ ((__packed__)) x68_segment_selector;
|
||||||
|
|
|
@ -122,6 +122,10 @@ uint32_t hvf_get_supported_cpuid(uint32_t func, uint32_t idx,
|
||||||
CPUID_PAT | CPUID_PSE36 | CPUID_EXT2_MMXEXT | CPUID_MMX |
|
CPUID_PAT | CPUID_PSE36 | CPUID_EXT2_MMXEXT | CPUID_MMX |
|
||||||
CPUID_FXSR | CPUID_EXT2_FXSR | CPUID_EXT2_PDPE1GB | CPUID_EXT2_3DNOWEXT |
|
CPUID_FXSR | CPUID_EXT2_FXSR | CPUID_EXT2_PDPE1GB | CPUID_EXT2_3DNOWEXT |
|
||||||
CPUID_EXT2_3DNOW | CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX;
|
CPUID_EXT2_3DNOW | CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX;
|
||||||
|
hv_vmx_read_capability(HV_VMX_CAP_PROCBASED2, &cap);
|
||||||
|
if (!(cap & CPU_BASED2_RDTSCP)) {
|
||||||
|
edx &= ~CPUID_EXT2_RDTSCP;
|
||||||
|
}
|
||||||
hv_vmx_read_capability(HV_VMX_CAP_PROCBASED, &cap);
|
hv_vmx_read_capability(HV_VMX_CAP_PROCBASED, &cap);
|
||||||
if (!(cap & CPU_BASED_TSC_OFFSET)) {
|
if (!(cap & CPU_BASED_TSC_OFFSET)) {
|
||||||
edx &= ~CPUID_EXT2_RDTSCP;
|
edx &= ~CPUID_EXT2_RDTSCP;
|
||||||
|
|
Loading…
Reference in New Issue