Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp2761658imm; Thu, 9 Aug 2018 20:24:39 -0700 (PDT) X-Google-Smtp-Source: AA+uWPyFSUioc0h4ZneC8mPp7P18KCGJZ98mAWjr17Bv3NlAI1S6gfj+vzL6xYQbV8YKs7S10FR3 X-Received: by 2002:a63:eb53:: with SMTP id b19-v6mr4523537pgk.371.1533871479068; Thu, 09 Aug 2018 20:24:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533871479; cv=none; d=google.com; s=arc-20160816; b=TQINdrfizgHLojeSYn5N0UxXLyDqiSJcrNr/jQs9UIbgBmAG+7l/SLq2vLmeqUtXbO 3G9O8UVGYSbsoxq1YgRNEppHdzkq5QdkQUfri4lN4TelaNZbYDki9mKnjMR5RmWmFg0J 23qLISWuWDhvBt7tCOPtWNYzHMIjitCNtw0hGnKyICZHpbI19tOc3/8d6h0+gLxjOYbr abX0Bf51AHpGcV1qeCI8A852t/rc1HSdb4ZRCI+GH0CldOLfGSQtqBjitjQlj0OVRbkz py/liEX1i7qO0KT5N2IFnO0AqelIsYJSaElLndBrt5iKCcHMpioJCbmmNtfvAgsajM++ fXiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=oT/TFDguXYEAAijqO25uIhuE2wJzONOr29rVv+r/etk=; b=KCVg7z3clRxqjtPLUdlLJbmqlUf2/cTn3b5Dr6PFysXarZHkGBLo3BPI9mkHW/uVRq /6jMUgvgee4BEiVkGmNpwGHrfAgjxSd23/4bVjyeQaRYTEawXt4YH1HO84K1yCKOGg4o KUfOzQZQca+24hBf9vJXSD/9lMJRzW536TSADoDsgaPe/N8lCbrNsq2S6nl35wh9FmI0 d9TLQrVqBH3auYtSF66fFRq/2H98vAhih6WUgLYkEaYeafBlHKePxjY31NDjajKyB6LJ joDLPmuEebAP7I75iYsoq27SvMPyKToFS74OBH11arAmykfueoxE4ZOhLZC4g8SpcErt XqSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=dZrQx1aW; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k130-v6si9372200pfc.282.2018.08.09.20.24.01; Thu, 09 Aug 2018 20:24:39 -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=@gmail.com header.s=20161025 header.b=dZrQx1aW; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727681AbeHJFtb (ORCPT + 99 others); Fri, 10 Aug 2018 01:49:31 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:39443 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727653AbeHJFta (ORCPT ); Fri, 10 Aug 2018 01:49:30 -0400 Received: by mail-pf1-f193.google.com with SMTP id j8-v6so3829394pff.6 for ; Thu, 09 Aug 2018 20:21:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oT/TFDguXYEAAijqO25uIhuE2wJzONOr29rVv+r/etk=; b=dZrQx1aWMfINDCXiIRxgy4Kj4bu0NbmODVfYx550XdjgrqPYndxAYAduCqOT8uhkcI mGa/A69gXFHh4tYzSNFN+ry4zn9hCK8r/Tc0hP6T1QPoxSHtIaB5hkaeL0WyPPkhN/Ez Z1ogCJKu8d93hO63PF5GS7GaWN14Tf3u9Fq1ACVLmqWSDYd5ESxyS9YZSP/HXePj6wz0 FgR6xPdUe/9zp3nkUc8oGtBRAXrsehMjgpNY79sBnQ0/XKavpGs+v3biQ3HCEJPEqN5W 5dEZid0ZPSrKMENmr6ShSLCz3h6g8WB+AMjeds2qoOcpqWGkKBIjeT83mdn65RJaLKhR 3wXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oT/TFDguXYEAAijqO25uIhuE2wJzONOr29rVv+r/etk=; b=p7Z7I2GPH+jDNLXBKXYwExR/Cu8Rkb7+fLuzbw7oRC3q3eJ4/SrIESG72n21O0Z+1W 3cVWakOjrM22Hd+RERbXRzqsanzgsL4lmtooYGCZMi86GiIHfdVJC2Z2IQwJ04Nd8Qrv lhKJlXGr+UTqkqFDrYfqoIQBlNGyn+xgTFf+v9iY6n0G9HSnB7KLCYgLcS8rzwxBu/Uw aBS+ubFIXFsp3pwnoQpRa5vU8ugQOBLkr3LVtp0zShzTRPOnHUe2x+dME6+VdZyeR1jN 6/dFknkd6gerECtmLvmKo7Z0zQlnVush9A8sTMd5xuEO0FShhE6s8t0pW3wMvp543uc8 /9qg== X-Gm-Message-State: AOUpUlEnBFbsb8kmVUXlc/VAzXp1Jc7snAZbKmAMMzGdgxeMqGbVHYpw shH5gqXnslBRki5xlBy7Qk8= X-Received: by 2002:a63:d54e:: with SMTP id v14-v6mr4659462pgi.264.1533871297198; Thu, 09 Aug 2018 20:21:37 -0700 (PDT) Received: from toddpoynor2.mtv.corp.google.com ([2620:0:1000:3701:7d29:cd13:d903:7908]) by smtp.gmail.com with ESMTPSA id p73-v6sm16130871pfk.186.2018.08.09.20.21.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Aug 2018 20:21:36 -0700 (PDT) From: Todd Poynor To: Rob Springer , John Joseph , Ben Chan , Greg Kroah-Hartman Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Todd Poynor Subject: [PATCH 14/16] staging: gasket: interrupt: refactor PCI MSIX-specific handler code Date: Thu, 9 Aug 2018 20:21:09 -0700 Message-Id: <20180810032111.197743-15-toddpoynor@gmail.com> X-Mailer: git-send-email 2.18.0.597.ga71716f1ad-goog In-Reply-To: <20180810032111.197743-1-toddpoynor@gmail.com> References: <20180810032111.197743-1-toddpoynor@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Todd Poynor Split interrupt handler into PCI MSIX-specific and generic functions, for adding non-MSIX handlers in the future. Move MSIX init code together,, out of generic init path. Signed-off-by: Todd Poynor --- drivers/staging/gasket/gasket_interrupt.c | 48 ++++++++++++----------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/drivers/staging/gasket/gasket_interrupt.c b/drivers/staging/gasket/gasket_interrupt.c index 1cfbc120f2284..f94e4ea9a7ded 100644 --- a/drivers/staging/gasket/gasket_interrupt.c +++ b/drivers/staging/gasket/gasket_interrupt.c @@ -157,9 +157,22 @@ static void gasket_interrupt_setup(struct gasket_dev *gasket_dev) } } -static irqreturn_t gasket_msix_interrupt_handler(int irq, void *dev_id) +static void +gasket_handle_interrupt(struct gasket_interrupt_data *interrupt_data, + int interrupt_index) { struct eventfd_ctx *ctx; + + trace_gasket_interrupt_event(interrupt_data->name, interrupt_index); + ctx = interrupt_data->eventfd_ctxs[interrupt_index]; + if (ctx) + eventfd_signal(ctx, 1); + + ++(interrupt_data->interrupt_counts[interrupt_index]); +} + +static irqreturn_t gasket_msix_interrupt_handler(int irq, void *dev_id) +{ struct gasket_interrupt_data *interrupt_data = dev_id; int interrupt = -1; int i; @@ -175,14 +188,7 @@ static irqreturn_t gasket_msix_interrupt_handler(int irq, void *dev_id) pr_err("Received unknown irq %d\n", irq); return IRQ_HANDLED; } - trace_gasket_interrupt_event(interrupt_data->name, interrupt); - - ctx = interrupt_data->eventfd_ctxs[interrupt]; - if (ctx) - eventfd_signal(ctx, 1); - - ++(interrupt_data->interrupt_counts[interrupt]); - + gasket_handle_interrupt(interrupt_data, interrupt); return IRQ_HANDLED; } @@ -192,6 +198,12 @@ gasket_interrupt_msix_init(struct gasket_interrupt_data *interrupt_data) int ret = 1; int i; + interrupt_data->msix_entries = + kcalloc(interrupt_data->num_interrupts, + sizeof(struct msix_entry), GFP_KERNEL); + if (!interrupt_data->msix_entries) + return -ENOMEM; + for (i = 0; i < interrupt_data->num_interrupts; i++) { interrupt_data->msix_entries[i].entry = i; interrupt_data->msix_entries[i].vector = 0; @@ -343,20 +355,10 @@ int gasket_interrupt_init(struct gasket_dev *gasket_dev, const char *name, interrupt_data->num_configured = 0; interrupt_data->wire_interrupt_offsets = wire_int_offsets; - /* Allocate all dynamic structures. */ - interrupt_data->msix_entries = kcalloc(num_interrupts, - sizeof(struct msix_entry), - GFP_KERNEL); - if (!interrupt_data->msix_entries) { - kfree(interrupt_data); - return -ENOMEM; - } - interrupt_data->eventfd_ctxs = kcalloc(num_interrupts, sizeof(struct eventfd_ctx *), GFP_KERNEL); if (!interrupt_data->eventfd_ctxs) { - kfree(interrupt_data->msix_entries); kfree(interrupt_data); return -ENOMEM; } @@ -366,7 +368,6 @@ int gasket_interrupt_init(struct gasket_dev *gasket_dev, const char *name, GFP_KERNEL); if (!interrupt_data->interrupt_counts) { kfree(interrupt_data->eventfd_ctxs); - kfree(interrupt_data->msix_entries); kfree(interrupt_data); return -ENOMEM; } @@ -417,6 +418,7 @@ gasket_interrupt_msix_cleanup(struct gasket_interrupt_data *interrupt_data) if (interrupt_data->msix_configured) pci_disable_msix(interrupt_data->pci_dev); interrupt_data->msix_configured = 0; + kfree(interrupt_data->msix_entries); } int gasket_interrupt_reinit(struct gasket_dev *gasket_dev) @@ -448,10 +450,11 @@ int gasket_interrupt_reinit(struct gasket_dev *gasket_dev) } if (ret) { - /* Failing to setup MSIx will cause the device + /* Failing to setup interrupts will cause the device * to report GASKET_STATUS_LAMED, but is not fatal. */ - dev_warn(gasket_dev->dev, "Couldn't init msix: %d\n", ret); + dev_warn(gasket_dev->dev, "Couldn't reinit interrupts: %d\n", + ret); return 0; } @@ -497,7 +500,6 @@ void gasket_interrupt_cleanup(struct gasket_dev *gasket_dev) kfree(interrupt_data->interrupt_counts); kfree(interrupt_data->eventfd_ctxs); - kfree(interrupt_data->msix_entries); kfree(interrupt_data); gasket_dev->interrupt_data = NULL; } -- 2.18.0.597.ga71716f1ad-goog