5 Commits
7 changed files with 133 additions and 12 deletions
+22
View File
@@ -205,6 +205,28 @@ or device ID changes, so `DEVICES` / `PCI_VENDOR` / `CPU_HEURISTIC` are untouche
Fix: drop the `ICH9_SATA1_DEV` hunk, leave SATA at stock `1f.2`. macOS boots on the default series; Fix: drop the `ICH9_SATA1_DEV` hunk, leave SATA at stock `1f.2`. macOS boots on the default series;
0/85 preserved. 0/85 preserved.
### CLEARED - the dangling ACPI name macOS aborts the DSDT on (folded into `01-firmware`)
`01-firmware` renames the cold-plug PCI device ACPI nodes through `get_mimic_pci_name`
(`build_append_pci_bus_devices`) to break the stock `S`+hex NameSeg signature. It left the hotplug
and bus-notification code naming/referencing the *same* devices by the old `S%.02X` scheme, in four
spots: the child-bridge `Scope` and `^S%.02X.PCNT` cross-reference in
`build_append_notification_callback`, the `Notify()` target in `build_append_pcihp_notify_entry`,
and the per-slot `Scope`/`Device` in `build_append_pcihp_slots`. So the DSDT opens `Scope(S13)` on a
device actually declared `GFX3` - a dangling NameSeg.
Only macOS exposes it. Its ACPI parser aborts the whole DSDT load on the missing name:
`[S13_] Namespace lookup failure` -> `[DSDT] table load failed` -> `[\_SB.PCI0] ... AE_NOT_FOUND`,
then it hangs in early IOKit (last line `AppleACPIPlatformExpert/cpus`). Linux and Windows swallow
the `AE_NOT_FOUND` and boot on, which is why the identity guests never showed it - only a from-scratch
macOS recovery boot did. Diagnosed with macOS IOKit verbose (`boot-args io=0xffffffff`).
Fix (in `01-firmware`, alongside the `get_mimic_pci_name` definition it completes): route those four
sites through `get_mimic_pci_name` so definitions and references agree. It *removes* `S%.02X`
NameSegs rather than adding any, so the score is unaffected - re-measured on the rebuilt binary,
VMAware v2.8.1 and HEAD both `detected=0`/`FIRMWARE=0`, and a Tahoe recovery boots to the installer
GUI.
--- ---
## CLEARED - CTYPE and SMBIOS_VM_BIT (the SMBIOS QEMU synthesises) ## CLEARED - CTYPE and SMBIOS_VM_BIT (the SMBIOS QEMU synthesises)
+1 -1
View File
@@ -27,7 +27,7 @@
pkgname=vfio-native-kvm-dkms pkgname=vfio-native-kvm-dkms
_pkgbase=vfio-native-kvm _pkgbase=vfio-native-kvm
_kver=7.2.3 _kver=7.2.3
_tag=1.4.1 _tag=1.4.3
pkgver=${_kver} pkgver=${_kver}
pkgrel=1 pkgrel=1
pkgdesc="KVM modules patched to raise the exceptions the architecture specifies (DKMS, 7.2.x kernels)" pkgdesc="KVM modules patched to raise the exceptions the architecture specifies (DKMS, 7.2.x kernels)"
+2 -2
View File
@@ -7,9 +7,9 @@
pkgname=vfio-native-qemu pkgname=vfio-native-qemu
_qver=11.1.2 _qver=11.1.2
_tag=1.4.1 _tag=1.4.3
pkgver=${_qver} pkgver=${_qver}
pkgrel=3 pkgrel=5
pkgdesc="QEMU ${_qver} with the vfio-native platform-identity patches, in /opt/qemu-native" pkgdesc="QEMU ${_qver} with the vfio-native platform-identity patches, in /opt/qemu-native"
arch=('x86_64') arch=('x86_64')
url="https://git.archworks.co/sandwich/vfio-native" url="https://git.archworks.co/sandwich/vfio-native"
+1 -1
View File
@@ -8,7 +8,7 @@
# vfio-native-qemu QEMU 11.1.2 with the platform-identity patches, in /opt # vfio-native-qemu QEMU 11.1.2 with the platform-identity patches, in /opt
pkgname=vfio-native pkgname=vfio-native
pkgver=1.4.1 pkgver=1.4.3
pkgrel=1 pkgrel=1
pkgdesc="Present a libvirt guest as a self-consistent physical machine, and tune it" pkgdesc="Present a libvirt guest as a self-consistent physical machine, and tune it"
arch=('any') arch=('any')
+1 -1
View File
@@ -42,7 +42,7 @@ Against QEMU v11.1.2. Apply in numeric order.
| `02-disk-identity` | `VIRTUAL_DISK`, `DISK_SERIAL` - `QEMU HARDDISK`, empty serials, SCSI inquiry strings | | `02-disk-identity` | `VIRTUAL_DISK`, `DISK_SERIAL` - `QEMU HARDDISK`, empty serials, SCSI inquiry strings |
| `03-pci-ids` | `PCI_VENDOR`, `DEVICES` - Red Hat/QEMU vendor and subsystem IDs, ICH9 layout | | `03-pci-ids` | `PCI_VENDOR`, `DEVICES` - Red Hat/QEMU vendor and subsystem IDs, ICH9 layout |
| `04-fw-cfg` | `QEMU_FW_CFG` - the fw_cfg device signature | | `04-fw-cfg` | `QEMU_FW_CFG` - the fw_cfg device signature |
| `05-usb-hid` | `QEMU_USB` - USB HID descriptor strings | | `05-usb-identity` | `QEMU_USB` - USB HID descriptor strings, and the usb-net CDC/RNDIS device-identity strings (keeps the `0525:a4a1` CDC id so generic CDC-ECM drivers still bind it) |
| `06-audio` | `DEVICES` - HDA codec and controller identity | | `06-audio` | `DEVICES` - HDA codec and controller identity |
| `07-edid` | none. Carried for other detectors; VMAware does not read EDID. | | `07-edid` | none. Carried for other detectors; VMAware does not read EDID. |
| `08-cpu-misc` | none. CPU feature plumbing and one upstream backport. | | `08-cpu-misc` | none. CPU feature plumbing and one upstream backport. |
+53 -4
View File
@@ -193,10 +193,9 @@ index 8837b69..4001d9d 100644
if (pcms->wdat_enabled == true) { if (pcms->wdat_enabled == true) {
g_assert(pm.tco_io_base); g_assert(pm.tco_io_base);
diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
index 87162ff2c..3616c580a 100644
--- a/hw/acpi/pcihp.c --- a/hw/acpi/pcihp.c
+++ b/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c
@@ -687,10 +687,10 @@ void build_append_pcihp_resources(Aml *scope /* \\_SB.PCI0 */, @@ -687,10 +687,10 @@
{ {
Aml *dev, *crs; Aml *dev, *crs;
@@ -209,7 +208,7 @@ index 87162ff2c..3616c580a 100644
/* device present, functioning, decoding, not shown in UI */ /* device present, functioning, decoding, not shown in UI */
aml_append(dev, aml_name_decl("_STA", aml_int(0xB))); aml_append(dev, aml_name_decl("_STA", aml_int(0xB)));
crs = aml_resource_template(); crs = aml_resource_template();
@@ -699,6 +699,89 @@ void build_append_pcihp_resources(Aml *scope /* \\_SB.PCI0 */, @@ -699,6 +699,89 @@
aml_append(scope, dev); aml_append(scope, dev);
} }
@@ -299,7 +298,57 @@ index 87162ff2c..3616c580a 100644
bool build_append_notification_callback(Aml *parent_scope, const PCIBus *bus) bool build_append_notification_callback(Aml *parent_scope, const PCIBus *bus)
{ {
Aml *method; Aml *method;
@@ -912,7 +995,11 @@ void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus) @@ -708,7 +791,9 @@
GQueue *pcnt_bus_list = g_queue_new();
QLIST_FOREACH(sec, &bus->child, sibling) {
- Aml *br_scope = aml_scope("S%.02X", sec->parent_dev->devfn);
+ char mimic_nm[5];
+ get_mimic_pci_name(mimic_nm, sec->parent_dev->devfn);
+ Aml *br_scope = aml_scope("%s", mimic_nm);
if (pci_bus_is_root(sec)) {
continue;
}
@@ -747,7 +832,9 @@
/* Notify about child bus events in any case */
while ((sec = g_queue_pop_head(pcnt_bus_list))) {
- aml_append(method, aml_name("^S%.02X.PCNT", sec->parent_dev->devfn));
+ char mimic_nm[5];
+ get_mimic_pci_name(mimic_nm, sec->parent_dev->devfn);
+ aml_append(method, aml_name("^%s.PCNT", mimic_nm));
}
aml_append(parent_scope, method);
@@ -802,9 +889,11 @@
{
Aml *if_ctx;
int32_t devfn = PCI_DEVFN(slot, 0);
+ char mimic_nm[5];
+ get_mimic_pci_name(mimic_nm, devfn);
if_ctx = aml_if(aml_and(aml_arg(0), aml_int(0x1U << slot), NULL));
- aml_append(if_ctx, aml_notify(aml_name("S%.02X", devfn), aml_arg(1)));
+ aml_append(if_ctx, aml_notify(aml_name("%s", mimic_nm), aml_arg(1)));
aml_append(method, if_ctx);
}
@@ -867,10 +956,12 @@
continue;
}
+ char mimic_nm[5];
+ get_mimic_pci_name(mimic_nm, devfn);
if (bus->devices[devfn]) {
- dev = aml_scope("S%.02X", devfn);
+ dev = aml_scope("%s", mimic_nm);
} else {
- dev = aml_device("S%.02X", devfn);
+ dev = aml_device("%s", mimic_nm);
aml_append(dev, aml_name_decl("_ADR", aml_int(adr)));
}
@@ -912,7 +1003,11 @@
} }
/* start to compose PCI device descriptor */ /* start to compose PCI device descriptor */
@@ -1,11 +1,15 @@
Subject: [PATCH] usb-hid: QEMU_USB Subject: [PATCH] usb: QEMU_USB
Targets VMAware check: QEMU_USB Targets VMAware check: QEMU_USB
USB HID descriptors carrying QEMU vendor strings and product IDs. USB device identity strings that name QEMU: the HID descriptors (dev-hid.c)
and the usb-net CDC/RNDIS descriptors plus its RNDIS vendor-description and
product_desc (dev-network.c). The usb-net VID/PID (0525:a4a1, a real Linux
USB Ethernet Gadget id) is left intact so the device stays CDC-class and the
guest's generic CDC-ECM driver (e.g. macOS AppleUSBEthernet) still binds it.
Applies to QEMU v11.1.2. Apply from the source root with: Applies to QEMU v11.1.2. Apply from the source root with:
patch -p1 < 05-usb-hid.patch patch -p1 < 05-usb-identity.patch
--- ---
diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c
@@ -109,3 +113,49 @@ index ae19d60..9fe1223 100644
dc->vmsd = &vmstate_usb_kbd; dc->vmsd = &vmstate_usb_kbd;
device_class_set_props(dc, usb_keyboard_properties); device_class_set_props(dc, usb_keyboard_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories); set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
--- a/hw/usb/dev-network.c
+++ b/hw/usb/dev-network.c
@@ -99,15 +99,15 @@
#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */
static const USBDescStrings usb_net_stringtable = {
- [STRING_MANUFACTURER] = "QEMU",
- [STRING_PRODUCT] = "RNDIS/QEMU USB Network Device",
+ [STRING_MANUFACTURER] = "Linux",
+ [STRING_PRODUCT] = "USB Ethernet",
[STRING_ETHADDR] = "400102030405",
- [STRING_DATA] = "QEMU USB Net Data Interface",
- [STRING_CONTROL] = "QEMU USB Net Control Interface",
- [STRING_RNDIS_CONTROL] = "QEMU USB Net RNDIS Control Interface",
- [STRING_CDC] = "QEMU USB Net CDC",
- [STRING_SUBSET] = "QEMU USB Net Subset",
- [STRING_RNDIS] = "QEMU USB Net RNDIS",
+ [STRING_DATA] = "CDC Ethernet Data",
+ [STRING_CONTROL] = "CDC Ethernet Control",
+ [STRING_RNDIS_CONTROL] = "RNDIS Communications Control",
+ [STRING_CDC] = "CDC Ethernet",
+ [STRING_SUBSET] = "CDC Subset Ethernet",
+ [STRING_RNDIS] = "RNDIS Ethernet",
[STRING_SERIALNUMBER] = "1",
};
@@ -717,7 +717,7 @@
/* mandatory */
case OID_GEN_VENDOR_DESCRIPTION:
- pstrcpy((char *)outbuf, outlen, "QEMU USB RNDIS Net");
+ pstrcpy((char *)outbuf, outlen, "USB Ethernet");
return strlen((char *)outbuf) + 1;
case OID_GEN_VENDOR_DRIVER_VERSION:
@@ -1417,7 +1417,7 @@
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
uc->realize = usb_net_realize;
- uc->product_desc = "QEMU USB Network Interface";
+ uc->product_desc = "USB Ethernet Adapter";
uc->usb_desc = &desc_net;
uc->handle_reset = usb_net_handle_reset;
uc->handle_control = usb_net_handle_control;