/*! Calls device_removed() on this node and all of its children - starting with the deepest and last child. It will also remove the one reference that every node gets on its creation. */ void device_node::DeviceRemoved() { // notify children NodeList::ConstIterator iterator = Children().GetIterator(); while (iterator.HasNext()) { device_node* child = iterator.Next(); child->DeviceRemoved(); } // notify devices DeviceList::ConstIterator deviceIterator = Devices().GetIterator(); while (deviceIterator.HasNext()) { Device* device = deviceIterator.Next(); if (device->Module() != NULL && device->Module()->device_removed != NULL) device->Module()->device_removed(device->Data()); } fFlags |= NODE_FLAG_DEVICE_REMOVED; if (IsInitialized() && DriverModule()->device_removed != NULL) DriverModule()->device_removed(this); if ((fFlags & B_KEEP_DRIVER_LOADED) != 0) { // There is no point in keeping this driver loaded when its device // is gone UninitDriver(); } UninitUnusedDriver(); Release(); }
void device_node::Dump(int32 level) { put_level(level); kprintf("(%" B_PRId32 ") @%p \"%s\" (ref %" B_PRId32 ", init %" B_PRId32 ", module %p, data %p)\n", level, this, ModuleName(), fRefCount, fInitialized, DriverModule(), DriverData()); AttributeList::Iterator attribute = Attributes().GetIterator(); while (attribute.HasNext()) { dump_attribute(attribute.Next(), level); } DeviceList::Iterator deviceIterator = fDevices.GetIterator(); while (deviceIterator.HasNext()) { Device* device = deviceIterator.Next(); put_level(level); kprintf("device: %s, %p\n", device->ModuleName(), device->Data()); } NodeList::ConstIterator iterator = Children().GetIterator(); while (iterator.HasNext()) { iterator.Next()->Dump(level + 1); } }
Context::Context( const Device &device ) : mID( 0 ) { cl_int error = 0; cl_device_id devid = device.Data(); mID = clCreateContext( 0, 1, &devid, 0, 0, &error ); if( error != CL_SUCCESS ) throw std::exception(); }