diff options
| author | Jafar Al-Gharaibeh <jafar@atcorp.com> | 2023-01-09 14:56:34 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-09 14:56:34 -0600 |
| commit | eae0855f541f0a4e8996dfe19ed3f312499375f7 (patch) | |
| tree | 1108b1399bcf15e4e5786d767c9a65e2a568be81 | |
| parent | c2853adde61305528383ea656852bf55a83d82f6 (diff) | |
| parent | 67e465af711c3da9267de8c5870d8242b353e8ba (diff) | |
Merge pull request #12610 from FRRouting/mergify/bp/stable/8.4/pr-12606
*: various build fixes (backport #12606)
| -rw-r--r-- | doc/developer/subdir.am | 1 | ||||
| -rw-r--r-- | doc/user/subdir.am | 2 | ||||
| -rw-r--r-- | lib/elf_py.c | 2 | ||||
| -rw-r--r-- | lib/xref.h | 13 | ||||
| -rw-r--r-- | zebra/zserv.c | 68 | ||||
| -rw-r--r-- | zebra/zserv.h | 15 |
6 files changed, 59 insertions, 42 deletions
diff --git a/doc/developer/subdir.am b/doc/developer/subdir.am index 9cf14a1966..b4c752a473 100644 --- a/doc/developer/subdir.am +++ b/doc/developer/subdir.am @@ -71,6 +71,7 @@ EXTRA_DIST += \ doc/developer/draft-zebra-00.ms \ doc/developer/ldpd-basic-test-setup.md \ doc/developer/release-announcement-template.md \ + doc/developer/_static/overrides.css \ # end DEVBUILD = doc/developer/_build diff --git a/doc/user/subdir.am b/doc/user/subdir.am index 14ace2c856..2bb1d28a2f 100644 --- a/doc/user/subdir.am +++ b/doc/user/subdir.am @@ -56,6 +56,8 @@ user_RSTFILES = \ EXTRA_DIST += \ $(user_RSTFILES) \ doc/user/Useful_Sysctl_Settings.md \ + doc/user/_static/overrides.css \ + doc/user/_static/overrides.js \ # end USERBUILD = doc/user/_build diff --git a/lib/elf_py.c b/lib/elf_py.c index 75d2d6007f..7c503cfb9d 100644 --- a/lib/elf_py.c +++ b/lib/elf_py.c @@ -293,7 +293,7 @@ static PyObject *elfreloc_getsection(PyObject *self, PyObject *args) if (!w->es) Py_RETURN_NONE; - if (w->symidx == 0) { + if (!w->symvalid || w->symidx == 0) { size_t idx = 0; Elf_Scn *scn; diff --git a/lib/xref.h b/lib/xref.h index 0e3f00f690..37242bd79e 100644 --- a/lib/xref.h +++ b/lib/xref.h @@ -208,8 +208,19 @@ extern const struct xref * const __stop_xref_array[1] DSO_LOCAL; * some build issue with it just add -DFRR_XREF_NO_NOTE to your build flags * to disable it. */ -#ifdef FRR_XREF_NO_NOTE +#if defined(FRR_XREF_NO_NOTE) || defined(__mips64) #define XREF_NOTE "" + +/* mips64 note: MIPS64 (regardless of endianness, both mips64 & mips64el) + * does not have a 64-bit PC-relative relocation type. Unfortunately, a + * 64-bit PC-relative relocation is exactly what the below asm magic emits. + * Therefore, the xref ELF note is permanently disabled on MIPS64. + * + * For some context, refer to https://reviews.llvm.org/D80390 + * + * As noted above, xref extraction still works through the section header + * path, so no functionality is lost. + */ #else #if __SIZEOF_POINTER__ == 4 diff --git a/zebra/zserv.c b/zebra/zserv.c index ebe246ffbc..a99dce03c0 100644 --- a/zebra/zserv.c +++ b/zebra/zserv.c @@ -222,14 +222,16 @@ static void zserv_write(struct thread *thread) struct stream *msg; uint32_t wcmd = 0; struct stream_fifo *cache; + uint64_t time_now = monotime(NULL); /* If we have any data pending, try to flush it first */ switch (buffer_flush_all(client->wb, client->sock)) { case BUFFER_ERROR: goto zwrite_fail; case BUFFER_PENDING: - atomic_store_explicit(&client->last_write_time, monotime(NULL), - memory_order_relaxed); + frr_with_mutex (&client->stats_mtx) { + client->last_write_time = time_now; + } zserv_client_event(client, ZSERV_CLIENT_WRITE); return; case BUFFER_EMPTY: @@ -263,20 +265,19 @@ static void zserv_write(struct thread *thread) case BUFFER_ERROR: goto zwrite_fail; case BUFFER_PENDING: - atomic_store_explicit(&client->last_write_time, monotime(NULL), - memory_order_relaxed); + frr_with_mutex (&client->stats_mtx) { + client->last_write_time = time_now; + } zserv_client_event(client, ZSERV_CLIENT_WRITE); return; case BUFFER_EMPTY: break; } - atomic_store_explicit(&client->last_write_cmd, wcmd, - memory_order_relaxed); - - atomic_store_explicit(&client->last_write_time, monotime(NULL), - memory_order_relaxed); - + frr_with_mutex (&client->stats_mtx) { + client->last_write_cmd = wcmd; + client->last_write_time = time_now; + } return; zwrite_fail: @@ -423,11 +424,13 @@ static void zserv_read(struct thread *thread) } if (p2p < p2p_orig) { + uint64_t time_now = monotime(NULL); + /* update session statistics */ - atomic_store_explicit(&client->last_read_time, monotime(NULL), - memory_order_relaxed); - atomic_store_explicit(&client->last_read_cmd, hdr.command, - memory_order_relaxed); + frr_with_mutex (&client->stats_mtx) { + client->last_read_time = time_now; + client->last_read_cmd = hdr.command; + } /* publish read packets on client's input queue */ frr_with_mutex (&client->ibuf_mtx) { @@ -621,6 +624,7 @@ static void zserv_client_free(struct zserv *client) buffer_free(client->wb); /* Free buffer mutexes */ + pthread_mutex_destroy(&client->stats_mtx); pthread_mutex_destroy(&client->obuf_mtx); pthread_mutex_destroy(&client->ibuf_mtx); @@ -741,14 +745,13 @@ static struct zserv *zserv_client_create(int sock) client->obuf_fifo = stream_fifo_new(); client->ibuf_work = stream_new(stream_size); client->obuf_work = stream_new(stream_size); + client->connect_time = monotime(NULL); pthread_mutex_init(&client->ibuf_mtx, NULL); pthread_mutex_init(&client->obuf_mtx, NULL); + pthread_mutex_init(&client->stats_mtx, NULL); client->wb = buffer_new(0); TAILQ_INIT(&(client->gr_info_queue)); - atomic_store_explicit(&client->connect_time, monotime(NULL), - memory_order_relaxed); - /* Initialize flags */ for (afi = AFI_IP; afi < AFI_MAX; afi++) { for (i = 0; i < ZEBRA_ROUTE_MAX; i++) @@ -1009,8 +1012,14 @@ static void zebra_show_client_detail(struct vty *vty, struct zserv *client) vty_out(vty, "------------------------ \n"); vty_out(vty, "FD: %d \n", client->sock); - connect_time = (time_t) atomic_load_explicit(&client->connect_time, - memory_order_relaxed); + frr_with_mutex (&client->stats_mtx) { + connect_time = client->connect_time; + last_read_time = client->last_read_time; + last_write_time = client->last_write_time; + + last_read_cmd = client->last_read_cmd; + last_write_cmd = client->last_write_cmd; + } vty_out(vty, "Connect Time: %s \n", zserv_time_buf(&connect_time, cbuf, ZEBRA_TIME_BUF)); @@ -1030,16 +1039,6 @@ static void zebra_show_client_detail(struct vty *vty, struct zserv *client) vty_out(vty, "Client will %sbe notified about it's routes status\n", client->notify_owner ? "" : "Not "); - last_read_time = (time_t)atomic_load_explicit(&client->last_read_time, - memory_order_relaxed); - last_write_time = (time_t)atomic_load_explicit(&client->last_write_time, - memory_order_relaxed); - - last_read_cmd = atomic_load_explicit(&client->last_read_cmd, - memory_order_relaxed); - last_write_cmd = atomic_load_explicit(&client->last_write_cmd, - memory_order_relaxed); - vty_out(vty, "Last Msg Rx Time: %s \n", zserv_time_buf(&last_read_time, rbuf, ZEBRA_TIME_BUF)); vty_out(vty, "Last Msg Tx Time: %s \n", @@ -1173,12 +1172,11 @@ static void zebra_show_client_brief(struct vty *vty, struct zserv *client) char wbuf[ZEBRA_TIME_BUF]; time_t connect_time, last_read_time, last_write_time; - connect_time = (time_t)atomic_load_explicit(&client->connect_time, - memory_order_relaxed); - last_read_time = (time_t)atomic_load_explicit(&client->last_read_time, - memory_order_relaxed); - last_write_time = (time_t)atomic_load_explicit(&client->last_write_time, - memory_order_relaxed); + frr_with_mutex (&client->stats_mtx) { + connect_time = client->connect_time; + last_read_time = client->last_read_time; + last_write_time = client->last_write_time; + } if (client->instance || client->session_id) snprintfrr(client_string, sizeof(client_string), "%s[%u:%u]", diff --git a/zebra/zserv.h b/zebra/zserv.h index db7b70d7c4..36030d9a9a 100644 --- a/zebra/zserv.h +++ b/zebra/zserv.h @@ -215,16 +215,21 @@ struct zserv { * relative to last_read_time. */ + pthread_mutex_t stats_mtx; + /* BEGIN covered by stats_mtx */ + /* monotime of client creation */ - _Atomic uint64_t connect_time; + uint64_t connect_time; /* monotime of last message received */ - _Atomic uint64_t last_read_time; + uint64_t last_read_time; /* monotime of last message sent */ - _Atomic uint64_t last_write_time; + uint64_t last_write_time; /* command code of last message read */ - _Atomic uint64_t last_read_cmd; + uint64_t last_read_cmd; /* command code of last message written */ - _Atomic uint64_t last_write_cmd; + uint64_t last_write_cmd; + + /* END covered by stats_mtx */ /* * Number of instances configured with |
