From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753902AbbCKNwE (ORCPT ); Wed, 11 Mar 2015 09:52:04 -0400 Received: from mail.emea.novell.com ([130.57.118.101]:33503 "EHLO mail.emea.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751727AbbCKNwC convert rfc822-to-8bit (ORCPT ); Wed, 11 Mar 2015 09:52:02 -0400 Message-Id: <5500569002000078000688DA@mail.emea.novell.com> X-Mailer: Novell GroupWise Internet Agent 14.0.1 Date: Wed, 11 Mar 2015 13:52:00 +0000 From: "Jan Beulich" To: "David Vrabel" , "Boris Ostrovsky" , "Konrad Rzeszutek Wilk" Cc: "xen-devel" , Subject: [PATCH 2/2] xen-pciback: also support disabling of bus-mastering and memory-write-invalidate Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 8BIT Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It's not clear to me why only the enabling operation got handled so far. Signed-off-by: Jan Beulich --- drivers/xen/xen-pciback/conf_space_header.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) --- 4.0-rc3-xen-pciback.orig/drivers/xen/xen-pciback/conf_space_header.c +++ 4.0-rc3-xen-pciback/drivers/xen/xen-pciback/conf_space_header.c @@ -88,9 +88,15 @@ static int command_write(struct pci_dev printk(KERN_DEBUG DRV_NAME ": %s: set bus master\n", pci_name(dev)); pci_set_master(dev); + } else if (dev->is_busmaster && !is_master_cmd(value)) { + if (unlikely(verbose_request)) + printk(KERN_DEBUG DRV_NAME ": %s: clear bus master\n", + pci_name(dev)); + pci_clear_master(dev); } - if (value & PCI_COMMAND_INVALIDATE) { + if (!(cmd->val & PCI_COMMAND_INVALIDATE) && + (value & PCI_COMMAND_INVALIDATE)) { if (unlikely(verbose_request)) printk(KERN_DEBUG DRV_NAME ": %s: enable memory-write-invalidate\n", @@ -101,6 +107,13 @@ static int command_write(struct pci_dev pci_name(dev), err); value &= ~PCI_COMMAND_INVALIDATE; } + } else if ((cmd->val & PCI_COMMAND_INVALIDATE) && + !(value & PCI_COMMAND_INVALIDATE)) { + if (unlikely(verbose_request)) + printk(KERN_DEBUG + DRV_NAME ": %s: disable memory-write-invalidate\n", + pci_name(dev)); + pci_clear_mwi(dev); } cmd->val = value;