summaryrefslogtreecommitdiff
path: root/arch/x86/net/bpf_jit_comp.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2013-10-30 18:42:13 +0100
committerTakashi Iwai <tiwai@suse.de>2013-10-30 18:42:13 +0100
commitc4a4ddaefbef3c5135c3167bd5e067859d71e84c (patch)
tree1c44a7de360774a272495593d2bb67853380da82 /arch/x86/net/bpf_jit_comp.c
parent6fc16e58adf50c0f1e4478538983fb5ff6f453d4 (diff)
parent8723b795aaa0c5f0b9db2099af575f5e089a63f1 (diff)
downloadlwn-c4a4ddaefbef3c5135c3167bd5e067859d71e84c.tar.gz
lwn-c4a4ddaefbef3c5135c3167bd5e067859d71e84c.zip
Merge tag 'asoc-fix-v3.12-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v3.12 A few of the Coverity fixes from Takashi, one of which (the wm_hubs one) is particularly noticable.
Diffstat (limited to 'arch/x86/net/bpf_jit_comp.c')
-rw-r--r--arch/x86/net/bpf_jit_comp.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 79c216aa0e2b..516593e1ce33 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -772,13 +772,21 @@ out:
return;
}
+static void bpf_jit_free_deferred(struct work_struct *work)
+{
+ struct sk_filter *fp = container_of(work, struct sk_filter, work);
+ unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
+ struct bpf_binary_header *header = (void *)addr;
+
+ set_memory_rw(addr, header->pages);
+ module_free(NULL, header);
+ kfree(fp);
+}
+
void bpf_jit_free(struct sk_filter *fp)
{
if (fp->bpf_func != sk_run_filter) {
- unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
- struct bpf_binary_header *header = (void *)addr;
-
- set_memory_rw(addr, header->pages);
- module_free(NULL, header);
+ INIT_WORK(&fp->work, bpf_jit_free_deferred);
+ schedule_work(&fp->work);
}
}