func (model *Model) Handle( vm *platform.Vm, cache *IoCache, handler *IoHandler, ioevent IoEvent, addr platform.Paddr) error { if handler != nil { // Our offset from handler start. offset := addr.OffsetFrom(handler.start) // Submit our function. err := handler.queue.Submit(ioevent, offset) // Should we save this request? if ioevent.IsWrite() && err == SaveIO { err = cache.save( vm, addr, handler, ioevent, offset) } // Return to our vcpu. return err } else if !ioevent.IsWrite() { // Invalid reads return all 1's. switch ioevent.Size() { case 1: ioevent.SetData(0xff) case 2: ioevent.SetData(0xffff) case 4: ioevent.SetData(0xffffffff) case 8: ioevent.SetData(0xffffffffffffffff) } } return nil }