X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Fcommon%2Feal_common_memzone.c;h=524a61c8133e3879372728f13e9fa6a971e3b44a;hb=3031749c2df04a63cdcef186dcce3781e61436e8;hp=a1fcdfdfd0003780623089b9856f828f4b479d57;hpb=40b966a211ab71e96b8e155d9058f224e7b5bbf6;p=dpdk.git diff --git a/lib/librte_eal/common/eal_common_memzone.c b/lib/librte_eal/common/eal_common_memzone.c index a1fcdfdfd0..524a61c813 100644 --- a/lib/librte_eal/common/eal_common_memzone.c +++ b/lib/librte_eal/common/eal_common_memzone.c @@ -1,13 +1,13 @@ /*- * BSD LICENSE - * + * * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright @@ -17,7 +17,7 @@ * * Neither the name of Intel Corporation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -70,7 +70,7 @@ memzone_lookup_thread_unsafe(const char *name) * zones and this function should be called at init only */ for (i = 0; i < RTE_MAX_MEMZONE && mcfg->memzone[i].addr != NULL; i++) { - if (!strncmp(name, mcfg->memzone[i].name, RTE_MEMZONE_NAMESIZE)) + if (!strncmp(name, mcfg->memzone[i].name, RTE_MEMZONE_NAMESIZE)) return &mcfg->memzone[i]; } @@ -199,6 +199,7 @@ memzone_reserve_aligned_thread_unsafe(const char *name, size_t len, /* bad socket ID */ if (socket_id != SOCKET_ID_ANY && + free_memseg[i].socket_id != SOCKET_ID_ANY && socket_id != free_memseg[i].socket_id) continue; @@ -259,9 +260,6 @@ memzone_reserve_aligned_thread_unsafe(const char *name, size_t len, return memzone_reserve_aligned_thread_unsafe(name, len, socket_id, 0, align, bound); - RTE_LOG(ERR, EAL, "%s(%s, %zu, %d): " - "No appropriate segment found\n", - __func__, name, requested_len, socket_id); rte_errno = ENOMEM; return NULL; } @@ -375,7 +373,7 @@ rte_memzone_lookup(const char *name) const struct rte_memzone *memzone = NULL; mcfg = rte_eal_get_configuration()->mem_config; - + rte_rwlock_read_lock(&mcfg->mlock); memzone = memzone_lookup_thread_unsafe(name); @@ -387,7 +385,7 @@ rte_memzone_lookup(const char *name) /* Dump all reserved memory zones on console */ void -rte_memzone_dump(void) +rte_memzone_dump(FILE *f) { struct rte_mem_config *mcfg; unsigned i = 0; @@ -400,7 +398,7 @@ rte_memzone_dump(void) for (i=0; imemzone[i].addr == NULL) break; - printf("Zone %u: name:<%s>, phys:0x%"PRIx64", len:0x%zx" + fprintf(f, "Zone %u: name:<%s>, phys:0x%"PRIx64", len:0x%zx" ", virt:%p, socket_id:%"PRId32", flags:%"PRIx32"\n", i, mcfg->memzone[i].name, mcfg->memzone[i].phys_addr, @@ -466,7 +464,7 @@ rte_eal_memzone_init(void) /* mirror the runtime memsegs from config */ free_memseg = mcfg->free_memseg; - + /* secondary processes don't need to initialise anything */ if (rte_eal_process_type() == RTE_PROC_SECONDARY) return 0; @@ -507,3 +505,20 @@ rte_eal_memzone_init(void) return 0; } + +/* Walk all reserved memory zones */ +void rte_memzone_walk(void (*func)(const struct rte_memzone *, void *), + void *arg) +{ + struct rte_mem_config *mcfg; + unsigned i; + + mcfg = rte_eal_get_configuration()->mem_config; + + rte_rwlock_read_lock(&mcfg->mlock); + for (i=0; imemzone[i].addr != NULL) + (*func)(&mcfg->memzone[i], arg); + } + rte_rwlock_read_unlock(&mcfg->mlock); +}