/** * \file * \brief Management of inter-monitor bindings */ /* * Copyright (c) 2007, 2008, 2010, ETH Zurich. * All rights reserved. * * This file is distributed under the terms in the attached LICENSE file. * If you do not find this file, copies can be found by writing to: * ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group. */ #include // Array of monitor bindings indexed by core ID static struct intermon_state *bindings[MAX_COREID + 1]; // This is called when a new binding comes up errval_t intermon_binding_set(struct intermon_state *st) { assert(st != NULL); if (st->core_id > MAX_COREID) { return MON_ERR_INVALID_CORE_ID; } if (bindings[st->core_id] != NULL) { //printf("%s:%s:%d: overwrite binding (core_id=%"PRIuCOREID"), scary.\n", // __FILE__, __FUNCTION__, __LINE__, st->core_id); } bindings[st->core_id] = st; return SYS_ERR_OK; } errval_t intermon_binding_get(coreid_t coreid, struct intermon_binding **ret) { assert(ret != NULL); //printf("%s:%s:%d: coreid=%"PRIuCOREID"\n", __FILE__, __FUNCTION__, __LINE__, coreid); if (coreid > MAX_COREID) { *ret = NULL; return MON_ERR_INVALID_CORE_ID; } if (bindings[coreid] == NULL) { *ret = NULL; return MON_ERR_NO_MONITOR_FOR_CORE; } *ret = bindings[coreid]->binding; return SYS_ERR_OK; }