dev/pci: Unmap memory on allocation failure

This commit is contained in:
2026-11-02 21:53:06 +01:00
committed by Marvin Friedrich
parent 54f279a9e6
commit fd50c97f1a
3 changed files with 24 additions and 4 deletions
+10 -2
View File
@@ -39,8 +39,14 @@ static errno_t map_bar(struct pci_bar* bar, void** out) {
for (size_t i = 0; i < len; i += page_size) {
errno_t status = pmap_map(&kernel_vma.pmap, vaddr + i, bar->address + i, PTE_READ | PTE_WRITE, CACHE_MMIO);
if (status)
if (status) {
while (i) {
i -= page_size;
pmap_unmap(&kernel_vma.pmap, vaddr + i);
}
vm_free(vaddr, len);
return status;
}
}
*out = (void*)vaddr;
@@ -81,8 +87,10 @@ static errno_t nvme_pci_probe(struct pci_device* dev, const struct pci_match* ma
if (irq_line) {
struct nvme_irq_handler* handler = mem_alloc(sizeof(*handler), 0);
if (!handler)
if (!handler) {
mem_free(controller);
return ENOMEM;
}
handler->handler.thread = nvme_irq_thread;
handler->controller = controller;