On 10/29/2014 12:13 PM, Hannes Reinecke wrote: >> Passing a >> > NULL SCSIDevice is hard though. >> > > But still can happen even with the current code. > Look at eg hw/scsi/esp.c: > > current_lun = scsi_device_find(&s->bus, 0, s->current_dev->id, lun); > s->current_req = scsi_req_new(current_lun, 0, buf, s); > datalen = scsi_req_enqueue(s->current_req); > > If scsi_device_find() returns NULL we're done for.
That cannot happen: s->current_dev = scsi_device_find(&s->bus, 0, target, 0); if (!s->current_dev) { // No such drive s->rregs[ESP_RSTAT] = 0; s->rregs[ESP_RINTR] = INTR_DC; s->rregs[ESP_RSEQ] = SEQ_0; esp_raise_irq(s); return 0; } This is in get_cmd, called by handle_satn and handle_s_without_atn before do_busid_cmd. Paolo