Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp1891842imm; Tue, 2 Oct 2018 16:11:36 -0700 (PDT) X-Google-Smtp-Source: ACcGV61/J8wL48cNHq3lSoZB8pUhuyAHroB8iVpu6+AwgLtuzwOh23/GXA6dQpS71AFPlLFBYj5B X-Received: by 2002:aa7:8598:: with SMTP id w24-v6mr2422238pfn.77.1538521896276; Tue, 02 Oct 2018 16:11:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538521896; cv=none; d=google.com; s=arc-20160816; b=PIVVpicaXC6anr76o87waD++bQUvuRuEco+JlO8BpoBro10A5WfiCf0O6lFLfFFOo2 kG6O+xarz5Yz3j9t2yE4P9x5eLPkSJZGu+XRBdj0fldiFC+rAsbdnNwJNzh7JjwDHL46 iXvTS+YMvsmhkKBKORac654p8L7A3GyLSmhrG3CoJrmT84uYyoJaEE4jyb8a46FASZ2U cKVA047mV27Ewo7LLAd73OnYGtBNEOER2S8phc6HBVg3gOuKaMOK+EblCS0vW5dHThJK ZL1btw9U/zmeMgqHUHMOqPmZwN66EswvTx2wnIXZz5g/KZryXTPHB1ECluABmvxbTBzh KBxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=bt808xPWO7iokz7xZhNlvRo4FLNGh72DZpv+hDCmUM8=; b=yH8xly0C0F8Uy56aQsnPCv6oHRmqJjDTFlDXmfbvgv2v96QF/wGDmq5yW6VjBgyQbS ljwZtGfvcwW7yPsmC0soHe5HpGovFcebVeUL9TOgjhzWQUAJMhLeigAitP3cLOQeRxY8 2oUOPE/N+44Ws4OesWsZP+QKQFQTahrTV2Bld6xm7qSZWdXEjJnQzH+61uoInEltdGzI HZfpO0vQ6VUtfcUH911m6qayXFrlCAMUcNTtINHJHGMgfS3ZvzPCojDq8U/+WZQb0vIe SRE1shSuoprlxcZuWgsdTkBsKxDbw6ApN4xy+48fOPrc0yCML1w2MqPQ2frr6/TJTrxA eMRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=tr+JBwTO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o19-v6si17101042pgd.164.2018.10.02.16.11.21; Tue, 02 Oct 2018 16:11:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=tr+JBwTO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727482AbeJCF4W (ORCPT + 99 others); Wed, 3 Oct 2018 01:56:22 -0400 Received: from mail-io1-f74.google.com ([209.85.166.74]:55084 "EHLO mail-io1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725198AbeJCF4V (ORCPT ); Wed, 3 Oct 2018 01:56:21 -0400 Received: by mail-io1-f74.google.com with SMTP id l24-v6so3837354iok.21 for ; Tue, 02 Oct 2018 16:10:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=bt808xPWO7iokz7xZhNlvRo4FLNGh72DZpv+hDCmUM8=; b=tr+JBwTOplqP2n9fMrWezCjwOF7lICu7g4m7P1mnAlDH+8ie5swu5Zs7YcNtxPHpRE iUu6Ys/YiCNmbTBdDw7THsce621ROrGFbdhpgTl7+qvoa7QmAkDnCL9xSeY+VnJ1FDNd tuOK9OosWAgyybJPz1Zz4k2qED65OhjuuiF+zoX+yyGBS2XQxfQd+nfNr+nFot7wwqlv ch1g3dRke8vvUZ5wackzI/SwFrPHsrY5bxacyVeAqfuEVDSKGMkLaowplD7Vsl0au5ot 5okFRxF/Ir5eaSPzhb870Bwy7dOrnKGgkldExbRhk7f3YWS26TSNI/phekKnM0hJBGqk PGKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=bt808xPWO7iokz7xZhNlvRo4FLNGh72DZpv+hDCmUM8=; b=r/JkNn198VCdSvr2KvZDTlwystAtAgdq5VResoAVe91RXijSBztU9AAUDwp0BVO7dw wL34/zhwo1prJt8qS76z2mmB5JQGnG6F+m/SQZGY3EOwbx1g3knTXGqDvDfAtB9wLdT0 tRVfkvzOQ6D50I+9D7xHMB/wdAOCJD8gKkf70gwMi4h+wgsqCc+xSAsgLNkKlwX6wHcm K0uCHYKHYBhd2kU0A7q5XiywBeRubbDNbOM15CHzAqHNEsnpnE8b0OeGtiLFh4sdxIWu FhMBTWDAkS7P2RL72C0ylxqC1umdpW/SRYmzyioHgN3iT/t00OIyzvDXAAY1NrwUcWnA WO5w== X-Gm-Message-State: ABuFfog38Y+vTHl5zgcO7mK1A01J8nZ1BoDxSM+2aYWn8TVfehxDdOgN 7Snpm0JyDwCsqVfuCefbL16jM+nn X-Received: by 2002:a24:8306:: with SMTP id d6-v6mr3547242ite.24.1538521836077; Tue, 02 Oct 2018 16:10:36 -0700 (PDT) Date: Tue, 2 Oct 2018 16:10:24 -0700 In-Reply-To: <20181002231024.58408-1-rkir@google.com> Message-Id: <20181002231024.58408-3-rkir@google.com> Mime-Version: 1.0 References: <20181002231024.58408-1-rkir@google.com> X-Mailer: git-send-email 2.19.0.605.g01d371f741-goog Subject: [PATCH v2 03/15] platform: goldfish: pipe: Move the file-scope goldfish_pipe_dev variable into the driver state From: rkir@google.com To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, tkjos@google.com, Roman Kiryanov Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Roman Kiryanov This is the last patch in the series of patches to move file-scope variables into the driver state. This change will help to introduce another version of the pipe driver (with different state) for the older host interface or having several instances of this device. Signed-off-by: Roman Kiryanov --- Changes in v2: - Updated the commit message. drivers/platform/goldfish/goldfish_pipe.c | 66 +++++++++++++---------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c index 8ca709b45e1f..4013832f38fb 100644 --- a/drivers/platform/goldfish/goldfish_pipe.c +++ b/drivers/platform/goldfish/goldfish_pipe.c @@ -169,6 +169,9 @@ struct goldfish_pipe { * waiting to be awoken. */ struct goldfish_pipe_dev { + /* A magic number to check if this is an instance of this struct */ + void *magic; + /* * Global device spinlock. Protects the following members: * - pipes, pipes_capacity @@ -215,8 +218,6 @@ struct goldfish_pipe_dev { struct miscdevice miscdev; }; -static struct goldfish_pipe_dev goldfish_pipe_dev; - static int goldfish_pipe_cmd_locked(struct goldfish_pipe *pipe, enum PipeCmdCode cmd) { @@ -611,6 +612,9 @@ static void goldfish_interrupt_task(unsigned long dev_addr) } } +static void goldfish_pipe_device_deinit(struct platform_device *pdev, + struct goldfish_pipe_dev *dev); + /* * The general idea of the interrupt handling: * @@ -631,7 +635,7 @@ static irqreturn_t goldfish_pipe_interrupt(int irq, void *dev_id) unsigned long flags; struct goldfish_pipe_dev *dev = dev_id; - if (dev != &goldfish_pipe_dev) + if (dev->magic != &goldfish_pipe_device_deinit) return IRQ_NONE; /* Request the signalled pipes from the device */ @@ -683,6 +687,14 @@ static int get_free_pipe_id_locked(struct goldfish_pipe_dev *dev) return id; } +/* A helper function to get the instance of goldfish_pipe_dev from file */ +static struct goldfish_pipe_dev *to_goldfish_pipe_dev(struct file *file) +{ + struct miscdevice *miscdev = file->private_data; + + return container_of(miscdev, struct goldfish_pipe_dev, miscdev); +} + /** * goldfish_pipe_open - open a channel to the AVD * @inode: inode of device @@ -696,7 +708,7 @@ static int get_free_pipe_id_locked(struct goldfish_pipe_dev *dev) */ static int goldfish_pipe_open(struct inode *inode, struct file *file) { - struct goldfish_pipe_dev *dev = &goldfish_pipe_dev; + struct goldfish_pipe_dev *dev = to_goldfish_pipe_dev(file); unsigned long flags; int id; int status; @@ -804,9 +816,9 @@ static void write_pa_addr(void *addr, void __iomem *portl, void __iomem *porth) writel(lower_32_bits(paddr), portl); } -static int goldfish_pipe_device_init(struct platform_device *pdev) +static int goldfish_pipe_device_init(struct platform_device *pdev, + struct goldfish_pipe_dev *dev) { - struct goldfish_pipe_dev *dev = &goldfish_pipe_dev; int err; tasklet_init(&dev->irq_tasklet, &goldfish_interrupt_task, @@ -861,26 +873,29 @@ static int goldfish_pipe_device_init(struct platform_device *pdev) dev->base + PIPE_REG_OPEN_BUFFER, dev->base + PIPE_REG_OPEN_BUFFER_HIGH); + platform_set_drvdata(pdev, dev); return 0; } -static void goldfish_pipe_device_deinit(struct platform_device *pdev) +static void goldfish_pipe_device_deinit(struct platform_device *pdev, + struct goldfish_pipe_dev *dev) { - misc_deregister(&goldfish_pipe_dev.miscdev); - tasklet_kill(&goldfish_pipe_dev.irq_tasklet); - kfree(goldfish_pipe_dev.pipes); - free_page((unsigned long)goldfish_pipe_dev.buffers); + misc_deregister(&dev->miscdev); + tasklet_kill(&dev->irq_tasklet); + kfree(dev->pipes); + free_page((unsigned long)dev->buffers); } static int goldfish_pipe_probe(struct platform_device *pdev) { - int err; struct resource *r; - struct goldfish_pipe_dev *dev = &goldfish_pipe_dev; + struct goldfish_pipe_dev *dev; - /* not thread safe, but this should not happen */ - WARN_ON(dev->base); + dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); + if (!dev) + return -ENOMEM; + dev->magic = &goldfish_pipe_device_deinit; spin_lock_init(&dev->lock); r = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -895,10 +910,9 @@ static int goldfish_pipe_probe(struct platform_device *pdev) } r = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!r) { - err = -EINVAL; - goto error; - } + if (!r) + return -EINVAL; + dev->irq = r->start; /* @@ -913,20 +927,14 @@ static int goldfish_pipe_probe(struct platform_device *pdev) if (WARN_ON(dev->version < PIPE_CURRENT_DEVICE_VERSION)) return -EINVAL; - err = goldfish_pipe_device_init(pdev); - if (!err) - return 0; - -error: - dev->base = NULL; - return err; + return goldfish_pipe_device_init(pdev, dev); } static int goldfish_pipe_remove(struct platform_device *pdev) { - struct goldfish_pipe_dev *dev = &goldfish_pipe_dev; - goldfish_pipe_device_deinit(pdev); - dev->base = NULL; + struct goldfish_pipe_dev *dev = platform_get_drvdata(pdev); + + goldfish_pipe_device_deinit(pdev, dev); return 0; } -- 2.19.0.605.g01d371f741-goog