From patchwork Tue Jun 30 12:28:08 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Armbruster X-Patchwork-Id: 33107 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n5UCSKXn000894 for ; Tue, 30 Jun 2009 12:28:20 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752699AbZF3M2P (ORCPT ); Tue, 30 Jun 2009 08:28:15 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752569AbZF3M2P (ORCPT ); Tue, 30 Jun 2009 08:28:15 -0400 Received: from mx2.redhat.com ([66.187.237.31]:40675 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752464AbZF3M2O (ORCPT ); Tue, 30 Jun 2009 08:28:14 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n5UCSBsw027271; Tue, 30 Jun 2009 08:28:11 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n5UCSAVq000436; Tue, 30 Jun 2009 08:28:11 -0400 Received: from pike.pond.sub.org (vpn-10-97.str.redhat.com [10.32.10.97]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n5UCS9iE002016; Tue, 30 Jun 2009 08:28:10 -0400 Received: by pike.pond.sub.org (Postfix, from userid 1000) id 03EB110082; Tue, 30 Jun 2009 14:28:09 +0200 (CEST) To: Sheng Yang Cc: kvm@vger.kernel.org, Avi Kivity , Anthony Liguori Subject: Re: Device assignment hotplug broken References: <4A43B2B3.1040204@redhat.com> <200906301338.52915.sheng@linux.intel.com> From: Markus Armbruster Date: Tue, 30 Jun 2009 14:28:08 +0200 In-Reply-To: <200906301338.52915.sheng@linux.intel.com> (Sheng Yang's message of "Tue\, 30 Jun 2009 13\:38\:52 +0800") Message-ID: <87eit1c3dz.fsf@pike.pond.sub.org> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Sheng Yang writes: > On Friday 26 June 2009 01:24:03 Avi Kivity wrote: >> The impact of the hotplug changes on device assignment were too >> difficult for me to fix up during the merge, so I disabled it >> temporarily. Please take a look at qemu-kvm.git commit a3b371477e3. > > When the device assignment can come back? 4 day passed and no message from > Markus Armbruster till now. I'm having difficulties testing my patch. If it works for you, please let me know. Once I'm satisfied it works, I'll post it properly. diff --git a/hw/device-assignment.c b/hw/device-assignment.c index e282498..88c3baf 100644 --- a/hw/device-assignment.c +++ b/hw/device-assignment.c @@ -1126,9 +1126,8 @@ static int assigned_dev_register_msix_mmio(AssignedDevice *dev) struct PCIDevice *init_assigned_device(AssignedDevInfo *adev, const char *devaddr) { - printf("init_assigned_device: fix me please\n"); - return NULL; -#if 0 + PCIBus *bus; + int devfn; int r; AssignedDevice *dev; PCIDevice *pci_dev; @@ -1138,8 +1137,9 @@ struct PCIDevice *init_assigned_device(AssignedDevInfo *adev, DEBUG("Registering real physical device %s (bus=%x dev=%x func=%x)\n", adev->name, adev->bus, adev->dev, adev->func); + bus = pci_get_bus_devfn(&devfn, devaddr); pci_dev = pci_register_device(bus, adev->name, - sizeof(AssignedDevice), -1, assigned_dev_pci_read_config, + sizeof(AssignedDevice), devfn, assigned_dev_pci_read_config, assigned_dev_pci_write_config); dev = container_of(pci_dev, AssignedDevice, dev); @@ -1203,7 +1203,6 @@ assigned_out: out: free_assigned_device(adev); return NULL; -#endif } /* @@ -1268,7 +1267,7 @@ void add_assigned_devices(PCIBus *bus, const char **devices, int n_devices) exit(1); } - if (!init_assigned_device(adev, bus)) { + if (!init_assigned_device(adev, NULL)) { fprintf(stderr, "Failed to initialize assigned device %s\n", devices[i]); exit(1); diff --git a/hw/pci.c b/hw/pci.c index 618582a..0107096 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -290,7 +290,7 @@ int pci_read_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp) return pci_parse_devaddr(devaddr, domp, busp, slotp); } -static PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr) +PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr) { int dom, bus; unsigned slot; diff --git a/hw/pci.h b/hw/pci.h index 7d8df83..a2c3a23 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -239,6 +239,7 @@ int pci_read_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp); int pci_parse_host_devaddr(const char *addr, int *busp, int *slotp, int *funcp); +PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr); void pci_info(Monitor *mon); PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did,