Esempio n. 1
0
static void test_interrupt_locks( void )
{
  rtems_mode normal_interrupt_level = get_interrupt_level();
  rtems_interrupt_lock initialized = RTEMS_INTERRUPT_LOCK_INITIALIZER;
  rtems_interrupt_lock lock;
  rtems_interrupt_lock_context lock_context;

  rtems_interrupt_lock_initialize( &lock );
  rtems_test_assert( memcmp( &lock, &initialized, sizeof( lock ) ) == 0 );

  rtems_interrupt_lock_acquire( &lock, &lock_context );
  rtems_test_assert( normal_interrupt_level != get_interrupt_level() );
  rtems_interrupt_lock_release( &lock, &lock_context );

  rtems_test_assert( normal_interrupt_level == get_interrupt_level() );

  rtems_interrupt_lock_acquire_isr( &lock, &lock_context );
  rtems_test_assert( normal_interrupt_level == get_interrupt_level() );
  rtems_interrupt_lock_release_isr( &lock, &lock_context );

  rtems_test_assert( normal_interrupt_level == get_interrupt_level() );

  rtems_interrupt_lock_destroy( &lock );
  rtems_interrupt_lock_destroy( &initialized );
}
Esempio n. 2
0
static void
kerext_md_attach(void *d) {
	struct mdriver_entry	*md = d;
	int						level;
	int						id;

	level = get_interrupt_level(NULL, md->intr);
	if(level < 0) {
		crash();
	}
	lock_kernel();
	id = interrupt_attach(level, &md_intr, md, 0);
	if(id < 0) {
		crash();
	}
	md->internal = id;
}