svn commit: r364232 - in head/sys/compat/linuxkpi/common: include/linux src
Emmanuel Vadot
manu at FreeBSD.org
Fri Aug 14 08:48:19 UTC 2020
Author: manu
Date: Fri Aug 14 08:48:17 2020
New Revision: 364232
URL: https://svnweb.freebsd.org/changeset/base/364232
Log:
linuxkpi: Add a few wait_bit functions
The linux function does a lot more than that as multiple waitqueue could be fetch
from a static table based on the hash of the argument but since in DRM it's only used
in one place just add a single variable.
We will probably need to change that in the futur but it's ok with DRM even with current
linux.
Reviewed by: hselasky
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D26054
Added:
head/sys/compat/linuxkpi/common/include/linux/wait_bit.h (contents, props changed)
Modified:
head/sys/compat/linuxkpi/common/include/linux/wait.h
head/sys/compat/linuxkpi/common/src/linux_compat.c
Modified: head/sys/compat/linuxkpi/common/include/linux/wait.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/wait.h Fri Aug 14 06:48:29 2020 (r364231)
+++ head/sys/compat/linuxkpi/common/include/linux/wait.h Fri Aug 14 08:48:17 2020 (r364232)
@@ -36,6 +36,7 @@
#include <linux/compiler.h>
#include <linux/list.h>
#include <linux/spinlock.h>
+#include <linux/sched.h>
#include <asm/atomic.h>
Added: head/sys/compat/linuxkpi/common/include/linux/wait_bit.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sys/compat/linuxkpi/common/include/linux/wait_bit.h Fri Aug 14 08:48:17 2020 (r364232)
@@ -0,0 +1,64 @@
+/*-
+ * Copyright (c) 2020 The FreeBSD Foundation
+ *
+ * This software was developed by Emmanuel Vadot under sponsorship
+ * from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef __LINUX_WAITBIT_H__
+#define __LINUX_WAITBIT_H__
+
+#include <linux/wait.h>
+#include <linux/bitops.h>
+
+extern wait_queue_head_t linux_bit_waitq;
+extern wait_queue_head_t linux_var_waitq;
+
+#define wait_var_event_killable(var, cond) \
+ wait_event_killable(linux_var_waitq, cond)
+
+static inline void
+clear_and_wake_up_bit(int bit, void *word)
+{
+ clear_bit_unlock(bit, word);
+ wake_up_bit(word, bit);
+}
+
+static inline wait_queue_head_t *
+bit_waitqueue(void *word, int bit)
+{
+
+ return (&linux_bit_waitq);
+}
+
+static inline void
+wake_up_var(void *var)
+{
+
+ wake_up(&linux_var_waitq);
+}
+
+#endif /* __LINUX_WAITBIT_H__ */
Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_compat.c Fri Aug 14 06:48:29 2020 (r364231)
+++ head/sys/compat/linuxkpi/common/src/linux_compat.c Fri Aug 14 08:48:17 2020 (r364232)
@@ -86,6 +86,7 @@ __FBSDID("$FreeBSD$");
#include <linux/compat.h>
#include <linux/poll.h>
#include <linux/smp.h>
+#include <linux/wait_bit.h>
#if defined(__i386__) || defined(__amd64__)
#include <asm/smp.h>
@@ -119,6 +120,9 @@ spinlock_t pci_lock;
unsigned long linux_timer_hz_mask;
+wait_queue_head_t linux_bit_waitq;
+wait_queue_head_t linux_var_waitq;
+
int
panic_cmp(struct rb_node *one, struct rb_node *two)
{
@@ -2523,6 +2527,8 @@ linux_compat_init(void *arg)
mtx_init(&vmmaplock, "IO Map lock", NULL, MTX_DEF);
for (i = 0; i < VMMAP_HASH_SIZE; i++)
LIST_INIT(&vmmaphead[i]);
+ init_waitqueue_head(&linux_bit_waitq);
+ init_waitqueue_head(&linux_var_waitq);
}
SYSINIT(linux_compat, SI_SUB_DRIVERS, SI_ORDER_SECOND, linux_compat_init, NULL);
More information about the svn-src-all
mailing list