irq.c (8f47d1a5e545f903cd049c42da31a3be36178447) irq.c (42d279f9137ab7d5503836baec2739284b278d8f)
1// SPDX-License-Identifier: GPL-2.0
2/* Copyright(c) 2019 Intel Corporation. All rights rsvd. */
3#include <linux/init.h>
4#include <linux/kernel.h>
5#include <linux/module.h>
6#include <linux/pci.h>
7#include <linux/io-64-nonatomic-lo-hi.h>
8#include <linux/dmaengine.h>

--- 75 unchanged lines hidden (view full) ---

84 cause = ioread32(idxd->reg_base + IDXD_INTCAUSE_OFFSET);
85
86 if (cause & IDXD_INTC_ERR) {
87 spin_lock_bh(&idxd->dev_lock);
88 for (i = 0; i < 4; i++)
89 idxd->sw_err.bits[i] = ioread64(idxd->reg_base +
90 IDXD_SWERR_OFFSET + i * sizeof(u64));
91 iowrite64(IDXD_SWERR_ACK, idxd->reg_base + IDXD_SWERR_OFFSET);
1// SPDX-License-Identifier: GPL-2.0
2/* Copyright(c) 2019 Intel Corporation. All rights rsvd. */
3#include <linux/init.h>
4#include <linux/kernel.h>
5#include <linux/module.h>
6#include <linux/pci.h>
7#include <linux/io-64-nonatomic-lo-hi.h>
8#include <linux/dmaengine.h>

--- 75 unchanged lines hidden (view full) ---

84 cause = ioread32(idxd->reg_base + IDXD_INTCAUSE_OFFSET);
85
86 if (cause & IDXD_INTC_ERR) {
87 spin_lock_bh(&idxd->dev_lock);
88 for (i = 0; i < 4; i++)
89 idxd->sw_err.bits[i] = ioread64(idxd->reg_base +
90 IDXD_SWERR_OFFSET + i * sizeof(u64));
91 iowrite64(IDXD_SWERR_ACK, idxd->reg_base + IDXD_SWERR_OFFSET);
92
93 if (idxd->sw_err.valid && idxd->sw_err.wq_idx_valid) {
94 int id = idxd->sw_err.wq_idx;
95 struct idxd_wq *wq = &idxd->wqs[id];
96
97 if (wq->type == IDXD_WQT_USER)
98 wake_up_interruptible(&wq->idxd_cdev.err_queue);
99 } else {
100 int i;
101
102 for (i = 0; i < idxd->max_wqs; i++) {
103 struct idxd_wq *wq = &idxd->wqs[i];
104
105 if (wq->type == IDXD_WQT_USER)
106 wake_up_interruptible(&wq->idxd_cdev.err_queue);
107 }
108 }
109
92 spin_unlock_bh(&idxd->dev_lock);
93 val |= IDXD_INTC_ERR;
94
95 for (i = 0; i < 4; i++)
96 dev_warn(dev, "err[%d]: %#16.16llx\n",
97 i, idxd->sw_err.bits[i]);
98 err = true;
99 }

--- 144 unchanged lines hidden ---
110 spin_unlock_bh(&idxd->dev_lock);
111 val |= IDXD_INTC_ERR;
112
113 for (i = 0; i < 4; i++)
114 dev_warn(dev, "err[%d]: %#16.16llx\n",
115 i, idxd->sw_err.bits[i]);
116 err = true;
117 }

--- 144 unchanged lines hidden ---