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