init.c (fffaed1e24b8d114e958d180cb4a8aed3febbb5a) init.c (34ca00662eb7f184f249dd2168ebea78d945e3e4)
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/slab.h>
7#include <linux/pci.h>
8#include <linux/interrupt.h>
9#include <linux/delay.h>
10#include <linux/dma-mapping.h>
11#include <linux/workqueue.h>
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/slab.h>
7#include <linux/pci.h>
8#include <linux/interrupt.h>
9#include <linux/delay.h>
10#include <linux/dma-mapping.h>
11#include <linux/workqueue.h>
12#include <linux/aer.h>
13#include <linux/fs.h>
14#include <linux/io-64-nonatomic-lo-hi.h>
15#include <linux/device.h>
16#include <linux/idr.h>
17#include <linux/iommu.h>
18#include <uapi/linux/idxd.h>
19#include <linux/dmaengine.h>
20#include "../dmaengine.h"

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

100 dev_dbg(dev, "Requested idxd-misc handler on msix vector %d\n", ie->vector);
101
102 for (i = 0; i < idxd->max_wqs; i++) {
103 int msix_idx = i + 1;
104
105 ie = idxd_get_ie(idxd, msix_idx);
106 ie->id = msix_idx;
107 ie->int_handle = INVALID_INT_HANDLE;
12#include <linux/fs.h>
13#include <linux/io-64-nonatomic-lo-hi.h>
14#include <linux/device.h>
15#include <linux/idr.h>
16#include <linux/iommu.h>
17#include <uapi/linux/idxd.h>
18#include <linux/dmaengine.h>
19#include "../dmaengine.h"

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

99 dev_dbg(dev, "Requested idxd-misc handler on msix vector %d\n", ie->vector);
100
101 for (i = 0; i < idxd->max_wqs; i++) {
102 int msix_idx = i + 1;
103
104 ie = idxd_get_ie(idxd, msix_idx);
105 ie->id = msix_idx;
106 ie->int_handle = INVALID_INT_HANDLE;
108 ie->pasid = IOMMU_PASID_INVALID;
107 ie->pasid = INVALID_IOASID;
109
110 spin_lock_init(&ie->list_lock);
111 init_llist_head(&ie->pending_llist);
112 INIT_LIST_HEAD(&ie->work_list);
113 }
114
115 idxd_unmask_error_interrupts(idxd);
116 return 0;

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

384 idxd->wqcfg_offset = offsets.wqcfg * IDXD_TABLE_MULT;
385 dev_dbg(dev, "IDXD Work Queue Config Offset: %#x\n", idxd->wqcfg_offset);
386 idxd->msix_perm_offset = offsets.msix_perm * IDXD_TABLE_MULT;
387 dev_dbg(dev, "IDXD MSIX Permission Offset: %#x\n", idxd->msix_perm_offset);
388 idxd->perfmon_offset = offsets.perfmon * IDXD_TABLE_MULT;
389 dev_dbg(dev, "IDXD Perfmon Offset: %#x\n", idxd->perfmon_offset);
390}
391
108
109 spin_lock_init(&ie->list_lock);
110 init_llist_head(&ie->pending_llist);
111 INIT_LIST_HEAD(&ie->work_list);
112 }
113
114 idxd_unmask_error_interrupts(idxd);
115 return 0;

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

383 idxd->wqcfg_offset = offsets.wqcfg * IDXD_TABLE_MULT;
384 dev_dbg(dev, "IDXD Work Queue Config Offset: %#x\n", idxd->wqcfg_offset);
385 idxd->msix_perm_offset = offsets.msix_perm * IDXD_TABLE_MULT;
386 dev_dbg(dev, "IDXD MSIX Permission Offset: %#x\n", idxd->msix_perm_offset);
387 idxd->perfmon_offset = offsets.perfmon * IDXD_TABLE_MULT;
388 dev_dbg(dev, "IDXD Perfmon Offset: %#x\n", idxd->perfmon_offset);
389}
390
392static void multi_u64_to_bmap(unsigned long *bmap, u64 *val, int count)
391void multi_u64_to_bmap(unsigned long *bmap, u64 *val, int count)
393{
394 int i, j, nr;
395
396 for (i = 0, nr = 0; i < count; i++) {
397 for (j = 0; j < BITS_PER_LONG_LONG; j++) {
398 if (val[i] & BIT(j))
399 set_bit(nr, bmap);
400 nr++;

--- 392 unchanged lines hidden ---
392{
393 int i, j, nr;
394
395 for (i = 0, nr = 0; i < count; i++) {
396 for (j = 0; j < BITS_PER_LONG_LONG; j++) {
397 if (val[i] & BIT(j))
398 set_bit(nr, bmap);
399 nr++;

--- 392 unchanged lines hidden ---