diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-04-19 21:54:35 +0800 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-04-19 22:30:21 +0800 |
commit | caf24567d134e3e783ca8f271c7cd9b21237ee35 (patch) | |
tree | 930e9eddd788945e248255c001d6cc589fc7547e | |
parent | 1d34c6ac5af41c058ec76ee92c3045feed3fe9af (diff) |
BAND AID... Reduce the delay timer, reduce number of paging requests we send
This is a band aid and not a proper fix. Reduce the time between two
IPA commands even if it is breaking rugby sized BTSs, limit the paging
commands we send during one iteration through the event loop. This should
prevent us from killing ourselves in a RACH loop.
-rw-r--r-- | openbsc/src/input/ipaccess.c | 3 | ||||
-rw-r--r-- | openbsc/src/paging.c | 7 |
2 files changed, 8 insertions, 2 deletions
diff --git a/openbsc/src/input/ipaccess.c b/openbsc/src/input/ipaccess.c index 8a8a1987d..faa172b38 100644 --- a/openbsc/src/input/ipaccess.c +++ b/openbsc/src/input/ipaccess.c @@ -572,7 +572,8 @@ static int handle_ts1_write(struct bsc_fd *bfd) e1i_ts->sign.tx_timer.data = e1i_ts; /* Reducing this might break the nanoBTS 900 init. */ - bsc_schedule_timer(&e1i_ts->sign.tx_timer, 0, 100000); + /* BAND AID for paging problem */ + bsc_schedule_timer(&e1i_ts->sign.tx_timer, 0, 100); return ret; } diff --git a/openbsc/src/paging.c b/openbsc/src/paging.c index a0cdc55ce..07683ad64 100644 --- a/openbsc/src/paging.c +++ b/openbsc/src/paging.c @@ -116,6 +116,10 @@ static void paging_handle_pending_requests(struct gsm_bts_paging_state *paging_b struct gsm_paging_request *initial_request = NULL; struct gsm_paging_request *current_request = NULL; + /* BAND AID to throttle the paging requests we send. Not more than 10. */ + int req = 0; + static const int REQ_LIMIT = 5; + /* * Determine if the pending_requests list is empty and * return then. @@ -155,7 +159,8 @@ static void paging_handle_pending_requests(struct gsm_bts_paging_state *paging_b current_request = llist_entry(paging_bts->pending_requests.next, struct gsm_paging_request, entry); } while (paging_bts->available_slots > 0 - && initial_request != current_request); + && initial_request != current_request + && req++ < REQ_LIMIT); bsc_schedule_timer(&paging_bts->work_timer, 2, 0); } |