Changes in kernel/generic/src/mm/as.c [d99c1d2:1624aae] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/as.c
rd99c1d2 r1624aae 1 1 /* 2 * Copyright (c) 20 01-2006Jakub Jermar2 * Copyright (c) 2010 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 152 152 * reference count never drops to zero. 153 153 */ 154 a tomic_set(&AS_KERNEL->refcount, 1);154 as_hold(AS_KERNEL); 155 155 } 156 156 … … 200 200 DEADLOCK_PROBE_INIT(p_asidlock); 201 201 202 ASSERT(as != AS); 202 203 ASSERT(atomic_get(&as->refcount) == 0); 203 204 204 205 /* 205 * Since there is no reference to this a rea,206 * it is safe not tolock its mutex.206 * Since there is no reference to this address space, it is safe not to 207 * lock its mutex. 207 208 */ 208 209 … … 225 226 preemption_enable(); /* Interrupts disabled, enable preemption */ 226 227 if (as->asid != ASID_INVALID && as != AS_KERNEL) { 227 if (as != AS && as->cpu_refcount == 0)228 if (as->cpu_refcount == 0) 228 229 list_remove(&as->inactive_as_with_asid_link); 229 230 asid_put(as->asid); … … 258 259 259 260 slab_free(as_slab, as); 261 } 262 263 /** Hold a reference to an address space. 264 * 265 * Holding a reference to an address space prevents destruction of that address 266 * space. 267 * 268 * @param a Address space to be held. 269 */ 270 void as_hold(as_t *as) 271 { 272 atomic_inc(&as->refcount); 273 } 274 275 /** Release a reference to an address space. 276 * 277 * The last one to release a reference to an address space destroys the address 278 * space. 279 * 280 * @param a Address space to be released. 281 */ 282 void as_release(as_t *as) 283 { 284 if (atomic_predec(&as->refcount) == 0) 285 as_destroy(as); 260 286 } 261 287
Note:
See TracChangeset
for help on using the changeset viewer.