Bug Summary

File:kern/subr_suspend.c
Warning:line 63, column 2
Value stored to 'error' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple amd64-unknown-openbsd7.4 -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name subr_suspend.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -relaxed-aliasing -ffp-contract=on -fno-rounding-math -mconstructor-aliases -ffreestanding -mcmodel=kernel -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -target-feature -sse2 -target-feature -sse -target-feature -3dnow -target-feature -mmx -target-feature +save-args -target-feature +retpoline-external-thunk -disable-red-zone -no-implicit-float -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/src/sys/arch/amd64/compile/GENERIC.MP/obj -nostdsysteminc -nobuiltininc -resource-dir /usr/local/llvm16/lib/clang/16 -I /usr/src/sys -I /usr/src/sys/arch/amd64/compile/GENERIC.MP/obj -I /usr/src/sys/arch -I /usr/src/sys/dev/pci/drm/include -I /usr/src/sys/dev/pci/drm/include/uapi -I /usr/src/sys/dev/pci/drm/amd/include/asic_reg -I /usr/src/sys/dev/pci/drm/amd/include -I /usr/src/sys/dev/pci/drm/amd/amdgpu -I /usr/src/sys/dev/pci/drm/amd/display -I /usr/src/sys/dev/pci/drm/amd/display/include -I /usr/src/sys/dev/pci/drm/amd/display/dc -I /usr/src/sys/dev/pci/drm/amd/display/amdgpu_dm -I /usr/src/sys/dev/pci/drm/amd/pm/inc -I /usr/src/sys/dev/pci/drm/amd/pm/legacy-dpm -I /usr/src/sys/dev/pci/drm/amd/pm/swsmu -I /usr/src/sys/dev/pci/drm/amd/pm/swsmu/inc -I /usr/src/sys/dev/pci/drm/amd/pm/swsmu/smu11 -I /usr/src/sys/dev/pci/drm/amd/pm/swsmu/smu12 -I /usr/src/sys/dev/pci/drm/amd/pm/swsmu/smu13 -I /usr/src/sys/dev/pci/drm/amd/pm/powerplay/inc -I /usr/src/sys/dev/pci/drm/amd/pm/powerplay/hwmgr -I /usr/src/sys/dev/pci/drm/amd/pm/powerplay/smumgr -I /usr/src/sys/dev/pci/drm/amd/pm/swsmu/inc -I /usr/src/sys/dev/pci/drm/amd/pm/swsmu/inc/pmfw_if -I /usr/src/sys/dev/pci/drm/amd/display/dc/inc -I /usr/src/sys/dev/pci/drm/amd/display/dc/inc/hw -I /usr/src/sys/dev/pci/drm/amd/display/dc/clk_mgr -I /usr/src/sys/dev/pci/drm/amd/display/modules/inc -I /usr/src/sys/dev/pci/drm/amd/display/modules/hdcp -I /usr/src/sys/dev/pci/drm/amd/display/dmub/inc -I /usr/src/sys/dev/pci/drm/i915 -D DDB -D DIAGNOSTIC -D KTRACE -D ACCOUNTING -D KMEMSTATS -D PTRACE -D POOL_DEBUG -D CRYPTO -D SYSVMSG -D SYSVSEM -D SYSVSHM -D UVM_SWAP_ENCRYPT -D FFS -D FFS2 -D FFS_SOFTUPDATES -D UFS_DIRHASH -D QUOTA -D EXT2FS -D MFS -D NFSCLIENT -D NFSSERVER -D CD9660 -D UDF -D MSDOSFS -D FIFO -D FUSE -D SOCKET_SPLICE -D TCP_ECN -D TCP_SIGNATURE -D INET6 -D IPSEC -D PPP_BSDCOMP -D PPP_DEFLATE -D PIPEX -D MROUTING -D MPLS -D BOOT_CONFIG -D USER_PCICONF -D APERTURE -D MTRR -D NTFS -D SUSPEND -D HIBERNATE -D PCIVERBOSE -D USBVERBOSE -D WSDISPLAY_COMPAT_USL -D WSDISPLAY_COMPAT_RAWKBD -D WSDISPLAY_DEFAULTSCREENS=6 -D X86EMU -D ONEWIREVERBOSE -D MULTIPROCESSOR -D MAXUSERS=80 -D _KERNEL -O2 -Wno-pointer-sign -Wno-address-of-packed-member -Wno-constant-conversion -Wno-unused-but-set-variable -Wno-gnu-folding-constant -fdebug-compilation-dir=/usr/src/sys/arch/amd64/compile/GENERIC.MP/obj -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fcf-protection=branch -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -o /home/ben/Projects/scan/2024-01-11-110808-61670-1 -x c /usr/src/sys/kern/subr_suspend.c
1/* $OpenBSD: subr_suspend.c,v 1.16 2023/07/12 18:40:06 cheloha Exp $ */
2/*
3 * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
4 * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include <sys/param.h>
20#include <sys/systm.h>
21#include <sys/buf.h>
22#include <sys/clockintr.h>
23#include <sys/reboot.h>
24#include <sys/sensors.h>
25#include <sys/sysctl.h>
26#include <sys/mount.h>
27#include <sys/syscallargs.h>
28#include <dev/wscons/wsdisplayvar.h>
29#ifdef GPROF
30#include <sys/gmon.h>
31#endif
32#ifdef HIBERNATE1
33#include <sys/hibernate.h>
34#endif
35
36#include "softraid.h"
37#include "wsdisplay.h"
38
39/* Number of (active) wakeup devices in the system. */
40u_int wakeup_devices;
41
42void
43device_register_wakeup(struct device *dev)
44{
45 wakeup_devices++;
46}
47
48int
49sleep_state(void *v, int sleepmode)
50{
51 int error, s;
52 extern int perflevel;
53 size_t rndbuflen;
54 char *rndbuf;
55#ifdef GPROF
56 int gmon_state;
57#endif
58#if NSOFTRAID1 > 0
59 extern void sr_quiesce(void);
60#endif
61
62top:
63 error = ENXIO6;
Value stored to 'error' is never read
64 rndbuf = NULL((void *)0);
65 rndbuflen = 0;
66
67 if (sleepmode == SLEEP_SUSPEND0x01 && wakeup_devices == 0)
68 return EOPNOTSUPP45;
69
70 if (sleep_showstate(v, sleepmode))
71 return EOPNOTSUPP45;
72#if NWSDISPLAY1 > 0
73 wsdisplay_suspend();
74#endif
75 stop_periodic_resettodr();
76
77#ifdef HIBERNATE1
78 if (sleepmode == SLEEP_HIBERNATE0x02) {
79 /*
80 * Discard useless memory to reduce fragmentation,
81 * and attempt to create a hibernate work area
82 */
83 hibernate_suspend_bufcache();
84 uvmpd_hibernate();
85 if (hibernate_alloc()) {
86 printf("failed to allocate hibernate memory\n");
87 sleep_abort(v);
88 error = ENOMEM12;
89 goto fail_hiballoc;
90 }
91 }
92#endif /* HIBERNATE */
93
94 sensor_quiesce();
95 if (config_suspend_all(DVACT_QUIESCE2)) {
96 sleep_abort(v);
97 error = EIO5;
98 goto fail_quiesce;
99 }
100
101 vfs_stall(curproc({struct cpu_info *__ci; asm volatile("movq %%gs:%P1,%0" : "=r"
(__ci) :"n" (__builtin_offsetof(struct cpu_info, ci_self)));
__ci;})->ci_curproc
, 1);
102#if NSOFTRAID1 > 0
103 sr_quiesce();
104#endif
105 bufq_quiesce();
106#ifdef MULTIPROCESSOR1
107 sched_stop_secondary_cpus();
108 KASSERT(CPU_IS_PRIMARY(curcpu()))((((({struct cpu_info *__ci; asm volatile("movq %%gs:%P1,%0" :
"=r" (__ci) :"n" (__builtin_offsetof(struct cpu_info, ci_self
))); __ci;}))->ci_flags & 0x0008)) ? (void)0 : __assert
("diagnostic ", "/usr/src/sys/kern/subr_suspend.c", 108, "CPU_IS_PRIMARY(curcpu())"
))
;
109#endif
110#ifdef GPROF
111 gmon_state = gmoninit;
112 gmoninit = 0;
113#endif
114#ifdef MULTIPROCESSOR1
115 sleep_mp();
116#endif
117
118#ifdef HIBERNATE1
119 if (sleepmode == SLEEP_HIBERNATE0x02) {
120 /*
121 * We've just done various forms of syncing to disk
122 * churned lots of memory dirty. We don't need to
123 * save that dirty memory to hibernate, so release it.
124 */
125 hibernate_suspend_bufcache();
126 uvmpd_hibernate();
127 }
128#endif /* HIBERNATE */
129
130 resettodr();
131
132 s = splhigh()splraise(0xd);
133 intr_disable(); /* PSL_I for resume; PIC/APIC broken until repair */
134 cold = 2; /* Force other code to delay() instead of tsleep() */
135
136 if (config_suspend_all(DVACT_SUSPEND3) != 0) {
137 sleep_abort(v);
138 error = EDEADLK11;
139 goto fail_suspend;
140 }
141 suspend_randomness();
142 if (sleep_setstate(v)) {
143 sleep_abort(v);
144 error = ENOTBLK15;
145 goto fail_pts;
146 }
147
148 if (sleepmode == SLEEP_SUSPEND0x01) {
149 /*
150 * XXX
151 * Flag to disk drivers that they should "power down" the disk
152 * when we get to DVACT_POWERDOWN.
153 */
154 boothowto |= RB_POWERDOWN0x01000;
155 config_suspend_all(DVACT_POWERDOWN6);
156 boothowto &= ~RB_POWERDOWN0x01000;
157
158 if (cpu_setperf != NULL((void *)0))
159 cpu_setperf(0);
160 }
161
162 error = gosleep(v);
163
164#ifdef HIBERNATE1
165 if (sleepmode == SLEEP_HIBERNATE0x02) {
166 uvm_pmr_dirty_everything();
167 hib_getentropy(&rndbuf, &rndbuflen);
168 }
169#endif /* HIBERNATE */
170
171fail_pts:
172 config_suspend_all(DVACT_RESUME4);
173
174fail_suspend:
175 cold = 0;
176 intr_enable();
177 splx(s)spllower(s);
178
179 inittodr(gettime());
180 clockintr_cpu_init(NULL((void *)0));
181 clockintr_trigger();
182
183 sleep_resume(v);
184 resume_randomness(rndbuf, rndbuflen);
185#ifdef MULTIPROCESSOR1
186 resume_mp();
187#endif
188#ifdef GPROF
189 gmoninit = gmon_state;
190#endif
191#ifdef MULTIPROCESSOR1
192 sched_start_secondary_cpus();
193#endif
194 vfs_stall(curproc({struct cpu_info *__ci; asm volatile("movq %%gs:%P1,%0" : "=r"
(__ci) :"n" (__builtin_offsetof(struct cpu_info, ci_self)));
__ci;})->ci_curproc
, 0);
195 bufq_restart();
196
197fail_quiesce:
198 config_suspend_all(DVACT_WAKEUP5);
199 sensor_restart();
200
201#ifdef HIBERNATE1
202 if (sleepmode == SLEEP_HIBERNATE0x02) {
203 hibernate_free();
204fail_hiballoc:
205 hibernate_resume_bufcache();
206 }
207#endif /* HIBERNATE */
208
209 start_periodic_resettodr();
210#if NWSDISPLAY1 > 0
211 wsdisplay_resume();
212#endif
213 sys_sync(curproc({struct cpu_info *__ci; asm volatile("movq %%gs:%P1,%0" : "=r"
(__ci) :"n" (__builtin_offsetof(struct cpu_info, ci_self)));
__ci;})->ci_curproc
, NULL((void *)0), NULL((void *)0));
214 if (cpu_setperf != NULL((void *)0))
215 cpu_setperf(perflevel); /* Restore hw.setperf */
216 if (suspend_finish(v) == EAGAIN35)
217 goto top;
218 return (error);
219}