From patchwork Mon Sep 25 08:01:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 9969389 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B8A45602CB for ; Mon, 25 Sep 2017 08:03:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B040328BFF for ; Mon, 25 Sep 2017 08:03:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A4FA228C01; Mon, 25 Sep 2017 08:03:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 01D1128BFF for ; Mon, 25 Sep 2017 08:03:21 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dwOKG-0001rN-Gx; Mon, 25 Sep 2017 08:01:12 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dwOKF-0001rG-L2 for xen-devel@lists.xenproject.org; Mon, 25 Sep 2017 08:01:11 +0000 Received: from [193.109.254.147] by server-10.bemta-6.messagelabs.com id F8/FE-03642-6C7B8C95; Mon, 25 Sep 2017 08:01:10 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrFIsWRWlGSWpSXmKPExsXS6fjDS/fQ9hO RBotXaVl83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBnTZjxiK2jirrgy7yhjA+MMzi5GTg4hgTyJ Bf0LWEBsXgE7iSNfT7CD2BIChhKnF94Ei7MIqEr8+XAczGYTUJdoe7adtYuRi0NEoJNR4szR/ UAJDg5mAQOJu99NQExhAQeJr0vNIcbbSbx81cMIEuYVEJT4u0MYJMwsoCXx8NctFghbW2LZwt fMEEOkJZb/45jAyDsLoWEWkoZZSBpmITQsYGRZxahRnFpUllqka2iql1SUmZ5RkpuYmaNraGC ml5taXJyYnpqTmFSsl5yfu4kRGGIMQLCD8duygEOMkhxMSqK8d/lORArxJeWnVGYkFmfEF5Xm pBYfYpTh4FCS4N23DSgnWJSanlqRlpkDDHaYtAQHj5II73KQNG9xQWJucWY6ROoUozHHsU2X/ zBxdNy8+4dJiCUvPy9VSpz3LEipAEhpRmke3CBYFF5ilJUS5mUEOk2IpyC1KDezBFX+FaM4B6 OSMO9jkCk8mXklcPteAZ3CBHRK71SwU0oSEVJSDYz1+0NVb+xIipUMENx79XjkFnbGP06XL8a /Znk4k0tJfNdrlZUnNxgelvWaUNEin/9B3fFm+PF0efbne1nmNh37ud2AI2A+d2jG2u7NP6ct a409mXGUZYMez0fRT73n5beu1zjcdOEhy8mOCdK+4XxcLgmagXFPxGZOniwi3TxdM73K46qC1 B0lluKMREMt5qLiRAB/bdq3vQIAAA== X-Env-Sender: JBeulich@suse.com X-Msg-Ref: server-7.tower-27.messagelabs.com!1506326464!113750269!1 X-Originating-IP: [137.65.248.74] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 30834 invoked from network); 25 Sep 2017 08:01:06 -0000 Received: from prv-mh.provo.novell.com (HELO prv-mh.provo.novell.com) (137.65.248.74) by server-7.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 25 Sep 2017 08:01:06 -0000 Received: from INET-PRV-MTA by prv-mh.provo.novell.com with Novell_GroupWise; Mon, 25 Sep 2017 02:01:04 -0600 Message-Id: <59C8D3DD020000780017F39A@prv-mh.provo.novell.com> X-Mailer: Novell GroupWise Internet Agent 14.2.2 Date: Mon, 25 Sep 2017 02:01:01 -0600 From: "Jan Beulich" To: "Boris Ostrovsky" , "Konrad Rzeszutek Wilk" , "Juergen Gross" References: <59C8D3DD020000780017F39A@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Disposition: inline Cc: xen-devel Subject: [Xen-devel] [PATCH] xen-pciback: relax BAR sizing write value check X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Just like done in d2bd05d88d ("xen-pciback: return proper values during BAR sizing") for the ROM BAR, ordinary ones also shouldn't compare the written value directly against ~0, but consider the r/o bits at the bottom (if any). Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monné --- drivers/xen/xen-pciback/conf_space_header.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) --- 4.14-rc2/drivers/xen/xen-pciback/conf_space_header.c +++ 4.14-rc2-xen-pciback-BAR-sizing/drivers/xen/xen-pciback/conf_space_header.c @@ -169,6 +169,9 @@ static int rom_write(struct pci_dev *dev static int bar_write(struct pci_dev *dev, int offset, u32 value, void *data) { struct pci_bar_info *bar = data; + unsigned int pos = (offset - PCI_BASE_ADDRESS_0) / 4; + const struct resource *res = dev->resource; + u32 mask; if (unlikely(!bar)) { pr_warn(DRV_NAME ": driver data not found for %s\n", @@ -179,7 +182,13 @@ static int bar_write(struct pci_dev *dev /* A write to obtain the length must happen as a 32-bit write. * This does not (yet) support writing individual bytes */ - if (value == ~0) + if (res[pos].flags & IORESOURCE_IO) + mask = ~PCI_BASE_ADDRESS_IO_MASK; + else if (pos && (res[pos - 1].flags & IORESOURCE_MEM_64)) + mask = 0; + else + mask = ~PCI_BASE_ADDRESS_MEM_MASK; + if ((value | mask) == ~0U) bar->which = 1; else { u32 tmpval;