From patchwork Thu Nov 21 16:49:32 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 293191 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id B96EC2C00B9 for ; Fri, 22 Nov 2013 03:53:39 +1100 (EST) Received: from localhost ([::1]:34187 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VjXVZ-0000CL-9E for incoming@patchwork.ozlabs.org; Thu, 21 Nov 2013 11:53:37 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37431) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VjXS8-0004Ea-6s for qemu-devel@nongnu.org; Thu, 21 Nov 2013 11:50:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VjXS1-0005li-7f for qemu-devel@nongnu.org; Thu, 21 Nov 2013 11:50:04 -0500 Received: from mail-ee0-x235.google.com ([2a00:1450:4013:c00::235]:50371) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VjXS1-0005le-0Y; Thu, 21 Nov 2013 11:49:57 -0500 Received: by mail-ee0-f53.google.com with SMTP id b57so4803267eek.40 for ; Thu, 21 Nov 2013 08:49:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=9YKuzn5vAJJca+E1sJ34yuTCQkTGgQLNXazvSbAY0B0=; b=iVn/FK1MltJdOJmBPNe+xmzEjpf652okIXO85UE6UWYwnpIw4RwDyD0/a3dtCaVFir J39uGj+l9LIZ7RRA9dxBMhSN21AClxYfbI+3SbPI5q86HROIr0hqsjZjEVlK9WIMns0H 1mts9tpb7aRN/pzMlCyjrAJmJ6gCzkhAt7NDCp9Yfsk6ycuecfgk+6KCh8ns2GDRtC/Y yNqs7SdCSUYPkC2UoF2VJftyIBRIa89dluNHR2Zsta9tm8VTI88CyCBbsJ8/huT5i4jF 3udB3qlFrC7rZZc8WmrjYR1478tRMM+3cll1typ9yiMF0E1e0y7qDNdQ7OwZMt+qLMKK v6Qw== X-Received: by 10.15.91.3 with SMTP id r3mr9995376eez.18.1385052595857; Thu, 21 Nov 2013 08:49:55 -0800 (PST) Received: from playground.lan (net-37-117-137-113.cust.dsl.vodafone.it. [37.117.137.113]) by mx.google.com with ESMTPSA id a51sm71819436eeh.8.2013.11.21.08.49.53 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 21 Nov 2013 08:49:54 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Thu, 21 Nov 2013 17:49:32 +0100 Message-Id: <1385052578-32352-6-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1385052578-32352-1-git-send-email-pbonzini@redhat.com> References: <1385052578-32352-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4013:c00::235 Cc: Alex Williamson , qemu-stable@nongnu.org, aliguori@amazon.com Subject: [Qemu-devel] [PULL 05/11] vfio-pci: Fix multifunction=on X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Alex Williamson When an assigned device is initialized it copies the device config space into the emulated config space. Unfortunately multifunction is setup prior to the device initfn and gets clobbered. We need to restore it just like pci-assign does. Cc: qemu-stable@nongnu.org Signed-off-by: Alex Williamson Signed-off-by: Paolo Bonzini --- hw/misc/vfio.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c index fe95e03..f7f8a19 100644 --- a/hw/misc/vfio.c +++ b/hw/misc/vfio.c @@ -3568,6 +3568,13 @@ static int vfio_initfn(PCIDevice *pdev) vdev->emulated_config_bits[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_MULTI_FUNCTION; + /* Restore or clear multifunction, this is always controlled by QEMU */ + if (vdev->pdev.cap_present & QEMU_PCI_CAP_MULTIFUNCTION) { + vdev->pdev.config[PCI_HEADER_TYPE] |= PCI_HEADER_TYPE_MULTI_FUNCTION; + } else { + vdev->pdev.config[PCI_HEADER_TYPE] &= ~PCI_HEADER_TYPE_MULTI_FUNCTION; + } + /* * Clear host resource mapping info. If we choose not to register a * BAR, such as might be the case with the option ROM, we can get