From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.linutronix.de (146.0.238.70:993) by crypto-ml.lab.linutronix.de with IMAP4-SSL for ; 21 Jan 2019 19:55:53 -0000 Received: from mga06.intel.com ([134.134.136.31]) by Galois.linutronix.de with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1gkerM-0003OU-Bw for speck@linutronix.de; Sat, 19 Jan 2019 01:51:40 +0100 From: Andi Kleen Subject: [MODERATED] [PATCH v5 25/27] MDSv5 4 Date: Fri, 18 Jan 2019 16:50:40 -0800 Message-Id: <0dd2885fd306d16007f0a4d33209206731230af4.1547858934.git.ak@linux.intel.com> In-Reply-To: References: In-Reply-To: References: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit MIME-Version: 1.0 To: speck@linutronix.de Cc: Andi Kleen List-ID: AHCI interrupt handlers never touch user data with the CPU. Just to get the number of clears down on my test system. Signed-off-by: Andi Kleen --- drivers/ata/ahci.c | 2 +- drivers/ata/ahci.h | 2 ++ drivers/ata/libahci.c | 40 ++++++++++++++++++++++++---------------- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 021ce46e2e57..1455ad89d2f9 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -1865,7 +1865,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) pci_set_master(pdev); - rc = ahci_host_activate(host, &ahci_sht); + rc = ahci_host_activate_irqflags(host, &ahci_sht, IRQF_NO_USER); if (rc) return rc; diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 8810475f307a..093ea1856307 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -432,6 +432,8 @@ void ahci_set_em_messages(struct ahci_host_priv *hpriv, int ahci_reset_em(struct ata_host *host); void ahci_print_info(struct ata_host *host, const char *scc_s); int ahci_host_activate(struct ata_host *host, struct scsi_host_template *sht); +int ahci_host_activate_irqflags(struct ata_host *host, struct scsi_host_template *sht, + int irqflags); void ahci_error_handler(struct ata_port *ap); u32 ahci_handle_port_intr(struct ata_host *host, u32 irq_masked); diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index b5f57c69c487..b32664c7d8a1 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -2548,7 +2548,8 @@ void ahci_set_em_messages(struct ahci_host_priv *hpriv, EXPORT_SYMBOL_GPL(ahci_set_em_messages); static int ahci_host_activate_multi_irqs(struct ata_host *host, - struct scsi_host_template *sht) + struct scsi_host_template *sht, + int irqflags) { struct ahci_host_priv *hpriv = host->private_data; int i, rc; @@ -2571,7 +2572,7 @@ static int ahci_host_activate_multi_irqs(struct ata_host *host, } rc = devm_request_irq(host->dev, irq, ahci_multi_irqs_intr_hard, - 0, pp->irq_desc, host->ports[i]); + irqflags, pp->irq_desc, host->ports[i]); if (rc) return rc; @@ -2581,18 +2582,8 @@ static int ahci_host_activate_multi_irqs(struct ata_host *host, return ata_host_register(host, sht); } -/** - * ahci_host_activate - start AHCI host, request IRQs and register it - * @host: target ATA host - * @sht: scsi_host_template to use when registering the host - * - * LOCKING: - * Inherited from calling layer (may sleep). - * - * RETURNS: - * 0 on success, -errno otherwise. - */ -int ahci_host_activate(struct ata_host *host, struct scsi_host_template *sht) +int ahci_host_activate_irqflags(struct ata_host *host, struct scsi_host_template *sht, + int irqflags) { struct ahci_host_priv *hpriv = host->private_data; int irq = hpriv->irq; @@ -2608,15 +2599,32 @@ int ahci_host_activate(struct ata_host *host, struct scsi_host_template *sht) return -EIO; } - rc = ahci_host_activate_multi_irqs(host, sht); + rc = ahci_host_activate_multi_irqs(host, sht, irqflags); } else { rc = ata_host_activate(host, irq, hpriv->irq_handler, - IRQF_SHARED, sht); + irqflags|IRQF_SHARED, sht); } return rc; } +EXPORT_SYMBOL_GPL(ahci_host_activate_irqflags); + +/** + * ahci_host_activate - start AHCI host, request IRQs and register it + * @host: target ATA host + * @sht: scsi_host_template to use when registering the host + * + * LOCKING: + * Inherited from calling layer (may sleep). + * + * RETURNS: + * 0 on success, -errno otherwise. + */ +int ahci_host_activate(struct ata_host *host, struct scsi_host_template *sht) +{ + return ahci_host_activate_irqflags(host, sht, 0); +} EXPORT_SYMBOL_GPL(ahci_host_activate); MODULE_AUTHOR("Jeff Garzik"); -- 2.17.2