Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kerneltoast/2bcddb34fc13010d518b4eb786d419d6 to your computer and use it in GitHub Desktop.
Save kerneltoast/2bcddb34fc13010d518b4eb786d419d6 to your computer and use it in GitHub Desktop.
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