diff options
| author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2026-01-17 17:28:19 +0300 |
|---|---|---|
| committer | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2026-01-18 11:18:48 +0300 |
| commit | fc999c7b68ac80cf260a43237e2b304222987243 (patch) | |
| tree | 712981a15dbd2feb65c091fa220f3e4ac12ae677 | |
| parent | 090ac6520044d0d02e039d76aaa22f4c9751837f (diff) | |
| download | linux-fc999c7b68ac80cf260a43237e2b304222987243.tar.xz | |
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 <o-takashi@sakamocchi.jp>
| -rw-r--r-- | drivers/firewire/ohci.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 8bba70b65ad7..888c43940999 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; } |
