From 22dcddaa3dcc82f88b4e9b97a6aa6deb632269f6 Mon Sep 17 00:00:00 2001 From: Matias Elo Date: Tue, 25 Sep 2018 13:52:15 +0300 Subject: linux-gen: pcapng: move global data into odp_global_data_rw_t Pcapng global variables are modified after global init. Signed-off-by: Matias Elo Signed-off-by: Maxim Uvarov --- platform/linux-generic/include/odp_global_data.h | 9 +++-- platform/linux-generic/odp_pcapng.c | 44 ++++++++++++------------ 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/platform/linux-generic/include/odp_global_data.h b/platform/linux-generic/include/odp_global_data.h index d647bb5e8..f3ddae418 100644 --- a/platform/linux-generic/include/odp_global_data.h +++ b/platform/linux-generic/include/odp_global_data.h @@ -58,17 +58,16 @@ struct odp_global_data_ro_t { int num_cpus_installed; config_t libconfig_default; config_t libconfig_runtime; - int inotify_pcapng_fd; - int inotify_watch_fd; - pthread_t inotify_thread; - int inotify_pcapng_is_running; odp_random_kind_t ipsec_rand_kind; }; /* Modifiable global data. Memory region is shared and synchronized amongst all * worker processes. */ struct odp_global_data_rw_t { - int dummy; + int inotify_pcapng_fd; + int inotify_watch_fd; + pthread_t inotify_thread; + int inotify_pcapng_is_running; }; extern struct odp_global_data_ro_t odp_global_ro; diff --git a/platform/linux-generic/odp_pcapng.c b/platform/linux-generic/odp_pcapng.c index 07784c17e..21fa7b2c5 100644 --- a/platform/linux-generic/odp_pcapng.c +++ b/platform/linux-generic/odp_pcapng.c @@ -120,13 +120,13 @@ static void *inotify_update(void *arg) while (1) { offset = 0; FD_ZERO(&rfds); - FD_SET(odp_global_ro.inotify_pcapng_fd, &rfds); + FD_SET(odp_global_rw->inotify_pcapng_fd, &rfds); time.tv_sec = 2; time.tv_usec = 0; - select(odp_global_ro.inotify_pcapng_fd + 1, &rfds, NULL, + select(odp_global_rw->inotify_pcapng_fd + 1, &rfds, NULL, NULL, &time); - if (FD_ISSET(odp_global_ro.inotify_pcapng_fd, &rfds)) { - rdlen = read(odp_global_ro.inotify_pcapng_fd, + if (FD_ISSET(odp_global_rw->inotify_pcapng_fd, &rfds)) { + rdlen = read(odp_global_rw->inotify_pcapng_fd, buffer, INOTIFY_BUF_LEN); while (offset < rdlen) { int qidx; @@ -219,23 +219,23 @@ int pcapng_prepare(pktio_entry_t *entry) } /* already running from a previous pktio */ - if (odp_global_ro.inotify_pcapng_is_running == 1) + if (odp_global_rw->inotify_pcapng_is_running == 1) return 0; - odp_global_ro.inotify_pcapng_fd = -1; - odp_global_ro.inotify_watch_fd = -1; + odp_global_rw->inotify_pcapng_fd = -1; + odp_global_rw->inotify_watch_fd = -1; - odp_global_ro.inotify_pcapng_fd = inotify_init(); - if (odp_global_ro.inotify_pcapng_fd == -1) { + odp_global_rw->inotify_pcapng_fd = inotify_init(); + if (odp_global_rw->inotify_pcapng_fd == -1) { ODP_ERR("can't init inotify. pcap disabled\n"); goto out_destroy; } - odp_global_ro.inotify_watch_fd = - inotify_add_watch(odp_global_ro.inotify_pcapng_fd, + odp_global_rw->inotify_watch_fd = + inotify_add_watch(odp_global_rw->inotify_pcapng_fd, PCAPNG_WATCH_DIR, IN_CLOSE | IN_OPEN); - if (odp_global_ro.inotify_watch_fd == -1) { + if (odp_global_rw->inotify_watch_fd == -1) { ODP_ERR("can't register inotify for %s. pcap disabled\n", strerror(errno)); goto out_destroy; @@ -243,12 +243,12 @@ int pcapng_prepare(pktio_entry_t *entry) /* create a thread to poll inotify triggers */ pthread_attr_init(&attr); - ret = pthread_create(&odp_global_ro.inotify_thread, &attr, + ret = pthread_create(&odp_global_rw->inotify_thread, &attr, inotify_update, entry); if (ret) ODP_ERR("can't start inotify thread. pcap disabled\n"); else - odp_global_ro.inotify_pcapng_is_running = 1; + odp_global_rw->inotify_pcapng_is_running = 1; return ret; @@ -265,24 +265,24 @@ void pcapng_destroy(pktio_entry_t *entry) unsigned int max_queue = MAX(entry->s.num_in_queue, entry->s.num_out_queue); - if (odp_global_ro.inotify_pcapng_is_running == 1) { - ret = pthread_cancel(odp_global_ro.inotify_thread); + if (odp_global_rw->inotify_pcapng_is_running == 1) { + ret = pthread_cancel(odp_global_rw->inotify_thread); if (ret) ODP_ERR("can't cancel inotify thread %s\n", strerror(errno)); } /* fd's will be -1 in case of any failure */ - ret = inotify_rm_watch(odp_global_ro.inotify_pcapng_fd, - odp_global_ro.inotify_watch_fd); + ret = inotify_rm_watch(odp_global_rw->inotify_pcapng_fd, + odp_global_rw->inotify_watch_fd); if (ret) ODP_ERR("can't deregister inotify %s\n", strerror(errno)); - if (odp_global_ro.inotify_pcapng_fd != -1) - close(odp_global_ro.inotify_pcapng_fd); + if (odp_global_rw->inotify_pcapng_fd != -1) + close(odp_global_rw->inotify_pcapng_fd); - if (odp_global_ro.inotify_watch_fd != -1) - close(odp_global_ro.inotify_watch_fd); + if (odp_global_rw->inotify_watch_fd != -1) + close(odp_global_rw->inotify_watch_fd); for (i = 0; i < max_queue; i++) { char pcapng_name[128]; -- cgit v1.2.3