From fc999c7b68ac80cf260a43237e2b304222987243 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Sat, 17 Jan 2026 23:28:19 +0900 Subject: [PATCH] firewire: ohci: allocate isoc context header by kvmalloc() Isochronous packet handling now runs in a workqueue context, where page faults is acceptable. This commit replaces __get_free_page() with kvmalloc() when allocating the isochronous context header buffer. Link: https://lore.kernel.org/r/20260117142823.440811-7-o-takashi@sakamocchi.jp Signed-off-by: Takashi Sakamoto --- drivers/firewire/ohci.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 8bba70b65ad7e..888c43940999a 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -2958,7 +2958,7 @@ static struct fw_iso_context *ohci_allocate_iso_context(struct fw_card *card, int type, int channel, size_t header_size) { struct fw_ohci *ohci = fw_ohci(card); - void *header __free(free_page) = NULL; + void *header __free(kvfree) = NULL; struct iso_context *ctx; descriptor_callback_t callback; u64 *channels; @@ -3016,7 +3016,7 @@ static struct fw_iso_context *ohci_allocate_iso_context(struct fw_card *card, if (type != FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL) { ctx->sc.header_length = 0; - header = (void *) __get_free_page(GFP_KERNEL); + header = kvmalloc(PAGE_SIZE, GFP_KERNEL); if (!header) { ret = -ENOMEM; goto out; @@ -3137,7 +3137,7 @@ static void ohci_free_iso_context(struct fw_iso_context *base) context_release(&ctx->context); if (base->type != FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL) { - free_page((unsigned long)ctx->sc.header); + kvfree(ctx->sc.header); ctx->sc.header = NULL; } -- 2.47.3