X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_kni%2Frte_kni.c;h=9dd5ebe0ec9ce5f9bce690c8e2d5610e6108691d;hb=fb3ae0951abd05ff0dc9616a650d81b89c5ac33b;hp=c9726d4f84b7a2800c31139e87001a86f5ff2c26;hpb=c6fd54f28c24ba0b3912a1746c4a2b810ffa89c4;p=dpdk.git diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c index c9726d4f84..9dd5ebe0ec 100644 --- a/lib/librte_kni/rte_kni.c +++ b/lib/librte_kni/rte_kni.c @@ -2,7 +2,7 @@ * Copyright(c) 2010-2014 Intel Corporation */ -#ifndef RTE_EXEC_ENV_LINUXAPP +#ifndef RTE_EXEC_ENV_LINUX #error "KNI is not supported" #endif @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include "rte_kni_fifo.h" #define MAX_MBUF_BURST_NUM 32 @@ -97,6 +97,11 @@ static volatile int kni_fd = -1; int rte_kni_init(unsigned int max_kni_ifaces __rte_unused) { + if (rte_eal_iova_mode() != RTE_IOVA_PA) { + RTE_LOG(ERR, KNI, "KNI requires IOVA as PA\n"); + return -1; + } + /* Check FD and open */ if (kni_fd < 0) { kni_fd = open("/dev/" KNI_DEVICE, O_RDWR); @@ -214,7 +219,7 @@ rte_kni_alloc(struct rte_mempool *pktmbuf_pool, return NULL; } - rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_lock(); kni = __rte_kni_get(conf->name); if (kni != NULL) { @@ -234,7 +239,7 @@ rte_kni_alloc(struct rte_mempool *pktmbuf_pool, goto kni_fail; } - snprintf(kni->name, RTE_KNI_NAMESIZE, "%s", conf->name); + strlcpy(kni->name, conf->name, RTE_KNI_NAMESIZE); if (ops) memcpy(&kni->ops, ops, sizeof(struct rte_kni_ops)); @@ -242,24 +247,15 @@ rte_kni_alloc(struct rte_mempool *pktmbuf_pool, kni->ops.port_id = UINT16_MAX; memset(&dev_info, 0, sizeof(dev_info)); - dev_info.bus = conf->addr.bus; - dev_info.devid = conf->addr.devid; - dev_info.function = conf->addr.function; - dev_info.vendor_id = conf->id.vendor_id; - dev_info.device_id = conf->id.device_id; dev_info.core_id = conf->core_id; dev_info.force_bind = conf->force_bind; dev_info.group_id = conf->group_id; dev_info.mbuf_size = conf->mbuf_size; dev_info.mtu = conf->mtu; - memcpy(dev_info.mac_addr, conf->mac_addr, ETHER_ADDR_LEN); + memcpy(dev_info.mac_addr, conf->mac_addr, RTE_ETHER_ADDR_LEN); - snprintf(dev_info.name, RTE_KNI_NAMESIZE, "%s", conf->name); - - RTE_LOG(INFO, KNI, "pci: %02x:%02x:%02x \t %02x:%02x\n", - dev_info.bus, dev_info.devid, dev_info.function, - dev_info.vendor_id, dev_info.device_id); + strlcpy(dev_info.name, conf->name, RTE_KNI_NAMESIZE); ret = kni_reserve_mz(kni); if (ret < 0) @@ -313,7 +309,7 @@ rte_kni_alloc(struct rte_mempool *pktmbuf_pool, kni_list = RTE_TAILQ_CAST(rte_kni_tailq.head, rte_kni_list); TAILQ_INSERT_TAIL(kni_list, te, next); - rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_unlock(); /* Allocate mbufs and then put them into alloc_q */ kni_allocate_mbufs(kni); @@ -327,7 +323,7 @@ mz_fail: kni_fail: rte_free(te); unlock: - rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_unlock(); return NULL; } @@ -390,7 +386,7 @@ rte_kni_release(struct rte_kni *kni) kni_list = RTE_TAILQ_CAST(rte_kni_tailq.head, rte_kni_list); - rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_lock(); TAILQ_FOREACH(te, kni_list, next) { if (te->data == kni) @@ -400,7 +396,7 @@ rte_kni_release(struct rte_kni *kni) if (te == NULL) goto unlock; - snprintf(dev_info.name, sizeof(dev_info.name), "%s", kni->name); + strlcpy(dev_info.name, kni->name, sizeof(dev_info.name)); if (ioctl(kni_fd, RTE_KNI_IOCTL_RELEASE, &dev_info) < 0) { RTE_LOG(ERR, KNI, "Fail to release kni device\n"); goto unlock; @@ -408,7 +404,7 @@ rte_kni_release(struct rte_kni *kni) TAILQ_REMOVE(kni_list, te, next); - rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_unlock(); /* mbufs in all fifo should be released, except request/response */ @@ -432,7 +428,7 @@ rte_kni_release(struct rte_kni *kni) return 0; unlock: - rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_write_unlock(); return -1; } @@ -451,7 +447,7 @@ kni_config_mac_address(uint16_t port_id, uint8_t mac_addr[]) RTE_LOG(INFO, KNI, "Configure mac address of %d", port_id); ret = rte_eth_dev_default_mac_addr_set(port_id, - (struct ether_addr *)mac_addr); + (struct rte_ether_addr *)mac_addr); if (ret < 0) RTE_LOG(ERR, KNI, "Failed to config mac_addr for port %d\n", port_id); @@ -483,7 +479,7 @@ int rte_kni_handle_request(struct rte_kni *kni) { unsigned ret; - struct rte_kni_request *req; + struct rte_kni_request *req = NULL; if (kni == NULL) return -1; @@ -649,11 +645,11 @@ rte_kni_get(const char *name) if (name == NULL || name[0] == '\0') return NULL; - rte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_read_lock(); kni = __rte_kni_get(name); - rte_rwlock_read_unlock(RTE_EAL_TAILQ_RWLOCK); + rte_mcfg_tailq_read_unlock(); return kni; } @@ -718,7 +714,7 @@ rte_kni_unregister_handlers(struct rte_kni *kni) return 0; } -int __rte_experimental +int rte_kni_update_link(struct rte_kni *kni, unsigned int linkup) { char path[64];