io: use isr->priv

This commit is contained in:
Matheus
2024-09-07 11:21:38 -03:00
parent feff654109
commit c596244010
4 changed files with 10 additions and 34 deletions
+3 -7
View File
@@ -294,18 +294,15 @@ static void nvme_dpc(context_t *, dpcarg_t arg) {
spinlock_release(&pair->lock);
}
static hashtable_t irqtable;
static void nvme_irq(isr_t *isr, context_t *context) {
void *v;
__assert(hashtable_get(&irqtable, &v, &isr->id, sizeof(isr->id)) == 0);
queuepair_t *pair = v;
queuepair_t *pair = isr->priv;
dpc_enqueue(&pair->dpc, nvme_dpc, pair);
}
static isr_t *msixnewisrforqueue(queuepair_t *queuepair) {
isr_t *isr = interrupt_allocate(nvme_irq, ARCH_EOI, IPL_DISK);
__assert(isr);
__assert(hashtable_set(&irqtable, queuepair, &isr->id, sizeof(isr->id), true) == 0);
isr->priv = queuepair;
return isr;
}
@@ -764,7 +761,6 @@ static void initcontroller(pcienum_t *e) {
}
void nvme_init() {
__assert(hashtable_init(&irqtable, 10) == 0);
int i = 0;
for (;;) {
pcienum_t *e = pci_getenum(PCI_CLASS_STORAGE, PCI_SUBCLASS_STORAGE_NVM, -1, -1, -1, -1, i++);
+2 -10
View File
@@ -34,8 +34,6 @@ typedef struct {
#define HEADER_TYPE_READ 0
#define HEADER_TYPE_WRITE 1
static hashtable_t inttable; // int id -> vioblkdev
static void vioblk_dpc(context_t *context, dpcarg_t arg) {
vioblkdev_t *blkdev = arg;
volatile viobuffer_t *buffers = VIO_QUEUE_BUFFERS(&blkdev->queue);
@@ -55,9 +53,7 @@ static void vioblk_dpc(context_t *context, dpcarg_t arg) {
}
static void vioblk_irq(isr_t *isr, context_t *context) {
void *v;
__assert(hashtable_get(&inttable, &v, &isr->id, sizeof(isr->id)) == 0);
vioblkdev_t *blkdev = v;
vioblkdev_t *blkdev = isr->priv;
dpc_enqueue(&blkdev->queuedpc, vioblk_dpc, blkdev);
}
@@ -176,9 +172,9 @@ int vioblk_newdevice(viodevice_t *viodevice) {
isr_t *isr = interrupt_allocate(vioblk_irq, ARCH_EOI, IPL_DISK);
__assert(isr);
isr->priv = blkdev;
pci_msixadd(viodevice->e, 0, INTERRUPT_IDTOVECTOR(isr->id), 0, 0);
pci_msixsetmask(viodevice->e, 0);
__assert(hashtable_set(&inttable, blkdev, &isr->id, sizeof(isr->id), true) == 0);
// initialize queue
size_t size = min(QUEUE_MAX_SIZE, virtio_queuesize(viodevice, 0));
@@ -205,7 +201,3 @@ int vioblk_newdevice(viodevice_t *viodevice) {
return 0;
}
void vioblk_init() {
__assert(hashtable_init(&inttable, 10) == 0);
}