Bug Summary

File:obj-scan-build/mach-defpager/../../mach-defpager/wiring.c
Location:line 132, column 7
Description:Value stored to 'kr' is never read

Annotated Source Code

1/*
2 * Mach Operating System
3 * Copyright (c) 1991 Carnegie Mellon University
4 * All Rights Reserved.
5 *
6 * Permission to use, copy, modify and distribute this software and its
7 * documentation is hereby granted, provided that both the copyright
8 * notice and this permission notice appear in all copies of the
9 * software, derivative works or modified versions, and any portions
10 * thereof, and that both notices appear in supporting documentation.
11 *
12 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
13 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
14 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
15 *
16 * Carnegie Mellon requests users of this software to return to
17 *
18 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
19 * School of Computer Science
20 * Carnegie Mellon University
21 * Pittsburgh PA 15213-3890
22 *
23 * any improvements or extensions that they make and grant Carnegie Mellon
24 * the rights to redistribute these changes.
25 */
26/*
27 * Package to wire current task's memory.
28 */
29#include <mach.h>
30#include <mach_init.h>
31#include <mach/machine/vm_param.h>
32#include "default_pager.h"
33
34mach_port_t this_task; /* our task */
35mach_port_t priv_host_port = MACH_PORT_NULL((mach_port_t) 0);
36 /* the privileged host port */
37
38void
39wire_setup(host_priv)
40 mach_port_t host_priv;
41{
42 priv_host_port = host_priv;
43 this_task = mach_task_self()((__mach_task_self_ + 0));
44}
45
46void
47wire_memory(start, size, prot)
48 vm_address_t start;
49 vm_size_t size;
50 vm_prot_t prot;
51{
52 kern_return_t kr;
53
54 if (priv_host_port == MACH_PORT_NULL((mach_port_t) 0))
55 return;
56
57 kr = vm_wire(priv_host_port,
58 this_task,
59 start, size, prot);
60 if (kr != KERN_SUCCESS0)
61 panic("mem_wire: %d", kr);
62}
63
64void
65wire_thread()
66{
67 kern_return_t kr;
68
69 if (priv_host_port == MACH_PORT_NULL((mach_port_t) 0))
70 return;
71
72 kr = thread_wire(priv_host_port,
73 mach_thread_self(),
74 TRUE((boolean_t) 1));
75 if (kr != KERN_SUCCESS0)
76 panic("wire_thread: %d", kr);
77}
78
79void
80wire_all_memory()
81{
82 kern_return_t kr;
83 vm_offset_t address;
84 vm_size_t size;
85 vm_prot_t protection;
86 vm_prot_t max_protection;
87 vm_inherit_t inheritance;
88 boolean_t is_shared;
89 memory_object_name_t object;
90 vm_offset_t offset;
91
92 if (priv_host_port == MACH_PORT_NULL((mach_port_t) 0))
93 return;
94
95 /* iterate through all regions, wiring */
96 address = 0;
97 while (
98 (kr = vm_region(this_task, &address,
99 &size,
100 &protection,
101 &max_protection,
102 &inheritance,
103 &is_shared,
104 &object,
105 &offset))
106 == KERN_SUCCESS0)
107 {
108 if (MACH_PORT_VALID(object)(((object) != ((mach_port_t) 0)) && ((object) != ((mach_port_t
) ~0)))
)
109 (void) mach_port_deallocate(this_task, object);
110 if (protection != VM_PROT_NONE((vm_prot_t) 0x00))
111 {
112 /* The VM system cannot cope with a COW fault on another
113 unrelated virtual copy happening later when we have
114 wired down the original page. So we must touch all our
115 pages before wiring to make sure that only we will ever
116 use them. */
117 void *page;
118 if (!(protection & VM_PROT_WRITE((vm_prot_t) 0x02)))
119 {
120 kr = vm_protect(this_task, address, size,
121 0, max_protection);
122 }
123 for (page = (void *) address;
124 page < (void *) (address + size);
125 page += vm_page_size)
126 *(volatile int *) page = *(int *) page;
127
128 wire_memory(address, size, protection);
129
130 if (!(protection & VM_PROT_WRITE((vm_prot_t) 0x02)))
131 {
132 kr = vm_protect(this_task, address, size,
Value stored to 'kr' is never read
133 0, protection);
134 }
135 }
136 address += size;
137 }
138}
139
140/*
141 * Alias for vm_allocate to return wired memory.
142 */
143kern_return_t
144vm_allocate(task, address, size, anywhere)
145 task_t task;
146 vm_address_t *address;
147 vm_size_t size;
148 boolean_t anywhere;
149{
150 kern_return_t kr;
151
152 if (anywhere)
153 *address = VM_MIN_ADDRESS(0);
154 kr = vm_map(task,
155 address, size, (vm_offset_t) 0, anywhere,
156 MEMORY_OBJECT_NULL((mach_port_t) 0), (vm_offset_t)0, FALSE((boolean_t) 0),
157 VM_PROT_DEFAULT(((vm_prot_t) 0x01)|((vm_prot_t) 0x02)), VM_PROT_ALL(((vm_prot_t) 0x01)|((vm_prot_t) 0x02)|((vm_prot_t) 0x04)), VM_INHERIT_DEFAULT((vm_inherit_t) 1));
158 if (kr != KERN_SUCCESS0)
159 return kr;
160
161 if (task == this_task)
162 (void) vm_wire(priv_host_port, task, *address, size,
163 VM_PROT_DEFAULT(((vm_prot_t) 0x01)|((vm_prot_t) 0x02)));
164 return KERN_SUCCESS0;
165}
166
167/* Other versions of this function in libc... */
168kern_return_t
169__vm_allocate (task, address, size, anywhere)
170 task_t task;
171 vm_address_t *address;
172 vm_size_t size;
173 boolean_t anywhere;
174{
175 return vm_allocate (task, address, size, anywhere);
176}