Change in osmo-bts[master]: paging: refactor and optimize fill_paging_type_1()

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

fixeria gerrit-no-reply at lists.osmocom.org
Fri Jan 15 16:34:42 UTC 2021


fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/22224 )


Change subject: paging: refactor and optimize fill_paging_type_1()
......................................................................

paging: refactor and optimize fill_paging_type_1()

As far as I can see from my perf measurements, bitvec_fill() is called
quite often and takes 0.27% of the CPU.  A more detailed look reveals
that it's indirectly called by fill_paging_type_1() in order to fill
the remaining octets with constant '2B'O padding.

Let's optimize this function:

  - use memset() for padding *before* writing optional P1 Rest Octets;
  - conditionally initialize the bit vector for P1 Rest Octets;
  - use designated initializers instead of memset().

Change-Id: I90473356b396e5dd9326598aca025afacca4afc8
---
M src/common/paging.c
1 file changed, 18 insertions(+), 16 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/24/22224/1

diff --git a/src/common/paging.c b/src/common/paging.c
index fca58b5..2973141 100644
--- a/src/common/paging.c
+++ b/src/common/paging.c
@@ -352,34 +352,36 @@
 				uint8_t chan2, const struct p1_rest_octets *p1ro)
 {
 	struct gsm48_paging1 *pt1 = (struct gsm48_paging1 *) out_buf;
-	struct bitvec bv;
-	unsigned int paging_len;
+	unsigned int ro_len;
 	uint8_t *cur;
 
-	memset(out_buf, 0, sizeof(*pt1));
+	*pt1 = (struct gsm48_paging1) {
+		.proto_discr = GSM48_PDISC_RR,
+		.msg_type = GSM48_MT_RR_PAG_REQ_1,
+		.pag_mode = GSM48_PM_NORMAL,
+		.cneed1 = chan1 & 3,
+		.cneed2 = chan2 & 3,
+	};
 
-	pt1->proto_discr = GSM48_PDISC_RR;
-	pt1->msg_type = GSM48_MT_RR_PAG_REQ_1;
-	pt1->pag_mode = GSM48_PM_NORMAL;
-	pt1->cneed1 = chan1 & 3;
-	pt1->cneed2 = chan2 & 3;
 	cur = lv_put(pt1->data, identity1_lv[0], identity1_lv+1);
 	if (identity2_lv)
 		cur = tlv_put(cur, GSM48_IE_MOBILE_ID, identity2_lv[0], identity2_lv+1);
 
 	pt1->l2_plen = L2_PLEN(cur - out_buf);
 
-	paging_len = cur - out_buf;
+	/* Pad remaining octets with constant '2B'O */
+	ro_len = GSM_MACBLOCK_LEN - (cur - out_buf);
+	memset(cur, GSM_MACBLOCK_PADDING, ro_len);
 
-	memset(&bv, 0, sizeof(bv));
-	bv.data = cur;
-	bv.data_len = GSM_MACBLOCK_LEN - paging_len;
+	/* Optional P1 Rest Octets */
+	if (p1ro) {
+		struct bitvec bv = {
+			.data_len = ro_len,
+			.data = cur,
+		};
 
-	if (p1ro)
 		append_p1_rest_octets(&bv, p1ro);
-
-	/* pad to the end of the MAC block */
-	bitvec_spare_padding(&bv, bv.data_len *8);
+	}
 
 	return GSM_MACBLOCK_LEN;
 }

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/22224
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I90473356b396e5dd9326598aca025afacca4afc8
Gerrit-Change-Number: 22224
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210115/41ac35ef/attachment.htm>


More information about the gerrit-log mailing list