git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tailq: move to dynamic tailq
[dpdk.git]
/
lib
/
librte_eal
/
linuxapp
/
eal
/
eal_ivshmem.c
diff --git
a/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
b/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
index
4ad76a7
..
2deaeb7
100644
(file)
--- a/
lib/librte_eal/linuxapp/eal/eal_ivshmem.c
+++ b/
lib/librte_eal/linuxapp/eal/eal_ivshmem.c
@@
-50,9
+50,9
@@
#include <rte_errno.h>
#include <rte_ring.h>
#include <rte_mempool.h>
#include <rte_errno.h>
#include <rte_ring.h>
#include <rte_mempool.h>
+#include <rte_malloc.h>
#include <rte_common.h>
#include <rte_ivshmem.h>
#include <rte_common.h>
#include <rte_ivshmem.h>
-#include <rte_tailq_elem.h>
#include "eal_internal_cfg.h"
#include "eal_private.h"
#include "eal_internal_cfg.h"
#include "eal_private.h"
@@
-61,7
+61,6
@@
#define PCI_DEVICE_ID_IVSHMEM 0x1110
#define IVSHMEM_MAGIC 0x0BADC0DE
#define PCI_DEVICE_ID_IVSHMEM 0x1110
#define IVSHMEM_MAGIC 0x0BADC0DE
-#define IVSHMEM_METADATA_SIZE 0x1000
#define IVSHMEM_RESOURCE_PATH "/sys/bus/pci/devices/%04x:%02x:%02x.%x/resource2"
#define IVSHMEM_CONFIG_PATH "/var/run/.%s_ivshmem_config"
#define IVSHMEM_RESOURCE_PATH "/sys/bus/pci/devices/%04x:%02x:%02x.%x/resource2"
#define IVSHMEM_CONFIG_PATH "/var/run/.%s_ivshmem_config"
@@
-101,7
+100,7
@@
static int memseg_idx;
static int pagesz;
/* Tailq heads to add rings to */
static int pagesz;
/* Tailq heads to add rings to */
-TAILQ_HEAD(rte_ring_list, rte_
ring
);
+TAILQ_HEAD(rte_ring_list, rte_
tailq_entry
);
/*
* Utility functions
/*
* Utility functions
@@
-364,7
+363,7
@@
read_metadata(char * path, int path_len, int fd, uint64_t flen)
sizeof(struct rte_ivshmem_metadata_entry));
/* copy path */
sizeof(struct rte_ivshmem_metadata_entry));
/* copy path */
-
rte_
snprintf(ivshmem_config->segment[idx].path, path_len, "%s", path);
+ snprintf(ivshmem_config->segment[idx].path, path_len, "%s", path);
idx++;
}
idx++;
}
@@
-469,7
+468,7
@@
create_shared_config(void)
int fd;
/* build ivshmem config file path */
int fd;
/* build ivshmem config file path */
-
rte_
snprintf(path, sizeof(path), IVSHMEM_CONFIG_PATH,
+ snprintf(path, sizeof(path), IVSHMEM_CONFIG_PATH,
internal_config.hugefile_prefix);
fd = open(path, O_CREAT | O_RDWR, 0600);
internal_config.hugefile_prefix);
fd = open(path, O_CREAT | O_RDWR, 0600);
@@
-520,7
+519,7
@@
open_shared_config(void)
int fd;
/* build ivshmem config file path */
int fd;
/* build ivshmem config file path */
-
rte_
snprintf(path, sizeof(path), IVSHMEM_CONFIG_PATH,
+ snprintf(path, sizeof(path), IVSHMEM_CONFIG_PATH,
internal_config.hugefile_prefix);
fd = open(path, O_RDONLY);
internal_config.hugefile_prefix);
fd = open(path, O_RDONLY);
@@
-754,6
+753,7
@@
rte_eal_ivshmem_obj_init(void)
struct ivshmem_segment * seg;
struct rte_memzone * mz;
struct rte_ring * r;
struct ivshmem_segment * seg;
struct rte_memzone * mz;
struct rte_ring * r;
+ struct rte_tailq_entry *te;
unsigned i, ms, idx;
uint64_t offset;
unsigned i, ms, idx;
uint64_t offset;
@@
-763,8
+763,8
@@
rte_eal_ivshmem_obj_init(void)
return 0;
/* check that we have an initialised ring tail queue */
return 0;
/* check that we have an initialised ring tail queue */
- if ((ring_list =
-
RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_RING, rte_ring_list))
== NULL) {
+ ring_list = RTE_TAILQ_LOOKUP(RTE_TAILQ_RING_NAME, rte_ring_list);
+
if (ring_list
== NULL) {
RTE_LOG(ERR, EAL, "No rte_ring tailq found!\n");
return -1;
}
RTE_LOG(ERR, EAL, "No rte_ring tailq found!\n");
return -1;
}
@@
-808,6
+808,8
@@
rte_eal_ivshmem_obj_init(void)
mcfg->memzone_idx++;
}
mcfg->memzone_idx++;
}
+ rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);
+
/* find rings */
for (i = 0; i < mcfg->memzone_idx; i++) {
mz = &mcfg->memzone[i];
/* find rings */
for (i = 0; i < mcfg->memzone_idx; i++) {
mz = &mcfg->memzone[i];
@@
-819,10
+821,19
@@
rte_eal_ivshmem_obj_init(void)
r = (struct rte_ring*) (mz->addr_64);
r = (struct rte_ring*) (mz->addr_64);
- TAILQ_INSERT_TAIL(ring_list, r, next);
+ te = rte_zmalloc("RING_TAILQ_ENTRY", sizeof(*te), 0);
+ if (te == NULL) {
+ RTE_LOG(ERR, EAL, "Cannot allocate ring tailq entry!\n");
+ return -1;
+ }
+
+ te->data = (void *) r;
+
+ TAILQ_INSERT_TAIL(ring_list, te, next);
RTE_LOG(DEBUG, EAL, "Found ring: '%s' at %p\n", r->name, mz->addr);
}
RTE_LOG(DEBUG, EAL, "Found ring: '%s' at %p\n", r->name, mz->addr);
}
+ rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
#ifdef RTE_LIBRTE_IVSHMEM_DEBUG
rte_memzone_dump(stdout);
#ifdef RTE_LIBRTE_IVSHMEM_DEBUG
rte_memzone_dump(stdout);
@@
-869,7
+880,7
@@
int rte_eal_ivshmem_init(void)
continue;
/* construct pci device path */
continue;
/* construct pci device path */
-
rte_
snprintf(path, sizeof(path), IVSHMEM_RESOURCE_PATH,
+ snprintf(path, sizeof(path), IVSHMEM_RESOURCE_PATH,
dev->addr.domain, dev->addr.bus, dev->addr.devid,
dev->addr.function);
dev->addr.domain, dev->addr.bus, dev->addr.devid,
dev->addr.function);
@@
-916,9
+927,9
@@
int rte_eal_ivshmem_init(void)
dev->addr.bus, dev->addr.devid, dev->addr.function);
ivshmem_config->pci_devs[ivshmem_config->pci_devs_idx].ioremap_addr = res->phys_addr;
dev->addr.bus, dev->addr.devid, dev->addr.function);
ivshmem_config->pci_devs[ivshmem_config->pci_devs_idx].ioremap_addr = res->phys_addr;
-
rte_
snprintf(ivshmem_config->pci_devs[ivshmem_config->pci_devs_idx].path,
+ snprintf(ivshmem_config->pci_devs[ivshmem_config->pci_devs_idx].path,
sizeof(ivshmem_config->pci_devs[ivshmem_config->pci_devs_idx].path),
sizeof(ivshmem_config->pci_devs[ivshmem_config->pci_devs_idx].path),
- path);
+
"%s",
path);
ivshmem_config->pci_devs_idx++;
}
ivshmem_config->pci_devs_idx++;
}