Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 888273 Details for
Bug 1027565
fail to reboot guest after migration from RHEL6.5 host to RHEL7.0 host
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
proposed patch for the *separate* USB problem (downstream only)
0001-uhci-UNfix-irq-routing-for-RHEL-6-machtypes-RHEL-onl.patch (text/plain), 5.15 KB, created by
Laszlo Ersek
on 2014-04-21 21:58:08 UTC
(
hide
)
Description:
proposed patch for the *separate* USB problem (downstream only)
Filename:
MIME Type:
Creator:
Laszlo Ersek
Created:
2014-04-21 21:58:08 UTC
Size:
5.15 KB
patch
obsolete
>From 869eff10c5daf4d1ebd917f27d4a822d2234f7c2 Mon Sep 17 00:00:00 2001 >From: Laszlo Ersek <lersek@redhat.com> >Date: Mon, 21 Apr 2014 21:19:23 +0200 >Subject: [RHEL-7.0 0day qemu-kvm PATCH] uhci: UNfix irq routing for RHEL-6 > machtypes (RHEL only) > >Refer to the following upstream commit, present in v1.2.0 and RHEL-7: > > commit 973002c11460efd3c17fe61a76711a103e30e1f9 > Author: Gerd Hoffmann <kraxel@redhat.com> > Date: Fri May 25 12:53:47 2012 +0200 > > uhci: fix irq routing > > The multifunction ich9 ehci controller with uhci companions uses a > different interrupt pin for each function. The three uhci devices > get pins A, B and C, whereas ehci uses pin D. This way the guest > can assign different IRQ lines to each controller. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > >This is a performance optimization so that IRQ sharing can be avoided in >the guest. > >Contrarily, the RHEL-6 emulator exclusively assigns pin D to each of the >three devices (see "hw/usb-uhci.c" there): >- usb_uhci_ich9_1_initfn() >- usb_uhci_ich9_2_initfn() >- usb_uhci_ich9_3_initfn() > >These init functions call usb_uhci_common_initfn(), which in turn assigns: > > pci_conf[0x3d] = 4; // interrupt pin 3 > >This mismatch breaks migration for rhel6.x.0 machine types from the >RHEL-6.5 emulator to the RHEL-7.0 one. > >For example, considering the uhci1 controller, the guest kernel, started >on the RHEL-6.5 source host, will see pin D advertised, and (according to >the PCI interrupt routing table provided by SeaBIOS) will route it to IRQ >11: > > dmesg: > > uhci_hcd 0000:00:11.0: PCI INT D -> Link[LNKD] -> GSI 11 (level, high) > -> IRQ 11 > > /proc/interrupts: > > 10: ... IO-APIC-fasteoi virtio0 > 11: ... IO-APIC-fasteoi uhci_hcd:usb1 > >When the same guest kernel, using the same rhel6.5.0 machine type, is >started fresh on the RHEL-7.0 target host, pin A is advertised instead >(and routed to a different IRQ, based on the same table from SeaBIOS): > > dmesg: > > uhci_hcd 0000:00:11.0: PCI INT A -> Link[LNKA] -> GSI 10 (level, high) > -> IRQ 10 > > /proc/interrupts: > > 10: ... IO-APIC-fasteoi uhci_hcd:usb1, virtio0 > >This is no problem as long as we don't migrate. > >When we migrate the rhel6.x.0 machtype guest from the RHEL-6.5 host to the >RHEL-7.0 host, the guest kernel (having booted on the source host) will >expect the interrupts for the UHCI device on pin D / IRQ 11. However, the >target host will inject the interrupts on pin A / IRQ 10. No handler in >the guest kernel will claim such IRQ 10 instances (examples are: HDA or >virtio-balloon), hence IRQ 10 will be disabled. > >We can fix this in at least two ways: >(1) Drop the persistent "UHCIState.irq_pin" field, and simply use the pin > identifier that is stored in PCI config space (at offset 0x3d). >(2) Introduce yet another RHEL-6 compatibility knob that selects pin D for > all three ICH9-UHCI controllers. > >Since PCI config space could be accessible to the guest, and we'd use the >setting as a subscript into the s->dev.irq[] array in uhci_update_irq(), >it seems safer to go with (2). > >Signed-off-by: Laszlo Ersek <lersek@redhat.com> >--- > include/hw/usb.h | 4 ++++ > hw/i386/pc_piix.c | 1 + > hw/usb/hcd-uhci.c | 13 ++++++++++++- > 3 files changed, 17 insertions(+), 1 deletion(-) > >diff --git a/include/hw/usb.h b/include/hw/usb.h >index b111be0..5668701 100644 >--- a/include/hw/usb.h >+++ b/include/hw/usb.h >@@ -578,4 +578,8 @@ int usb_get_quirks(uint16_t vendor_id, uint16_t product_id, > uint8_t interface_class, uint8_t interface_subclass, > uint8_t interface_protocol); > >+ >+/* hcd-uhci.c -- RHEL-6 machine type compatibility */ >+extern bool ich9_uhci123_irqpin_override; >+ > #endif >diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c >index fea98b6..67d51da 100644 >--- a/hw/i386/pc_piix.c >+++ b/hw/i386/pc_piix.c >@@ -955,6 +955,7 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) > has_acpi_build = false; > gigabyte_align = false; > shadow_bios_after_incoming = true; >+ ich9_uhci123_irqpin_override = true; > } > > static void pc_init_rhel650(QEMUMachineInitArgs *args) >diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c >index 4fc3410..3380107 100644 >--- a/hw/usb/hcd-uhci.c >+++ b/hw/usb/hcd-uhci.c >@@ -187,6 +187,8 @@ typedef struct UHCI_QH { > uint32_t el_link; > } UHCI_QH; > >+bool ich9_uhci123_irqpin_override; >+ > static void uhci_async_cancel(UHCIAsync *async); > static void uhci_queue_fill(UHCIQueue *q, UHCI_TD *td); > >@@ -1232,7 +1234,16 @@ static int usb_uhci_common_initfn(PCIDevice *dev) > /* TODO: reset value should be 0. */ > pci_conf[USB_SBRN] = USB_RELEASE_1; // release number > >- s->irq_pin = u->info.irq_pin; >+ if (ich9_uhci123_irqpin_override && >+ u->info.vendor_id == PCI_VENDOR_ID_INTEL && >+ (u->info.device_id == PCI_DEVICE_ID_INTEL_82801I_UHCI1 || >+ u->info.device_id == PCI_DEVICE_ID_INTEL_82801I_UHCI2 || >+ u->info.device_id == PCI_DEVICE_ID_INTEL_82801I_UHCI3)) { >+ fprintf(stderr, "RHEL-6 compat: %s: irq_pin = 3\n", u->info.name); >+ s->irq_pin = 3; >+ } else { >+ s->irq_pin = u->info.irq_pin; >+ } > pci_config_set_interrupt_pin(pci_conf, s->irq_pin + 1); > > if (s->masterbus) { >-- >1.8.3.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 1027565
:
885244
|
885245
|
885252
|
885649
|
885650
|
885795
|
885838
|
886494
|
886593
|
886840
|
886841
|
886964
|
888022
| 888273