static void mapping_del(struct mapping *m) { assert(m); mapping_del_children(m); assert(!m->c); if (m->p && m->p->c == m) { if (EMPTY_LIST(m, _s, s_)) m->p->c = NULL; else m->p->c = FIRST_LIST(m, _s, s_); } m->p = NULL; REM_LIST(m, _s, s_); __mapping_destroy(m); }
int mman_revoke_page(spdid_t spd, vaddr_t addr, int flags) { struct mapping *m; int ret = 0; LOCK(); m = mapping_lookup(spd, addr); if (!m) { ret = -1; /* -EINVAL */ goto done; } mapping_del_children(m); done: UNLOCK(); return ret; }