From patchwork Fri Oct 11 13:24:46 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antonios Motakis X-Patchwork-Id: 3024241 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 97AB59F245 for ; Fri, 11 Oct 2013 13:26:23 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 8612620142 for ; Fri, 11 Oct 2013 13:26:22 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C35722012F for ; Fri, 11 Oct 2013 13:26:17 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VUcj0-0006vm-O7; Fri, 11 Oct 2013 13:25:50 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VUciu-0000NQ-Bd; Fri, 11 Oct 2013 13:25:44 +0000 Received: from mail-we0-f174.google.com ([74.125.82.174]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VUcik-0000Ks-Cq for linux-arm-kernel@lists.infradead.org; Fri, 11 Oct 2013 13:25:35 +0000 Received: by mail-we0-f174.google.com with SMTP id u56so4206653wes.33 for ; Fri, 11 Oct 2013 06:25:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=oIKcIXyfh0JxGWzMLTS4IaJngvb5XZPv1m1hnuYrKeE=; b=kEXqxQK971RnTNZKDD4Df0U/FYgDorMFd9IGTK48tkIJyo7ORO1F4y7gtWYSqP9/7H uA9V9XQktyW1jYYi8jidJMXbxns/3HpNNCdFAMpFVp+ZEK172oRV3uQfma/RQXu+wAg3 ms+n06aL1Ws+Rq+/SYkMvF/4B0i/RvfpbMFoBxbHUMZFNZL47YBWp/tXfcDCWOWOJM4R 1Rma1LnWJzpvaFFb17gyxXtQAftSQNNtEYBVHy4uVJMJHiHBCNOjf1McDMOmOg7XdaOq L9xcHg7C/TChDZAmAno0Cwd1e/PDFfh8OWAWkj2UzlqUdRGpig12Rg02J6/THdkMWO5H /m2w== X-Gm-Message-State: ALoCoQnbwTGrGPQGo175HZQeLet959m4VJE+0+asifx5jNbbXcGJTMv3t/wXfrTvsOAX9DEYbeMO X-Received: by 10.194.201.225 with SMTP id kd1mr17052740wjc.35.1381497901618; Fri, 11 Oct 2013 06:25:01 -0700 (PDT) Received: from localhost.localdomain (home.tvelocity.eu. [82.67.68.96]) by mx.google.com with ESMTPSA id s4sm5734962wiy.1.2013.10.11.06.24.59 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 11 Oct 2013 06:25:00 -0700 (PDT) From: Antonios Motakis To: Will Deacon , Joerg Roedel , linux-arm-kernel@lists.infradead.org (moderated list:ARM SMMU DRIVER), iommu@lists.linux-foundation.org (open list:IOMMU DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/2] ARM: SMMU: add devices attached to the SMMU to an IOMMU group Date: Fri, 11 Oct 2013 15:24:46 +0200 Message-Id: <1381497887-14586-1-git-send-email-a.motakis@virtualopensystems.com> X-Mailer: git-send-email 1.8.1.2 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20131011_092534_592366_C785BB24 X-CRM114-Status: GOOD ( 11.99 ) X-Spam-Score: -2.6 (--) Cc: agraf@suse.de, B08248@freescale.com, iommu@lists.linux-foundation.org, Antonios Motakis , tech@virtualopensystems.com, kvmarm@lists.cs.columbia.edu X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP IOMMU groups are expected by certain users of the IOMMU API, e.g. VFIO. Add new devices found by the SMMU driver to an IOMMU group to satisfy those users. Signed-off-by: Antonios Motakis --- drivers/iommu/arm-smmu.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 0f45a48..8b71332 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -1502,6 +1502,8 @@ static int arm_smmu_add_device(struct device *dev) { struct arm_smmu_device *child, *parent, *smmu; struct arm_smmu_master *master = NULL; + struct iommu_group *group; + int ret; spin_lock(&arm_smmu_devices_lock); list_for_each_entry(parent, &arm_smmu_devices, list) { @@ -1534,13 +1536,27 @@ static int arm_smmu_add_device(struct device *dev) if (!master) return -ENODEV; + group = iommu_group_get(dev); + + if (!group) { + group = iommu_group_alloc(); + if (IS_ERR(group)) { + dev_err(dev, "Failed to allocate IOMMU group\n"); + return PTR_ERR(group); + } + } + + ret = iommu_group_add_device(group, dev); + iommu_group_put(group); dev->archdata.iommu = smmu; - return 0; + + return ret; } static void arm_smmu_remove_device(struct device *dev) { dev->archdata.iommu = NULL; + iommu_group_remove_device(dev); } static struct iommu_ops arm_smmu_ops = {