Module Name: src
Committed By: riastradh
Date: Sun Dec 19 01:51:02 UTC 2021
Modified Files:
src/sys/external/bsd/common/include/linux: workqueue.h
src/sys/external/bsd/common/linux: linux_work.c
Log Message:
alloc_workqueue
To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 \
src/sys/external/bsd/common/include/linux/workqueue.h
cvs rdiff -u -r1.51 -r1.52 src/sys/external/bsd/common/linux/linux_work.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/common/include/linux/workqueue.h
diff -u src/sys/external/bsd/common/include/linux/workqueue.h:1.20 src/sys/external/bsd/common/include/linux/workqueue.h:1.21
--- src/sys/external/bsd/common/include/linux/workqueue.h:1.20 Sun Dec 19 01:41:12 2021
+++ src/sys/external/bsd/common/include/linux/workqueue.h Sun Dec 19 01:51:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: workqueue.h,v 1.20 2021/12/19 01:41:12 riastradh Exp $ */
+/* $NetBSD: workqueue.h,v 1.21 2021/12/19 01:51:02 riastradh Exp $ */
/*-
* Copyright (c) 2013, 2018 The NetBSD Foundation, Inc.
@@ -39,6 +39,7 @@
#define INIT_DELAYED_WORK linux_INIT_DELAYED_WORK
#define INIT_WORK linux_INIT_WORK
+#define alloc_workqueue linux_alloc_workqueue
#define alloc_ordered_workqueue linux_alloc_ordered_workqueue
#define cancel_delayed_work linux_cancel_delayed_work
#define cancel_delayed_work_sync linux_cancel_delayed_work_sync
@@ -85,6 +86,11 @@ struct delayed_work {
} dw_state;
};
+#define WQ_FREEZABLE __BIT(0)
+#define WQ_HIGHPRI __BIT(1)
+#define WQ_MEM_RECLAIM __BIT(2)
+#define WQ_UNBOUND __BIT(3)
+
static inline struct delayed_work *
to_delayed_work(struct work_struct *work)
{
@@ -103,6 +109,8 @@ void linux_workqueue_fini(void);
alloc_ordered_workqueue((name), 0)
struct workqueue_struct *
+ alloc_workqueue(const char *, int, unsigned);
+struct workqueue_struct *
alloc_ordered_workqueue(const char *, int);
void destroy_workqueue(struct workqueue_struct *);
void flush_workqueue(struct workqueue_struct *);
Index: src/sys/external/bsd/common/linux/linux_work.c
diff -u src/sys/external/bsd/common/linux/linux_work.c:1.51 src/sys/external/bsd/common/linux/linux_work.c:1.52
--- src/sys/external/bsd/common/linux/linux_work.c:1.51 Sun Dec 19 01:24:13 2021
+++ src/sys/external/bsd/common/linux/linux_work.c Sun Dec 19 01:51:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_work.c,v 1.51 2021/12/19 01:24:13 riastradh Exp $ */
+/* $NetBSD: linux_work.c,v 1.52 2021/12/19 01:51:02 riastradh Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.51 2021/12/19 01:24:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.52 2021/12/19 01:51:02 riastradh Exp $");
#include <sys/types.h>
#include <sys/atomic.h>
@@ -224,19 +224,20 @@ linux_workqueue_fini(void)
*/
/*
- * alloc_ordered_workqueue(name, flags)
+ * alloc_workqueue(name, flags, max_active)
*
- * Create a workqueue of the given name. No flags are currently
- * defined. Return NULL on failure, pointer to struct
- * workqueue_struct object on success.
+ * Create a workqueue of the given name. max_active is the
+ * maximum number of work items in flight, or 0 for the default.
+ * Return NULL on failure, pointer to struct workqueue_struct
+ * object on success.
*/
struct workqueue_struct *
-alloc_ordered_workqueue(const char *name, int flags)
+alloc_workqueue(const char *name, int flags, unsigned max_active)
{
struct workqueue_struct *wq;
int error;
- KASSERT(flags == 0);
+ KASSERT(max_active == 0 || max_active == 1);
wq = kmem_zalloc(sizeof(*wq), KM_SLEEP);
@@ -270,6 +271,18 @@ fail0: KASSERT(TAILQ_EMPTY(&wq->wq_dqueu
}
/*
+ * alloc_ordered_workqueue(name, flags)
+ *
+ * Same as alloc_workqueue(name, flags, 1).
+ */
+struct workqueue_struct *
+alloc_ordered_workqueue(const char *name, int flags)
+{
+
+ return alloc_workqueue(name, flags, 1);
+}
+
+/*
* destroy_workqueue(wq)
*
* Destroy a workqueue created with wq. Cancel any pending