rem: TRACE(("ide_dpc()\n"));
add: TRACE(("\n"));
context: ide_dpc(void *arg){	ide_bus_info *bus = (ide_bus_info *)arg;	ide_qrequest *qrequest;	ide_device_info *device;	TRACE(("ide_dpc()\n"));	//snooze(500000);	// IRQ handler doesn't tell us whether this bus was in async_wait or 	// in idle state, so we just check whether there is an active request,	// which means that we were async_waiting	if (bus->active_qrequest != NULL) {		FAST_LOG1( bus->log, ev_ide_dpc_continue, (uint32)bus->active_qrequest );		TRACE(("continue command\n"));		// cancel timeout		cancel_timer(&bus->timer.te);		qrequest = bus->active_qrequest;		device = qrequest->device;		// not perfect but simple: we simply know who is waiting why		if (device->is_atapi)			packet_dpc(qrequest);		else {			if (qrequest->uses_dma)				ata_dpc_DMA(qrequest);			else				ata_dpc_PIO(qrequest);		}	} else {		// no request active, so this must be a service request or		// a spurious IRQ; access_finished will take care of testing		// for service requests		TRACE(("irq in idle mode - possible service request\n"));		FAST_LOG0(bus->log, ev_ide_dpc_service);		device = get_current_device(bus);		if (device == NULL) {			// got an interrupt from a non-existing device			// either this is a spurious interrupt or there *is* a device			// but we haven't detected it - we better ignore it silently			access_finished(bus, bus->first_device);		} else {			// access_finished always checks the other device first, but as			// we do have a service request, we negate the negation			access_finished(bus, device->other_device);		}		// let XPT resend commands that got blocked		scsi->cont_send_bus(bus->scsi_cookie);	}	return;/*err:	xpt->cont_send( bus->xpt_cookie );*/}