Commit df8f83fd authored by Gerrit Renker's avatar Gerrit Renker Committed by David S. Miller

[TFRC]: Put RX/TX initialisation into tfrc.c

This separates RX/TX initialisation and puts all packet history / loss intervals
initialisation into tfrc.c.
The organisation is uniform: slab declaration -> {rx,tx}_init() -> {rx,tx}_exit()
Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2aaef4e4
...@@ -57,6 +57,22 @@ struct tfrc_tx_hist_entry { ...@@ -57,6 +57,22 @@ struct tfrc_tx_hist_entry {
*/ */
static struct kmem_cache *tfrc_tx_hist_slab; static struct kmem_cache *tfrc_tx_hist_slab;
int __init tfrc_tx_packet_history_init(void)
{
tfrc_tx_hist_slab = kmem_cache_create("tfrc_tx_hist",
sizeof(struct tfrc_tx_hist_entry),
0, SLAB_HWCACHE_ALIGN, NULL);
return tfrc_tx_hist_slab == NULL ? -ENOBUFS : 0;
}
void tfrc_tx_packet_history_exit(void)
{
if (tfrc_tx_hist_slab != NULL) {
kmem_cache_destroy(tfrc_tx_hist_slab);
tfrc_tx_hist_slab = NULL;
}
}
static struct tfrc_tx_hist_entry * static struct tfrc_tx_hist_entry *
tfrc_tx_hist_find_entry(struct tfrc_tx_hist_entry *head, u64 seqno) tfrc_tx_hist_find_entry(struct tfrc_tx_hist_entry *head, u64 seqno)
{ {
...@@ -119,6 +135,22 @@ EXPORT_SYMBOL_GPL(tfrc_tx_hist_rtt); ...@@ -119,6 +135,22 @@ EXPORT_SYMBOL_GPL(tfrc_tx_hist_rtt);
*/ */
static struct kmem_cache *tfrc_rx_hist_slab; static struct kmem_cache *tfrc_rx_hist_slab;
int __init tfrc_rx_packet_history_init(void)
{
tfrc_rx_hist_slab = kmem_cache_create("tfrc_rxh_cache",
sizeof(struct tfrc_rx_hist_entry),
0, SLAB_HWCACHE_ALIGN, NULL);
return tfrc_rx_hist_slab == NULL ? -ENOBUFS : 0;
}
void tfrc_rx_packet_history_exit(void)
{
if (tfrc_rx_hist_slab != NULL) {
kmem_cache_destroy(tfrc_rx_hist_slab);
tfrc_rx_hist_slab = NULL;
}
}
/** /**
* tfrc_rx_hist_index - index to reach n-th entry after loss_start * tfrc_rx_hist_index - index to reach n-th entry after loss_start
*/ */
...@@ -316,39 +348,3 @@ keep_ref_for_next_time: ...@@ -316,39 +348,3 @@ keep_ref_for_next_time:
return sample; return sample;
} }
EXPORT_SYMBOL_GPL(tfrc_rx_hist_sample_rtt); EXPORT_SYMBOL_GPL(tfrc_rx_hist_sample_rtt);
__init int packet_history_init(void)
{
tfrc_tx_hist_slab = kmem_cache_create("tfrc_tx_hist",
sizeof(struct tfrc_tx_hist_entry), 0,
SLAB_HWCACHE_ALIGN, NULL);
if (tfrc_tx_hist_slab == NULL)
goto out_err;
tfrc_rx_hist_slab = kmem_cache_create("tfrc_rx_hist",
sizeof(struct tfrc_rx_hist_entry), 0,
SLAB_HWCACHE_ALIGN, NULL);
if (tfrc_rx_hist_slab == NULL)
goto out_free_tx;
return 0;
out_free_tx:
kmem_cache_destroy(tfrc_tx_hist_slab);
tfrc_tx_hist_slab = NULL;
out_err:
return -ENOBUFS;
}
void packet_history_exit(void)
{
if (tfrc_tx_hist_slab != NULL) {
kmem_cache_destroy(tfrc_tx_hist_slab);
tfrc_tx_hist_slab = NULL;
}
if (tfrc_rx_hist_slab != NULL) {
kmem_cache_destroy(tfrc_rx_hist_slab);
tfrc_rx_hist_slab = NULL;
}
}
...@@ -14,27 +14,42 @@ module_param(tfrc_debug, bool, 0444); ...@@ -14,27 +14,42 @@ module_param(tfrc_debug, bool, 0444);
MODULE_PARM_DESC(tfrc_debug, "Enable debug messages"); MODULE_PARM_DESC(tfrc_debug, "Enable debug messages");
#endif #endif
extern int tfrc_tx_packet_history_init(void);
extern void tfrc_tx_packet_history_exit(void);
extern int tfrc_rx_packet_history_init(void);
extern void tfrc_rx_packet_history_exit(void);
extern int dccp_li_init(void); extern int dccp_li_init(void);
extern void dccp_li_exit(void); extern void dccp_li_exit(void);
extern int packet_history_init(void);
extern void packet_history_exit(void);
static int __init tfrc_module_init(void) static int __init tfrc_module_init(void)
{ {
int rc = dccp_li_init(); int rc = dccp_li_init();
if (rc == 0) { if (rc)
rc = packet_history_init(); goto out;
if (rc != 0)
dccp_li_exit(); rc = tfrc_tx_packet_history_init();
} if (rc)
goto out_free_loss_intervals;
rc = tfrc_rx_packet_history_init();
if (rc)
goto out_free_tx_history;
return 0;
out_free_tx_history:
tfrc_tx_packet_history_exit();
out_free_loss_intervals:
dccp_li_exit();
out:
return rc; return rc;
} }
static void __exit tfrc_module_exit(void) static void __exit tfrc_module_exit(void)
{ {
packet_history_exit(); tfrc_rx_packet_history_exit();
tfrc_tx_packet_history_exit();
dccp_li_exit(); dccp_li_exit();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment