projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
automake: ofp-errors.[c|inc] are actually inside srcdir
[openvswitch]
/
lib
/
coverage.c
diff --git
a/lib/coverage.c
b/lib/coverage.c
index 105cd37db3ae3cd675164f224819b7adf0b64ee5..0deb5265a4a3e8e6bd480bdbff413bc5feeec7e6 100644
(file)
--- a/
lib/coverage.c
+++ b/
lib/coverage.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (c) 2009, 2010 Nicira Networks.
+ * Copyright (c) 2009, 2010
, 2011, 2012
Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@
-20,6
+20,7
@@
#include <stdlib.h>
#include "dynamic-string.h"
#include "hash.h"
#include <stdlib.h>
#include "dynamic-string.h"
#include "hash.h"
+#include "timeval.h"
#include "unixctl.h"
#include "util.h"
#include "vlog.h"
#include "unixctl.h"
#include "util.h"
#include "vlog.h"
@@
-48,17
+49,18
@@
struct coverage_counter *coverage_counters[] = {
static unsigned int epoch;
static void
static unsigned int epoch;
static void
-coverage_unixctl_log(struct unixctl_conn *conn,
const char *args
OVS_UNUSED,
- void *aux OVS_UNUSED)
+coverage_unixctl_log(struct unixctl_conn *conn,
int argc
OVS_UNUSED,
+
const char *argv[] OVS_UNUSED,
void *aux OVS_UNUSED)
{
coverage_log(VLL_WARN, false);
{
coverage_log(VLL_WARN, false);
- unixctl_command_reply(conn,
200,
NULL);
+ unixctl_command_reply(conn, NULL);
}
void
coverage_init(void)
{
}
void
coverage_init(void)
{
- unixctl_command_register("coverage/log", "", coverage_unixctl_log, NULL);
+ unixctl_command_register("coverage/log", "", 0, 0,
+ coverage_unixctl_log, NULL);
}
/* Sorts coverage counters in descending order by count, within equal counts
}
/* Sorts coverage counters in descending order by count, within equal counts
@@
-122,12
+124,20
@@
coverage_hit(uint32_t hash)
static uint32_t hit[HIT_BITS / BITS_PER_WORD];
BUILD_ASSERT_DECL(IS_POW2(HIT_BITS));
static uint32_t hit[HIT_BITS / BITS_PER_WORD];
BUILD_ASSERT_DECL(IS_POW2(HIT_BITS));
+ static long long int next_clear = LLONG_MIN;
+
unsigned int bit_index = hash & (HIT_BITS - 1);
unsigned int word_index = bit_index / BITS_PER_WORD;
unsigned int word_mask = 1u << (bit_index % BITS_PER_WORD);
unsigned int bit_index = hash & (HIT_BITS - 1);
unsigned int word_index = bit_index / BITS_PER_WORD;
unsigned int word_mask = 1u << (bit_index % BITS_PER_WORD);
+ /* Expire coverage hash suppression once a day. */
+ if (time_msec() >= next_clear) {
+ memset(hit, 0, sizeof hit);
+ next_clear = time_msec() + 60 * 60 * 24 * 1000LL;
+ }
+
if (hit[word_index] & word_mask) {
if (hit[word_index] & word_mask) {
- return true;
+
return true;
} else {
hit[word_index] |= word_mask;
return false;
} else {
hit[word_index] |= word_mask;
return false;