Beispiel #1
0
static	int
Dump( char *aStrTID, char *aAddr )
{
 extern	int	quicktest()	;
	OZ_Header	header ;
	Monitor		monitor ;
	TKey		key ;
	OzRecvChannel	chan ;

	if ( aStrTID == NULL || aAddr == NULL ) return( 1 ) ;

	key.tid = OzStrtol( aStrTID, 0, 0 ) ;
	header = (OZ_Header)OzStrtoul( aAddr, 0, 0 ) ;

	if ( OzMapThreadTable( where_sub, &key ) <= 0 ) {
		OzOutput( -1, "Not found thread %d.\n", key.tid ) ;
		return( -1 ) ;
	}

	chan = (OzRecvChannel)key.t->channel ;
	if ( chan == NULL ) {
		OzOutput( -1, "No channel\n" ) ;
		goto error ;
	}
	if ( ! quicktest( header, chan->o->heap, 1 ) ) {
		OzOutput( -1, "part[0x%0x] ng\n", header ) ;
		goto error ;
	}
	if ( header->h == LOCAL || header->h == STATIC ) {
		header -= header->e+1 ;
	} else {
		OzOutput( -1, "not object\n" ) ;
		goto error ;
	}
	if ( ! quicktest( header, chan->o->heap, 1 ) ) {
		OzOutput( -1, "all[0x%0x] ng\n", header ) ;
		goto error ;
	}
	monitor = (Monitor)header->t ;
	if ( ! quicktest( monitor, chan->o->heap, 1 ) ) {
		OzOutput( -1, "monitor[0x%x] ng\n", monitor ) ;
		goto error ;
	}
	OzOutput( -1, "Locked thread %d\n", monitor->tid ) ;

error:
	OzResumeThread( key.t ) ;

	return( 0 ) ;
}
int gru_kservices_init(struct gru_state *gru)
{
	struct gru_blade_state *bs;
	struct gru_context_configuration_handle *cch;
	unsigned long cbr_map, dsr_map;
	int err, num, cpus_possible;

	/*
	 * Currently, resources are reserved ONLY on the second chiplet
	 * on each blade. This leaves ALL resources on chiplet 0 available
	 * for user code.
	 */
	bs = gru->gs_blade;
	if (gru != &bs->bs_grus[1])
		return 0;

	cpus_possible = uv_blade_nr_possible_cpus(gru->gs_blade_id);

	num = GRU_NUM_KERNEL_CBR * cpus_possible;
	cbr_map = gru_reserve_cb_resources(gru, GRU_CB_COUNT_TO_AU(num), NULL);
	gru->gs_reserved_cbrs += num;

	num = GRU_NUM_KERNEL_DSR_BYTES * cpus_possible;
	dsr_map = gru_reserve_ds_resources(gru, GRU_DS_BYTES_TO_AU(num), NULL);
	gru->gs_reserved_dsr_bytes += num;

	gru->gs_active_contexts++;
	__set_bit(KERNEL_CTXNUM, &gru->gs_context_map);
	cch = get_cch(gru->gs_gru_base_vaddr, KERNEL_CTXNUM);

	bs->kernel_cb = get_gseg_base_address_cb(gru->gs_gru_base_vaddr,
					KERNEL_CTXNUM, 0);
	bs->kernel_dsr = get_gseg_base_address_ds(gru->gs_gru_base_vaddr,
					KERNEL_CTXNUM, 0);

	lock_cch_handle(cch);
	cch->tfm_fault_bit_enable = 0;
	cch->tlb_int_enable = 0;
	cch->tfm_done_bit_enable = 0;
	cch->unmap_enable = 1;
	err = cch_allocate(cch, 0, cbr_map, dsr_map);
	if (err) {
		gru_dbg(grudev,
			"Unable to allocate kernel CCH: gru %d, err %d\n",
			gru->gs_gid, err);
		BUG();
	}
	if (cch_start(cch)) {
		gru_dbg(grudev, "Unable to start kernel CCH: gru %d, err %d\n",
			gru->gs_gid, err);
		BUG();
	}
	unlock_cch_handle(cch);

	if (gru_options & GRU_QUICKLOOK)
		quicktest(gru);
	return 0;
}
Beispiel #3
0
int main()
{
  test_CMS();
  quicktest();
  return 0;
}