Fix sporadic test failures via uma_timeout()

This commit is contained in:
Sebastian Huber 2018-07-26 12:03:45 +02:00
parent 94b5368388
commit 6fb003f588
4 changed files with 30 additions and 13 deletions

View File

@ -695,4 +695,7 @@ struct uma_percpu_stat {
void uma_reclaim_wakeup(void); void uma_reclaim_wakeup(void);
void uma_reclaim_worker(void *); void uma_reclaim_worker(void *);
#ifdef __rtems__
void rtems_uma_drain_timeout(void);
#endif /* __rtems__ */
#endif /* _VM_UMA_H_ */ #endif /* _VM_UMA_H_ */

View File

@ -3814,3 +3814,15 @@ DB_SHOW_COMMAND(umacache, db_show_umacache)
} }
#endif /* DDB */ #endif /* DDB */
#endif /* __rtems__ */ #endif /* __rtems__ */
#ifdef __rtems__
/*
* This is a helper routine for test programs. The uma_timeout() may need some
* dynamic memory. This could disturb out of memory tests.
*/
void
rtems_uma_drain_timeout(void)
{
callout_drain(&uma_callout);
}
#endif /* __rtems__ */

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013 embedded brains GmbH. All rights reserved. * Copyright (c) 2013, 2018 embedded brains GmbH. All rights reserved.
* *
* embedded brains GmbH * embedded brains GmbH
* Dornierstr. 4 * Dornierstr. 4
@ -38,6 +38,7 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/filio.h> #include <sys/filio.h>
#include <vm/uma.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <err.h> #include <err.h>
@ -1599,23 +1600,15 @@ test_setgethostname(void)
assert(in[sizeof(in) - 1] == '\0'); assert(in[sizeof(in) - 1] == '\0');
} }
static void set_self_prio(rtems_task_priority prio)
{
rtems_status_code sc;
sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
assert(sc == RTEMS_SUCCESSFUL);
}
static void static void
test_main(void) test_main(void)
{ {
/* /*
* No interruptions by the timer server. The uma_timeout() may need * Stop interferences of uma_timeout() which may need some dynamic
* some dynamic memory. This could disturb the no memory tests. * memory. This could disturb the no memory tests.
*/ */
set_self_prio(1); rtems_uma_drain_timeout();
/* Must be first test to ensure resource checks work */ /* Must be first test to ensure resource checks work */
test_sockets(); test_sockets();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved. * Copyright (c) 2013, 2018 embedded brains GmbH. All rights reserved.
* *
* embedded brains GmbH * embedded brains GmbH
* Dornierstr. 4 * Dornierstr. 4
@ -43,6 +43,8 @@
#include <sys/kthread.h> #include <sys/kthread.h>
#include <sys/errno.h> #include <sys/errno.h>
#include <vm/uma.h>
#include <rtems/bsd/bsd.h> #include <rtems/bsd/bsd.h>
#include <rtems.h> #include <rtems.h>
@ -284,8 +286,15 @@ test_rtems_bsd_get_curthread_or_null(void)
static void static void
test_main(void) test_main(void)
{ {
main_task_id = rtems_task_self(); main_task_id = rtems_task_self();
/*
* Stop interferences of uma_timeout() which may need some dynamic
* memory. This could disturb the no memory tests.
*/
rtems_uma_drain_timeout();
test_non_bsd_thread(); test_non_bsd_thread();
test_kproc_start(); test_kproc_start();
test_kthread_start(); test_kthread_start();