Sat Sep 9 00:15:09 2023 UTC ()
Revert "once(9): Assert sleepable in RUN_ONCE, unconditionally."

This would be nice but it'll break too many things for the moment.


(riastradh)
diff -r1.8 -r1.9 src/sys/sys/once.h
diff -r1.303 -r1.304 src/sys/sys/systm.h

cvs diff -r1.8 -r1.9 src/sys/sys/once.h (expand / switch to unified diff)

--- src/sys/sys/once.h 2023/09/08 23:25:39 1.8
+++ src/sys/sys/once.h 2023/09/09 00:15:09 1.9
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: once.h,v 1.8 2023/09/08 23:25:39 riastradh Exp $ */ 1/* $NetBSD: once.h,v 1.9 2023/09/09 00:15:09 riastradh Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c)2005 YAMAMOTO Takashi, 4 * Copyright (c)2005 YAMAMOTO Takashi,
5 * Copyright (c)2008 Antti Kantee, 5 * Copyright (c)2008 Antti Kantee,
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
8 * Redistribution and use in source and binary forms, with or without 8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions 9 * modification, are permitted provided that the following conditions
10 * are met: 10 * are met:
11 * 1. Redistributions of source code must retain the above copyright 11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer. 12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright 13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the 14 * notice, this list of conditions and the following disclaimer in the
@@ -20,43 +20,40 @@ @@ -20,43 +20,40 @@
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE. 27 * SUCH DAMAGE.
28 */ 28 */
29 29
30#ifndef _SYS_ONCE_H_ 30#ifndef _SYS_ONCE_H_
31#define _SYS_ONCE_H_ 31#define _SYS_ONCE_H_
32 32
33#include <sys/stdint.h> 
34#include <sys/systm.h> 
35 
36typedef struct { 33typedef struct {
37 int o_error; 34 int o_error;
38 uint16_t o_refcnt; 35 uint16_t o_refcnt;
39 uint16_t o_status; 36 uint16_t o_status;
40#define ONCE_VIRGIN 0 37#define ONCE_VIRGIN 0
41#define ONCE_RUNNING 1 38#define ONCE_RUNNING 1
42#define ONCE_DONE 2 39#define ONCE_DONE 2
43} once_t; 40} once_t;
44 41
45void once_init(void); 42void once_init(void);
46int _init_once(once_t *, int (*)(void)); 43int _init_once(once_t *, int (*)(void));
47void _fini_once(once_t *, void (*)(void)); 44void _fini_once(once_t *, void (*)(void));
48 45
49#define ONCE_DECL(o) \ 46#define ONCE_DECL(o) \
50 once_t (o) = { \ 47 once_t (o) = { \
51 .o_status = 0, \ 48 .o_status = 0, \
52 .o_refcnt = 0, \ 49 .o_refcnt = 0, \
53 }; 50 };
54 51
55#define RUN_ONCE(o, fn) \ 52#define RUN_ONCE(o, fn) \
56 (ASSERT_SLEEPABLE(), __predict_true((o)->o_status == ONCE_DONE) ? \ 53 (__predict_true((o)->o_status == ONCE_DONE) ? \
57 ((o)->o_error) : _init_once((o), (fn))) 54 ((o)->o_error) : _init_once((o), (fn)))
58 55
59#define INIT_ONCE(o, fn) _init_once((o), (fn)) 56#define INIT_ONCE(o, fn) _init_once((o), (fn))
60#define FINI_ONCE(o, fn) _fini_once((o), (fn)) 57#define FINI_ONCE(o, fn) _fini_once((o), (fn))
61 58
62#endif /* _SYS_ONCE_H_ */ 59#endif /* _SYS_ONCE_H_ */

cvs diff -r1.303 -r1.304 src/sys/sys/systm.h (expand / switch to unified diff)

--- src/sys/sys/systm.h 2023/09/08 23:25:39 1.303
+++ src/sys/sys/systm.h 2023/09/09 00:15:09 1.304
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: systm.h,v 1.303 2023/09/08 23:25:39 riastradh Exp $ */ 1/* $NetBSD: systm.h,v 1.304 2023/09/09 00:15:09 riastradh Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 1982, 1988, 1991, 1993 4 * Copyright (c) 1982, 1988, 1991, 1993
5 * The Regents of the University of California. All rights reserved. 5 * The Regents of the University of California. All rights reserved.
6 * (c) UNIX System Laboratories, Inc. 6 * (c) UNIX System Laboratories, Inc.
7 * All or some portions of this file are derived from material licensed 7 * All or some portions of this file are derived from material licensed
8 * to the University of California by American Telephone and Telegraph 8 * to the University of California by American Telephone and Telegraph
9 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 9 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
10 * the permission of UNIX System Laboratories, Inc. 10 * the permission of UNIX System Laboratories, Inc.
11 * 11 *
12 * Redistribution and use in source and binary forms, with or without 12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions 13 * modification, are permitted provided that the following conditions
14 * are met: 14 * are met:
@@ -752,18 +752,18 @@ do { \ @@ -752,18 +752,18 @@ do { \
752#ifdef _KERNEL 752#ifdef _KERNEL
753/* Preemption control. */ 753/* Preemption control. */
754void kpreempt_disable(void); 754void kpreempt_disable(void);
755void kpreempt_enable(void); 755void kpreempt_enable(void);
756bool kpreempt_disabled(void); 756bool kpreempt_disabled(void);
757 757
758vaddr_t calc_cache_size(vsize_t , int, int); 758vaddr_t calc_cache_size(vsize_t , int, int);
759#endif 759#endif
760 760
761void assert_sleepable(void); 761void assert_sleepable(void);
762#if defined(DEBUG) 762#if defined(DEBUG)
763#define ASSERT_SLEEPABLE() assert_sleepable() 763#define ASSERT_SLEEPABLE() assert_sleepable()
764#else /* defined(DEBUG) */ 764#else /* defined(DEBUG) */
765#define ASSERT_SLEEPABLE() __nothing 765#define ASSERT_SLEEPABLE() do {} while (0)
766#endif /* defined(DEBUG) */ 766#endif /* defined(DEBUG) */
767 767
768 768
769#endif /* !_SYS_SYSTM_H_ */ 769#endif /* !_SYS_SYSTM_H_ */