From caebbebd164d5cfc4d1625cf5c11f64e85078f7f Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Fri, 9 Mar 2018 15:07:17 +0700 Subject: trxcon/sched_lchan_common.c: use static memory allocation There is no need to allocate the DL header for each new message. Change-Id: Id7ad815c6b403f5c3d15fc02022397188f1d87fd --- src/host/trxcon/sched_lchan_common.c | 47 +++++++++++++++--------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/src/host/trxcon/sched_lchan_common.c b/src/host/trxcon/sched_lchan_common.c index 13c87649..1858619b 100644 --- a/src/host/trxcon/sched_lchan_common.c +++ b/src/host/trxcon/sched_lchan_common.c @@ -87,34 +87,28 @@ int sched_send_data_ind(struct trx_instance *trx, struct trx_ts *ts, bool dec_failed, int bit_error_count) { const struct trx_lchan_desc *lchan_desc; - struct l1ctl_info_dl *data; - - /* Allocate memory */ - data = talloc_zero_size(ts, sizeof(struct l1ctl_info_dl)); - if (data == NULL) - return -ENOMEM; + struct l1ctl_info_dl dl_hdr; /* Set up pointers */ lchan_desc = &trx_lchan_desc[lchan->type]; /* Fill in known downlink info */ - data->chan_nr = lchan_desc->chan_nr | ts->index; - data->link_id = lchan_desc->link_id; - data->band_arfcn = htons(trx->band_arfcn); - data->frame_nr = htonl(lchan->rx_first_fn); - data->rx_level = -(lchan->meas.rssi_sum / lchan->meas.rssi_num); - data->num_biterr = bit_error_count; + dl_hdr.chan_nr = lchan_desc->chan_nr | ts->index; + dl_hdr.link_id = lchan_desc->link_id; + dl_hdr.band_arfcn = htons(trx->band_arfcn); + dl_hdr.frame_nr = htonl(lchan->rx_first_fn); + dl_hdr.rx_level = -(lchan->meas.rssi_sum / lchan->meas.rssi_num); + dl_hdr.num_biterr = bit_error_count; /* FIXME: set proper values */ - data->snr = 0; + dl_hdr.snr = 0; /* Mark frame as broken if so */ - data->fire_crc = dec_failed ? 2 : 0; + dl_hdr.fire_crc = dec_failed ? 2 : 0; /* Put a packet to higher layers */ - l1ctl_tx_dt_ind(trx->l1l, data, l2, l2_len, + l1ctl_tx_dt_ind(trx->l1l, &dl_hdr, l2, l2_len, l2_len != GSM_MACBLOCK_LEN); - talloc_free(data); return 0; } @@ -123,25 +117,22 @@ int sched_send_data_conf(struct trx_instance *trx, struct trx_ts *ts, struct trx_lchan_state *lchan, uint32_t fn, size_t l2_len) { const struct trx_lchan_desc *lchan_desc; - struct l1ctl_info_dl *data; - - /* Allocate memory */ - data = talloc_zero(ts, struct l1ctl_info_dl); - if (data == NULL) - return -ENOMEM; + struct l1ctl_info_dl dl_hdr; /* Set up pointers */ lchan_desc = &trx_lchan_desc[lchan->type]; + /* Zero-initialize DL header, because we don't set all fields */ + memset(&dl_hdr, 0x00, sizeof(struct l1ctl_info_dl)); + /* Fill in known downlink info */ - data->chan_nr = lchan_desc->chan_nr | ts->index; - data->link_id = lchan_desc->link_id; - data->band_arfcn = htons(trx->band_arfcn); - data->frame_nr = htonl(fn); + dl_hdr.chan_nr = lchan_desc->chan_nr | ts->index; + dl_hdr.link_id = lchan_desc->link_id; + dl_hdr.band_arfcn = htons(trx->band_arfcn); + dl_hdr.frame_nr = htonl(fn); - l1ctl_tx_dt_conf(trx->l1l, data, + l1ctl_tx_dt_conf(trx->l1l, &dl_hdr, l2_len != GSM_MACBLOCK_LEN); - talloc_free(data); return 0; } -- cgit v1.2.3