Page MenuHomeFreeBSD

D38450.diff
No OneTemporary

D38450.diff

diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c
--- a/sys/kern/kern_intr.c
+++ b/sys/kern/kern_intr.c
@@ -3,6 +3,7 @@
*
* Copyright (c) 1997, Stefan Esser <se@freebsd.org>
* All rights reserved.
+ * Copyright © 2022 Elliott Mitchell
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -54,6 +55,7 @@
#include <sys/resourcevar.h>
#include <sys/sched.h>
#include <sys/smp.h>
+#include <sys/sx.h>
#include <sys/sysctl.h>
#include <sys/syslog.h>
#include <sys/unistd.h>
@@ -109,8 +111,8 @@
#endif
static TAILQ_HEAD(, intr_event) event_list =
TAILQ_HEAD_INITIALIZER(event_list);
-static struct mtx event_lock;
-MTX_SYSINIT(intr_event_list, &event_lock, "intr event list", MTX_DEF);
+static struct sx event_lock;
+SX_SYSINIT(intr_event_list, &event_lock, "intr event list");
static void intr_event_update(struct intr_event *ie);
static int intr_event_schedule_thread(struct intr_event *ie, struct trapframe *frame);
@@ -305,9 +307,9 @@
vsnprintf(ie->ie_name, sizeof(ie->ie_name), fmt, ap);
va_end(ap);
strlcpy(ie->ie_fullname, ie->ie_name, sizeof(ie->ie_fullname));
- mtx_lock(&event_lock);
+ sx_xlock(&event_lock);
TAILQ_INSERT_TAIL(&event_list, ie, ie_list);
- mtx_unlock(&event_lock);
+ sx_xunlock(&event_lock);
if (event != NULL)
*event = ie;
CTR2(KTR_INTR, "%s: created %s", __func__, ie->ie_name);
@@ -434,13 +436,13 @@
{
struct intr_event *ie;
- mtx_lock(&event_lock);
+ sx_slock(&event_lock);
TAILQ_FOREACH(ie, &event_list, ie_list)
if (ie->ie_irq == irq &&
(ie->ie_flags & IE_SOFT) == 0 &&
CK_SLIST_FIRST(&ie->ie_handlers) != NULL)
break;
- mtx_unlock(&event_lock);
+ sx_sunlock(&event_lock);
return (ie);
}
@@ -535,11 +537,11 @@
if (ie == NULL)
return (EINVAL);
- mtx_lock(&event_lock);
+ sx_xlock(&event_lock);
mtx_lock(&ie->ie_lock);
if (!CK_SLIST_EMPTY(&ie->ie_handlers)) {
mtx_unlock(&ie->ie_lock);
- mtx_unlock(&event_lock);
+ sx_xunlock(&event_lock);
return (EBUSY);
}
TAILQ_REMOVE(&event_list, ie, ie_list);
@@ -550,7 +552,7 @@
}
#endif
mtx_unlock(&ie->ie_lock);
- mtx_unlock(&event_lock);
+ sx_xunlock(&event_lock);
mtx_destroy(&ie->ie_lock);
free(ie, M_ITHREAD);
return (0);

File Metadata

Mime Type
text/plain
Expires
Fri, Jan 30, 2:03 PM (6 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28094400
Default Alt Text
D38450.diff (2 KB)

Event Timeline