summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/crypto/x509.c2
-rw-r--r--src/include/ipxe/malloc.h13
-rw-r--r--src/net/arp.c9
-rw-r--r--src/net/tcp.c2
4 files changed, 21 insertions, 5 deletions
diff --git a/src/crypto/x509.c b/src/crypto/x509.c
index a99f6ab93..a3a179919 100644
--- a/src/crypto/x509.c
+++ b/src/crypto/x509.c
@@ -143,7 +143,7 @@ static unsigned int x509_discard ( void ) {
}
/** X.509 cache discarder */
-struct cache_discarder x509_cache_discarder __cache_discarder = {
+struct cache_discarder x509_discarder __cache_discarder ( CACHE_NORMAL ) = {
.discard = x509_discard,
};
diff --git a/src/include/ipxe/malloc.h b/src/include/ipxe/malloc.h
index c435a7ddb..d41b05628 100644
--- a/src/include/ipxe/malloc.h
+++ b/src/include/ipxe/malloc.h
@@ -76,6 +76,17 @@ struct cache_discarder {
#define CACHE_DISCARDERS __table ( struct cache_discarder, "cache_discarders" )
/** Declare a cache discarder */
-#define __cache_discarder __table_entry ( CACHE_DISCARDERS, 01 )
+#define __cache_discarder( cost ) __table_entry ( CACHE_DISCARDERS, cost )
+
+/** @defgroup cache_cost Cache discarder costs
+ *
+ * @{
+ */
+
+#define CACHE_CHEAP 01 /**< Items with a low replacement cost */
+#define CACHE_NORMAL 02 /**< Items with a normal replacement cost */
+#define CACHE_EXPENSIVE 03 /**< Items with a high replacement cost */
+
+/** @} */
#endif /* _IPXE_MALLOC_H */
diff --git a/src/net/arp.c b/src/net/arp.c
index d6b4e731a..7cec73d5f 100644
--- a/src/net/arp.c
+++ b/src/net/arp.c
@@ -525,7 +525,12 @@ static unsigned int arp_discard ( void ) {
return 0;
}
-/** ARP cache discarder */
-struct cache_discarder arp_cache_discarder __cache_discarder = {
+/** ARP cache discarder
+ *
+ * ARP cache entries are deemed to have a high replacement cost, since
+ * flushing an active ARP cache entry midway through a TCP transfer
+ * will cause substantial disruption.
+ */
+struct cache_discarder arp_discarder __cache_discarder ( CACHE_EXPENSIVE ) = {
.discard = arp_discard,
};
diff --git a/src/net/tcp.c b/src/net/tcp.c
index 7a1272605..e98d8b17d 100644
--- a/src/net/tcp.c
+++ b/src/net/tcp.c
@@ -1315,7 +1315,7 @@ static unsigned int tcp_discard ( void ) {
}
/** TCP cache discarder */
-struct cache_discarder tcp_cache_discarder __cache_discarder = {
+struct cache_discarder tcp_discarder __cache_discarder ( CACHE_NORMAL ) = {
.discard = tcp_discard,
};