Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+32 −36
Original line number Diff line number Diff line
@@ -57,6 +57,22 @@ struct tfrc_tx_hist_entry {
 */
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 *
	tfrc_tx_hist_find_entry(struct tfrc_tx_hist_entry *head, u64 seqno)
{
@@ -119,6 +135,22 @@ EXPORT_SYMBOL_GPL(tfrc_tx_hist_rtt);
 */
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
 */
@@ -316,39 +348,3 @@ keep_ref_for_next_time:
	return sample;
}
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;
	}
}
+23 −8
Original line number Diff line number Diff line
@@ -14,27 +14,42 @@ module_param(tfrc_debug, bool, 0444);
MODULE_PARM_DESC(tfrc_debug, "Enable debug messages");
#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 void dccp_li_exit(void);
extern int packet_history_init(void);
extern void packet_history_exit(void);

static int __init tfrc_module_init(void)
{
	int rc = dccp_li_init();

	if (rc == 0) {
		rc = packet_history_init();
		if (rc != 0)
			dccp_li_exit();
	}
	if (rc)
		goto out;

	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;
}

static void __exit tfrc_module_exit(void)
{
	packet_history_exit();
	tfrc_rx_packet_history_exit();
	tfrc_tx_packet_history_exit();
	dccp_li_exit();
}