Created
February 4, 2021 01:07
-
-
Save kerneltoast/2bcddb34fc13010d518b4eb786d419d6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From b0fd92c50b819c96d1750f497ad2c2c984a7102e Mon Sep 17 00:00:00 2001 | |
From: Sultan Alsawaf <sultan@openresty.com> | |
Date: Wed, 3 Feb 2021 17:05:35 -0800 | |
Subject: [PATCH] alloc: use rt-safe spin lock for DEBUG_MEM | |
--- | |
runtime/linux/alloc.c | 23 ++++++++++++----------- | |
1 file changed, 12 insertions(+), 11 deletions(-) | |
diff --git a/runtime/linux/alloc.c b/runtime/linux/alloc.c | |
index 30edbd773..b3a6e8481 100644 | |
--- a/runtime/linux/alloc.c | |
+++ b/runtime/linux/alloc.c | |
@@ -12,6 +12,7 @@ | |
#define _STAPLINUX_ALLOC_C_ | |
#include <linux/percpu.h> | |
+#include "stp_helper_lock.h" | |
static int _stp_allocated_net_memory = 0; | |
/* Default, and should be "safe" from anywhere. */ | |
@@ -47,7 +48,7 @@ static int _stp_allocated_net_memory = 0; | |
static int _stp_allocated_memory = 0; | |
#ifdef DEBUG_MEM | |
-static DEFINE_SPINLOCK(_stp_mem_lock); | |
+static STP_DEFINE_SPINLOCK(_stp_mem_lock); | |
#define MEM_MAGIC 0xc11cf77f | |
#define MEM_FENCE_SIZE 32 | |
@@ -117,9 +118,9 @@ static void *_stp_mem_debug_setup(void *addr, size_t size, enum _stp_memtype typ | |
m->type = type; | |
m->len = size; | |
m->addr = addr; | |
- spin_lock_irqsave(&_stp_mem_lock, flags); | |
+ stp_spin_lock_irqsave(&_stp_mem_lock, flags); | |
list_add(p, &_stp_mem_list); | |
- spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
+ stp_spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
return addr; | |
} | |
@@ -132,9 +133,9 @@ static void _stp_mem_debug_percpu(struct _stp_mem_entry *m, void *addr, size_t s | |
m->type = MEM_PERCPU; | |
m->len = size; | |
m->addr = addr; | |
- spin_lock_irqsave(&_stp_mem_lock, flags); | |
+ stp_spin_lock_irqsave(&_stp_mem_lock, flags); | |
list_add(p, &_stp_mem_list); | |
- spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
+ stp_spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
} | |
static void _stp_mem_debug_free(void *addr, enum _stp_memtype type) | |
@@ -154,7 +155,7 @@ static void _stp_mem_debug_free(void *addr, enum _stp_memtype type) | |
} | |
} | |
- spin_lock_irqsave(&_stp_mem_lock, flags); | |
+ stp_spin_lock_irqsave(&_stp_mem_lock, flags); | |
list_for_each_safe(p, tmp, &_stp_mem_list) { | |
m = list_entry(p, struct _stp_mem_entry, list); | |
if (m->addr == addr) { | |
@@ -163,7 +164,7 @@ static void _stp_mem_debug_free(void *addr, enum _stp_memtype type) | |
break; | |
} | |
} | |
- spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
+ stp_spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
if (!found) { | |
_stp_printk(KERN_ERR, "ERROR: Free of unallocated memory %p type=%s\n", | |
addr, _stp_malloc_types[type].free); | |
@@ -206,7 +207,7 @@ static void _stp_mem_debug_validate(void *addr) | |
struct _stp_mem_entry *m = NULL; | |
unsigned long flags; | |
- spin_lock_irqsave(&_stp_mem_lock, flags); | |
+ stp_spin_lock_irqsave(&_stp_mem_lock, flags); | |
list_for_each_safe(p, tmp, &_stp_mem_list) { | |
m = list_entry(p, struct _stp_mem_entry, list); | |
if (m->addr == addr) { | |
@@ -214,7 +215,7 @@ static void _stp_mem_debug_validate(void *addr) | |
break; | |
} | |
} | |
- spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
+ stp_spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
if (!found) { | |
_stp_printk(KERN_ERR, "ERROR: Couldn't validate memory %p\n", | |
addr); | |
@@ -594,7 +595,7 @@ static void _stp_mem_debug_done(void) | |
struct _stp_mem_entry *m; | |
unsigned long flags; | |
- spin_lock_irqsave(&_stp_mem_lock, flags); | |
+ stp_spin_lock_irqsave(&_stp_mem_lock, flags); | |
list_for_each_safe(p, tmp, &_stp_mem_list) { | |
m = list_entry(p, struct _stp_mem_entry, list); | |
list_del(p); | |
@@ -629,7 +630,7 @@ static void _stp_mem_debug_done(void) | |
} | |
} | |
done: | |
- spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
+ stp_spin_unlock_irqrestore(&_stp_mem_lock, flags); | |
return; | |
-- | |
2.30.0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment