From patchwork Mon Apr 23 14:34:01 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiang Liu X-Patchwork-Id: 154458 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id EAFCCB6F9A for ; Tue, 24 Apr 2012 00:39:14 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755630Ab2DWOin (ORCPT ); Mon, 23 Apr 2012 10:38:43 -0400 Received: from mail-pb0-f46.google.com ([209.85.160.46]:56437 "EHLO mail-pb0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755625Ab2DWOil (ORCPT ); Mon, 23 Apr 2012 10:38:41 -0400 Received: by pbcun15 with SMTP id un15so3966681pbc.19 for ; Mon, 23 Apr 2012 07:38:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=M4KoRvWc0Dy/lLVdjzCoHjBdSid3rhKx3ziAjTmD2JU=; b=jdDHwKBTZaCqUhOI3M49dOaSG2g7Xzz1AJYpJBoY90WfcPqzbH3GR7q0F7YX1SQ11D /GcpHLqd70Tzo3lgQzVUeAFetzn0OL9jokUvmd9+kS0KTuP/uRdpAix26j5ZAg6oOZ/t 0qdIvAx4A0gwZh4Whh/hAiLbZXffyQK3zsrhY5peZFChSH22mJwlMAWh+/E6Q5ZSLBwT xrb2uN9NjzLIlXAMnJ/NnoYdxjc8FliOpUXLlvhOJlPiPkPiTjAyBOI+u78S+cOa6eFr 7oJIPkNxKpwt+eVuGNAON3mGomSAc4Jmm9jTGB0UBKk4bfNk+gXK0TGLLJDXJkn9Bu/L 06eQ== Received: by 10.68.226.5 with SMTP id ro5mr33165934pbc.74.1335191921348; Mon, 23 Apr 2012 07:38:41 -0700 (PDT) Received: from localhost.localdomain ([221.221.17.121]) by mx.google.com with ESMTPS id h10sm14531784pbh.69.2012.04.23.07.38.32 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 23 Apr 2012 07:38:40 -0700 (PDT) From: Jiang Liu To: Paul Gortmaker , Mike Galbraith , Thomas Gleixner , Vinod Koul , Dan Williams , Ingo Molnar Cc: Jiang Liu , Keping Chen , linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Jiang Liu Subject: [PATCH v1 2/3] DCA, x86: restart DCA operations in unregister_dca_provider() Date: Mon, 23 Apr 2012 22:34:01 +0800 Message-Id: <1335191642-6869-3-git-send-email-jiang.liu@huawei.com> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1335191642-6869-1-git-send-email-jiang.liu@huawei.com> References: <1335191642-6869-1-git-send-email-jiang.liu@huawei.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org When deregistering a DCA device, function unregister_dca_provider() will notify clients by DCA_PROVIDER_REMOVE to stop DCA operations at beginning. Currently DCA operations won't be restarted by unregister_dca_provider() even if there are still DCA devices left. This may cause trouble to systems with multiple DCA devices/IOHs. So restart DCA operations if there are still DCA devices left after removing a DCA device. Signed-off-by: Jiang Liu --- drivers/dca/dca-core.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) diff --git a/drivers/dca/dca-core.c b/drivers/dca/dca-core.c index 075c4bd..f8cfa58 100644 --- a/drivers/dca/dca-core.c +++ b/drivers/dca/dca-core.c @@ -414,6 +414,7 @@ void unregister_dca_provider(struct dca_provider *dca, struct device *dev) unsigned long flags; struct pci_bus *pci_rc; struct dca_domain *domain; + bool restart = false; blocking_notifier_call_chain(&dca_provider_chain, DCA_PROVIDER_REMOVE, NULL); @@ -427,9 +428,20 @@ void unregister_dca_provider(struct dca_provider *dca, struct device *dev) if (list_empty(&domain->dca_providers)) dca_free_domain(domain); + if (!list_empty(&dca_domains)) + restart = true; + raw_spin_unlock_irqrestore(&dca_lock, flags); dca_sysfs_remove_provider(dca); + + /* + * Notify DCA clients to restart DCA operations if there are still + * DCA devices left. + */ + if (restart) + blocking_notifier_call_chain(&dca_provider_chain, + DCA_PROVIDER_ADD, NULL); } EXPORT_SYMBOL_GPL(unregister_dca_provider);