Print this page
9249 System crash dump to NVME not working
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Ryan Zezeski <rpz@joyent.com>
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/man/man9f/semaphore.9f.man.txt
+++ new/usr/src/man/man9f/semaphore.9f.man.txt
1 1 SEMAPHORE(9F) Kernel Functions for Drivers SEMAPHORE(9F)
2 2
3 -
4 -
5 3 NAME
6 - semaphore, sema_init, sema_destroy, sema_p, sema_p_sig, sema_v,
7 - sema_tryp - semaphore functions
4 + semaphore, sema_init, sema_destroy, sema_p, sema_p_sig, sema_v, sema_tryp
5 + - semaphore functions
8 6
9 7 SYNOPSIS
10 - #include <sys/ksynch.h>
8 + #include <sys/ksynch.h>
11 9
10 + void
11 + sema_init(ksema_t *sp, uint_t val, char *name, ksema_type_t type,
12 + void *arg);
12 13
14 + void
15 + sema_destroy(ksema_t *sp);
13 16
14 - void sema_init(ksema_t *sp, uint_t val, char *name, ksema_type_t type,
15 - void *arg);
17 + void
18 + sema_p(ksema_t *sp);
16 19
20 + void
21 + sema_v(ksema_t *sp);
17 22
18 - void sema_destroy(ksema_t *sp);
23 + int
24 + sema_p_sig(ksema_t *sp);
19 25
26 + int
27 + sema_tryp(ksema_t *sp);
20 28
21 - void sema_p(ksema_t *sp);
22 -
23 -
24 - void sema_v(ksema_t *sp);
25 -
26 -
27 - int sema_p_sig(ksema_t *sp);
28 -
29 -
30 - int sema_tryp(ksema_t *sp);
31 -
32 -
33 29 INTERFACE LEVEL
34 - Solaris DDI specific (Solaris DDI).
30 + illumos DDI specific (illumos DDI).
35 31
36 32 PARAMETERS
37 - sp
38 - A pointer to a semaphore, type ksema_t.
33 + sp A pointer to a semaphore, type ksema_t.
39 34
35 + val Initial value for semaphore.
40 36
41 - val
42 - Initial value for semaphore.
37 + name Descriptive string. This is obsolete and should be NULL.
38 + (Non-NULL strings are legal, but they are a waste of kernel
39 + memory.)
43 40
41 + type Variant type of the semaphore. Currently, only SEMA_DRIVER is
42 + supported.
44 43
45 - name
46 - Descriptive string. This is obsolete and should be NULL.
47 - (Non-NULL strings are legal, but they are a waste of kernel
48 - memory.)
44 + arg Type-specific argument; should be NULL.
49 45
50 -
51 - type
52 - Variant type of the semaphore. Currently, only SEMA_DRIVER is
53 - supported.
54 -
55 -
56 - arg
57 - Type-specific argument; should be NULL.
58 -
59 -
60 46 DESCRIPTION
61 - These functions implement counting semaphores as described by Dijkstra.
62 - A semaphore has a value which is atomically decremented by sema_p() and
63 - atomically incremented by sema_v(). The value must always be greater
64 - than or equal to zero. If sema_p() is called and the value is zero, the
65 - calling thread is blocked until another thread performs a sema_v()
66 - operation on the semaphore.
47 + These functions implement counting semaphores as described by Dijkstra.
48 + A semaphore has a value which is atomically decremented by sema_p() and
49 + atomically incremented by sema_v(). The value must always be greater
50 + than or equal to zero. If sema_p() is called and the value is zero, the
51 + calling thread is blocked until another thread performs a sema_v()
52 + operation on the semaphore.
67 53
54 + Semaphores are initialized by calling sema_init(). The argument, val,
55 + gives the initial value for the semaphore. The semaphore storage is
56 + provided by the caller but more may be dynamically allocated, if
57 + necessary, by sema_init(). For this reason, sema_destroy() should be
58 + called before deallocating the storage containing the semaphore.
68 59
69 - Semaphores are initialized by calling sema_init(). The argument, val,
70 - gives the initial value for the semaphore. The semaphore storage is
71 - provided by the caller but more may be dynamically allocated, if
72 - necessary, by sema_init(). For this reason, sema_destroy() should be
73 - called before deallocating the storage containing the semaphore.
60 + The sema_p_sig() function decrements the semaphore, as does sema_p().
61 + However, if the semaphore value is zero, sema_p_sig() will return without
62 + decrementing the value if a signal (that is, from kill(2)) is pending for
63 + the thread.
74 64
65 + The sema_tryp() function will decrement the semaphore value only if it is
66 + greater than zero, and will not block.
75 67
76 - The sema_p_sig() function decrements the semaphore, as does sema_p().
77 - However, if the semaphore value is zero, sema_p_sig() will return
78 - without decrementing the value if a signal (that is, from kill(2)) is
79 - pending for the thread.
80 -
81 -
82 - The sema_tryp() function will decrement the semaphore value only if it
83 - is greater than zero, and will not block.
84 -
85 -RETURN VALUES
86 - 0
87 - sema_tryp() could not decrement the semaphore value because it was
88 - zero.
89 -
90 -
91 - 1
92 - sema_p_sig() was not able to decrement the semaphore value and
93 - detected a pending signal.
94 -
95 -
96 68 CONTEXT
97 - These functions can be called from user, interrupt, or kernel context,
98 - except for sema_init() and sema_destroy(), which can be called from
99 - user or kernel context only. None of these functions can be called from
100 - a high-level interrupt context. In most cases, sema_v() and sema_p()
101 - should not be called from any interrupt context.
69 + These functions can be called from user, interrupt, or kernel context,
70 + except for sema_init() and sema_destroy(), which can be called from user
71 + or kernel context only. None of these functions can be called from a
72 + high-level interrupt context. In most cases, sema_v() and sema_p()
73 + should not be called from any interrupt context.
102 74
75 + If sema_p() is used from interrupt context, lower-priority interrupts
76 + will not be serviced during the wait. This means that if the thread that
77 + will eventually perform the sema_v() becomes blocked on anything that
78 + requires the lower-priority interrupt, the system will hang.
103 79
104 - If sema_p() is used from interrupt context, lower-priority interrupts
105 - will not be serviced during the wait. This means that if the thread
106 - that will eventually perform the sema_v() becomes blocked on anything
107 - that requires the lower-priority interrupt, the system will hang.
80 + For example, the thread that will perform the sema_v() may need to first
81 + allocate memory. This memory allocation may require waiting for paging
82 + I/O to complete, which may require a lower-priority disk or network
83 + interrupt to be serviced. In general, situations like this are hard to
84 + predict, so it is advisable to avoid waiting on semaphores or condition
85 + variables in an interrupt context.
108 86
87 + Similar to many other synchronization mechanisms, semaphores should not
88 + be used in any code path that requires synchronization while handling
89 + system panic, at which time many of the semaphore operations become no-
90 + ops.
109 91
110 - For example, the thread that will perform the sema_v() may need to
111 - first allocate memory. This memory allocation may require waiting for
112 - paging I/O to complete, which may require a lower-priority disk or
113 - network interrupt to be serviced. In general, situations like this are
114 - hard to predict, so it is advisable to avoid waiting on semaphores or
115 - condition variables in an interrupt context.
92 +RETURN VALUES
93 + 0 sema_tryp() could not decrement the semaphore value because it
94 + was zero.
116 95
96 + 1 sema_p_sig() was not able to decrement the semaphore value and
97 + detected a pending signal.
98 +
117 99 SEE ALSO
118 - kill(2), condvar(9F), mutex(9F)
100 + kill(2), condvar(9F), mutex(9F)
119 101
102 + Writing Device Drivers
120 103
121 - Writing Device Drivers
122 -
123 -
124 -
125 - May 7, 1997 SEMAPHORE(9F)
104 +illumos July 30, 2018 illumos
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX