static void storvsc_on_io_completion(struct hv_device *device, struct vstor_packet *vstor_packet, struct hv_storvsc_request *request) { struct storvsc_device *stor_device; struct vstor_packet *stor_pkt; stor_device = must_get_stor_device(device); if (!stor_device) return; stor_pkt = &request->vstor_packet; /* Copy over the status...etc */ stor_pkt->vm_srb.scsi_status = vstor_packet->vm_srb.scsi_status; stor_pkt->vm_srb.srb_status = vstor_packet->vm_srb.srb_status; stor_pkt->vm_srb.sense_info_length = vstor_packet->vm_srb.sense_info_length; if (vstor_packet->vm_srb.scsi_status != 0 || vstor_packet->vm_srb.srb_status != 1){ DPRINT_WARN(STORVSC, "cmd 0x%x scsi status 0x%x srb status 0x%x\n", stor_pkt->vm_srb.cdb[0], vstor_packet->vm_srb.scsi_status, vstor_packet->vm_srb.srb_status); } if ((vstor_packet->vm_srb.scsi_status & 0xFF) == 0x02) { /* CHECK_CONDITION */ if (vstor_packet->vm_srb.srb_status & 0x80) { /* autosense data available */ DPRINT_WARN(STORVSC, "storvsc pkt %p autosense data " "valid - len %d\n", request, vstor_packet->vm_srb.sense_info_length); memcpy(request->sense_buffer, vstor_packet->vm_srb.sense_data, vstor_packet->vm_srb.sense_info_length); } } stor_pkt->vm_srb.data_transfer_length = vstor_packet->vm_srb.data_transfer_length; request->on_io_completion(request); if (atomic_dec_and_test(&stor_device->num_outstanding_req) && stor_device->drain_notify) wake_up(&stor_device->waiting_to_drain); put_stor_device(device); }
static void netvsc_drv_exit(void) { struct netvsc_driver *netvsc_drv_obj = &g_netvsc_drv.drv_obj; struct driver_context *drv_ctx = &g_netvsc_drv.drv_ctx; struct device *current_dev; int ret; while (1) { current_dev = NULL; /* Get the device */ ret = driver_for_each_device(&drv_ctx->driver, NULL, ¤t_dev, netvsc_drv_exit_cb); if (ret) DPRINT_WARN(NETVSC_DRV, "driver_for_each_device returned %d", ret); if (current_dev == NULL) break; /* Initiate removal from the top-down */ DPRINT_INFO(NETVSC_DRV, "unregistering device (%p)...", current_dev); device_unregister(current_dev); } if (netvsc_drv_obj->base.OnCleanup) netvsc_drv_obj->base.OnCleanup(&netvsc_drv_obj->base); vmbus_child_driver_unregister(drv_ctx); return; }
int ysdl2Init(void) { if (type != -1) return type; /* Initialisation simple */ if (SDL_Init(SDL_INIT_EVERYTHING) != 0 ) { DPRINT_ERR("Échec de l'initialisation de la SDL (%s)\n",SDL_GetError()); return -1; } if(TTF_Init()==-1) { DPRINT_ERR("TTF_Init: %s\n", TTF_GetError()); goto ttf_fail; } // initializing Flags for PNG Images int imgFlags = IMG_INIT_PNG | IMG_INIT_JPG | IMG_INIT_TIF; // Simple check of the Flags if(!(IMG_Init(imgFlags)&imgFlags)) { DPRINT_ERR("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError()); goto img_fail; } /* Création de la fenêtre */ sg.pWindow = SDL_CreateWindow("YIRL isn't a rogue like", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIN_W_SIZE, WIN_H_SIZE, SDL_WINDOW_SHOWN); if(!sg.pWindow) { DPRINT_ERR("Error to creeate window:: %s\n",SDL_GetError()); goto win_fail; } // Render for the main windows sg.renderer = SDL_CreateRenderer(sg.pWindow, -1, SDL_RENDERER_TARGETTEXTURE); if (!sg.renderer) { DPRINT_ERR("Get render from window: %s\n", TTF_GetError()); goto fail; } if (SDL_SetRenderDrawBlendMode(sg.renderer, SDL_BLENDMODE_BLEND) < 0) { goto fail; } if (sgSetDefaultFont("./sample.ttf") < 0) DPRINT_WARN("can not load \"./sample.ttf\"\n"); // fill the window with a black rectangle // SDL_Rect rect = sg.getRect(); SDL_RenderClear(sg.renderer); SDL_RenderPresent(sg.renderer); type = ywidRegistreRender(sdlResize, SDLPollEvent, SDLWaitEvent); return type; fail: SDL_DestroyWindow(sg.pWindow); win_fail: TTF_Quit(); img_fail: IMG_Quit(); ttf_fail: SDL_Quit(); return -1; }