[ovs-dev] [PATCH V4 08/10] bfd: Add bfd_wake_time() function.
Ethan Jackson
ethan at nicira.com
Tue Oct 15 01:11:01 UTC 2013
Acked-by: Ethan Jackson <ethan at nicira.com>
On Fri, Oct 11, 2013 at 5:16 PM, Alex Wang <alexw at nicira.com> wrote:
> This commit adds a new function "bfd_wake_time()" that returns the
> next wakeup time associated with the "struct bfd".
>
> Signed-off-by: Alex Wang <alexw at nicira.com>
> ---
>
> v3 -> v4:
> - rebase to master.
>
> v2 -> v3:
> - fix the code duplication.
>
> v1 -> v2:
> - rebase to master.
>
> ---
> lib/bfd.c | 26 ++++++++++++++++++++------
> lib/bfd.h | 2 +-
> 2 files changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/lib/bfd.c b/lib/bfd.c
> index 6c9e920..115053b 100644
> --- a/lib/bfd.c
> +++ b/lib/bfd.c
> @@ -446,16 +446,30 @@ bfd_unref(struct bfd *bfd) OVS_EXCLUDED(mutex)
> void
> bfd_wait(const struct bfd *bfd) OVS_EXCLUDED(mutex)
> {
> - ovs_mutex_lock(&mutex);
> - if (bfd->flags & FLAG_FINAL) {
> - poll_immediate_wake();
> + poll_timer_wait_until(bfd_wake_time(bfd));
> +}
> +
> +/* Returns the next wake up time. */
> +long long int
> +bfd_wake_time(const struct bfd *bfd) OVS_EXCLUDED(mutex)
> +{
> + long long int retval;
> +
> + if (!bfd) {
> + return LLONG_MAX;
> }
>
> - poll_timer_wait_until(bfd->next_tx);
> - if (bfd->state > STATE_DOWN) {
> - poll_timer_wait_until(bfd->detect_time);
> + ovs_mutex_lock(&mutex);
> + if (bfd->flags & FLAG_FINAL) {
> + retval = 0;
> + } else {
> + retval = bfd->next_tx;
> + if (bfd->state > STATE_DOWN) {
> + retval = MIN(bfd->detect_time, retval);
> + }
> }
> ovs_mutex_unlock(&mutex);
> + return retval;
> }
>
> void
> diff --git a/lib/bfd.h b/lib/bfd.h
> index 0e1e33d..f49a3d6 100644
> --- a/lib/bfd.h
> +++ b/lib/bfd.h
> @@ -49,5 +49,5 @@ void bfd_unref(struct bfd *);
> bool bfd_forwarding(const struct bfd *);
> void bfd_get_status(const struct bfd *, struct smap *);
> void bfd_set_netdev(struct bfd *, const struct netdev *);
> -
> +long long int bfd_wake_time(const struct bfd *);
> #endif /* bfd.h */
> --
> 1.7.9.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list