Lines Matching defs:hostdata

110 				struct ibmvscsi_host_data *hostdata);
125 struct ibmvscsi_host_data *hostdata =
127 vio_disable_interrupts(to_vio_dev(hostdata->dev));
128 tasklet_schedule(&hostdata->srp_task);
141 struct ibmvscsi_host_data *hostdata,
145 struct vio_dev *vdev = to_vio_dev(hostdata->dev);
146 free_irq(vdev->irq, (void *)hostdata);
147 tasklet_kill(&hostdata->srp_task);
153 dma_unmap_single(hostdata->dev,
190 * @hostdata: the adapter
194 static int ibmvscsi_send_crq(struct ibmvscsi_host_data *hostdata,
197 struct vio_dev *vdev = to_vio_dev(hostdata->dev);
213 struct ibmvscsi_host_data *hostdata = (struct ibmvscsi_host_data *)data;
214 struct vio_dev *vdev = to_vio_dev(hostdata->dev);
220 while ((crq = crq_queue_next_crq(&hostdata->queue)) != NULL) {
221 ibmvscsi_handle_crq(crq, hostdata);
227 crq = crq_queue_next_crq(&hostdata->queue);
230 ibmvscsi_handle_crq(crq, hostdata);
260 static void set_adapter_info(struct ibmvscsi_host_data *hostdata)
262 memset(&hostdata->madapter_info, 0x00,
263 sizeof(hostdata->madapter_info));
265 dev_info(hostdata->dev, "SRP_VERSION: %s\n", SRP_VERSION);
266 strcpy(hostdata->madapter_info.srp_version, SRP_VERSION);
268 strncpy(hostdata->madapter_info.partition_name, partition_name,
269 sizeof(hostdata->madapter_info.partition_name));
271 hostdata->madapter_info.partition_number =
274 hostdata->madapter_info.mad_version = cpu_to_be32(SRP_MAD_VERSION_1);
275 hostdata->madapter_info.os_type = cpu_to_be32(SRP_MAD_OS_LINUX);
281 * @hostdata: ibmvscsi_host_data of host
285 struct ibmvscsi_host_data *hostdata)
288 struct vio_dev *vdev = to_vio_dev(hostdata->dev);
301 set_adapter_info(hostdata);
309 dev_warn(hostdata->dev, "Partner adapter not ready\n");
311 dev_warn(hostdata->dev, "couldn't register crq--rc 0x%x\n", rc);
319 * @hostdata: ibmvscsi_host_data of host
326 struct ibmvscsi_host_data *hostdata,
331 struct vio_dev *vdev = to_vio_dev(hostdata->dev);
339 queue->msg_token = dma_map_single(hostdata->dev, queue->msgs,
343 if (dma_mapping_error(hostdata->dev, queue->msg_token))
347 set_adapter_info(hostdata);
355 hostdata);
359 dev_warn(hostdata->dev, "Partner adapter not ready\n");
362 dev_warn(hostdata->dev, "Error %d opening adapter\n", rc);
369 tasklet_init(&hostdata->srp_task, (void *)ibmvscsi_task,
370 (unsigned long)hostdata);
374 0, "ibmvscsi", (void *)hostdata) != 0) {
375 dev_err(hostdata->dev, "couldn't register irq 0x%x\n",
382 dev_err(hostdata->dev, "Error %d enabling interrupts!!!\n", rc);
389 tasklet_kill(&hostdata->srp_task);
397 dma_unmap_single(hostdata->dev,
409 * @hostdata: ibmvscsi_host_data of host
413 struct ibmvscsi_host_data *hostdata)
416 struct vio_dev *vdev = to_vio_dev(hostdata->dev);
418 set_adapter_info(hostdata);
428 dev_err(hostdata->dev, "Error %d enabling adapter\n", rc);
439 * @hostdata: ibmvscsi_host_data who owns the event pool
444 int size, struct ibmvscsi_host_data *hostdata)
455 dma_alloc_coherent(hostdata->dev,
472 evt->hostdata = hostdata;
483 * @hostdata: ibmvscsi_host_data who owns the even pool
488 struct ibmvscsi_host_data *hostdata)
495 dma_free_coherent(hostdata->dev,
502 dev_warn(hostdata->dev, "releasing event pool with %d "
505 dma_free_coherent(hostdata->dev,
538 dev_err(evt->hostdata->dev, "Freeing invalid event_struct %p "
543 dev_err(evt->hostdata->dev, "Freeing event_struct %p "
780 * @hostdata: the adapter
782 static void purge_requests(struct ibmvscsi_host_data *hostdata, int error_code)
787 spin_lock_irqsave(hostdata->host->host_lock, flags);
788 while (!list_empty(&hostdata->sent)) {
789 evt = list_first_entry(&hostdata->sent, struct srp_event_struct, list);
793 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
797 evt->hostdata->dev);
803 free_event_struct(&evt->hostdata->pool, evt);
804 spin_lock_irqsave(hostdata->host->host_lock, flags);
806 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
813 * @hostdata: adapter to adjust
816 static void ibmvscsi_set_request_limit(struct ibmvscsi_host_data *hostdata, int limit)
820 spin_lock_irqsave(hostdata->host->host_lock, flags);
821 atomic_set(&hostdata->request_limit, limit);
822 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
827 * @hostdata: struct ibmvscsi_host_data to reset
829 static void ibmvscsi_reset_host(struct ibmvscsi_host_data *hostdata)
831 scsi_block_requests(hostdata->host);
832 ibmvscsi_set_request_limit(hostdata, 0);
834 purge_requests(hostdata, DID_ERROR);
835 hostdata->action = IBMVSCSI_HOST_ACTION_RESET;
836 wake_up(&hostdata->work_wait_q);
848 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
850 dev_err(hostdata->dev, "Command timed out (%x). Resetting connection\n",
853 ibmvscsi_reset_host(hostdata);
863 * @hostdata: ibmvscsi_host_data of host
870 struct ibmvscsi_host_data *hostdata,
887 atomic_dec_if_positive(&hostdata->request_limit);
917 list_for_each_entry(tmp_evt, &hostdata->sent, list) {
934 list_add_tail(&evt_struct->list, &hostdata->sent);
942 rc = ibmvscsi_send_crq(hostdata, be64_to_cpu(crq_as_u64[0]),
954 dev_warn(hostdata->dev, "send warning. "
958 dev_err(hostdata->dev, "send error %d\n", rc);
960 atomic_inc(&hostdata->request_limit);
967 unmap_cmd_data(&evt_struct->iu.srp.cmd, evt_struct, hostdata->dev);
969 free_event_struct(&hostdata->pool, evt_struct);
971 atomic_inc(&hostdata->request_limit);
975 unmap_cmd_data(&evt_struct->iu.srp.cmd, evt_struct, hostdata->dev);
983 free_event_struct(&hostdata->pool, evt_struct);
1001 dev_warn(evt_struct->hostdata->dev,
1013 evt_struct->hostdata->dev);
1047 struct ibmvscsi_host_data *hostdata = shost_priv(cmnd->device->host);
1052 evt_struct = get_event_struct(&hostdata->pool);
1063 if (!map_data_for_srp_cmd(cmnd, evt_struct, srp_cmd, hostdata->dev)) {
1067 free_event_struct(&hostdata->pool, evt_struct);
1092 return ibmvscsi_send_srp_event(evt_struct, hostdata, 0);
1103 * @hostdata: ibmvscsi_host_data of host
1108 static int map_persist_bufs(struct ibmvscsi_host_data *hostdata)
1111 hostdata->caps_addr = dma_map_single(hostdata->dev, &hostdata->caps,
1112 sizeof(hostdata->caps), DMA_BIDIRECTIONAL);
1114 if (dma_mapping_error(hostdata->dev, hostdata->caps_addr)) {
1115 dev_err(hostdata->dev, "Unable to map capabilities buffer!\n");
1119 hostdata->adapter_info_addr = dma_map_single(hostdata->dev,
1120 &hostdata->madapter_info,
1121 sizeof(hostdata->madapter_info),
1123 if (dma_mapping_error(hostdata->dev, hostdata->adapter_info_addr)) {
1124 dev_err(hostdata->dev, "Unable to map adapter info buffer!\n");
1125 dma_unmap_single(hostdata->dev, hostdata->caps_addr,
1126 sizeof(hostdata->caps), DMA_BIDIRECTIONAL);
1135 * @hostdata: ibmvscsi_host_data of host
1139 static void unmap_persist_bufs(struct ibmvscsi_host_data *hostdata)
1141 dma_unmap_single(hostdata->dev, hostdata->caps_addr,
1142 sizeof(hostdata->caps), DMA_BIDIRECTIONAL);
1144 dma_unmap_single(hostdata->dev, hostdata->adapter_info_addr,
1145 sizeof(hostdata->madapter_info), DMA_BIDIRECTIONAL);
1157 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
1162 dev_info(hostdata->dev, "SRP_LOGIN_REJ reason %u\n",
1165 ibmvscsi_set_request_limit(hostdata, -1);
1168 dev_err(hostdata->dev, "Invalid login response typecode 0x%02x!\n",
1171 ibmvscsi_set_request_limit(hostdata, -1);
1175 dev_info(hostdata->dev, "SRP_LOGIN succeeded\n");
1176 hostdata->client_migrated = 0;
1182 ibmvscsi_set_request_limit(hostdata,
1186 hostdata->action = IBMVSCSI_HOST_ACTION_UNBLOCK;
1187 wake_up(&hostdata->work_wait_q);
1192 * @hostdata: ibmvscsi_host_data of host
1196 static int send_srp_login(struct ibmvscsi_host_data *hostdata)
1201 struct srp_event_struct *evt_struct = get_event_struct(&hostdata->pool);
1218 ibmvscsi_set_request_limit(hostdata, 0);
1220 spin_lock_irqsave(hostdata->host->host_lock, flags);
1221 rc = ibmvscsi_send_srp_event(evt_struct, hostdata, login_timeout * 2);
1222 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1223 dev_info(hostdata->dev, "sent SRP login\n");
1235 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
1238 dev_err(hostdata->dev, "error 0x%X getting capabilities info\n",
1241 if (hostdata->caps.migration.common.server_support !=
1243 dev_info(hostdata->dev, "Partition migration not supported\n");
1246 if (hostdata->caps.reserve.common.server_support ==
1248 dev_info(hostdata->dev, "Client reserve enabled\n");
1250 dev_info(hostdata->dev, "Client reserve not supported\n");
1254 send_srp_login(hostdata);
1260 * @hostdata: ibmvscsi_host_data of host
1262 static void send_mad_capabilities(struct ibmvscsi_host_data *hostdata)
1267 struct device_node *of_node = hostdata->dev->of_node;
1270 evt_struct = get_event_struct(&hostdata->pool);
1279 hostdata->caps.flags = cpu_to_be32(CAP_LIST_SUPPORTED);
1280 if (hostdata->client_migrated)
1281 hostdata->caps.flags |= cpu_to_be32(CLIENT_MIGRATED);
1283 strlcpy(hostdata->caps.name, dev_name(&hostdata->host->shost_gendev),
1284 sizeof(hostdata->caps.name));
1287 location = location ? location : dev_name(hostdata->dev);
1288 strlcpy(hostdata->caps.loc, location, sizeof(hostdata->caps.loc));
1291 req->buffer = cpu_to_be64(hostdata->caps_addr);
1293 hostdata->caps.migration.common.cap_type =
1295 hostdata->caps.migration.common.length =
1296 cpu_to_be16(sizeof(hostdata->caps.migration));
1297 hostdata->caps.migration.common.server_support =
1299 hostdata->caps.migration.ecl = cpu_to_be32(1);
1302 hostdata->caps.reserve.common.cap_type =
1304 hostdata->caps.reserve.common.length =
1305 cpu_to_be16(sizeof(hostdata->caps.reserve));
1306 hostdata->caps.reserve.common.server_support =
1308 hostdata->caps.reserve.type =
1311 cpu_to_be16(sizeof(hostdata->caps));
1313 req->common.length = cpu_to_be16(sizeof(hostdata->caps) -
1314 sizeof(hostdata->caps.reserve));
1316 spin_lock_irqsave(hostdata->host->host_lock, flags);
1317 if (ibmvscsi_send_srp_event(evt_struct, hostdata, info_timeout * 2))
1318 dev_err(hostdata->dev, "couldn't send CAPABILITIES_REQ!\n");
1319 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1331 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
1335 dev_err(hostdata->dev, "fast_fail not supported in server\n");
1337 dev_err(hostdata->dev, "fast_fail request failed\n");
1339 dev_err(hostdata->dev, "error 0x%X enabling fast_fail\n", status);
1341 send_mad_capabilities(hostdata);
1346 * @hostdata: ibmvscsi_host_data of host
1350 static int enable_fast_fail(struct ibmvscsi_host_data *hostdata)
1358 send_mad_capabilities(hostdata);
1362 evt_struct = get_event_struct(&hostdata->pool);
1372 spin_lock_irqsave(hostdata->host->host_lock, flags);
1373 rc = ibmvscsi_send_srp_event(evt_struct, hostdata, info_timeout * 2);
1374 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1387 struct ibmvscsi_host_data *hostdata = evt_struct->hostdata;
1390 dev_err(hostdata->dev, "error %d getting adapter info\n",
1393 dev_info(hostdata->dev, "host srp version: %s, "
1395 hostdata->madapter_info.srp_version,
1396 hostdata->madapter_info.partition_name,
1397 be32_to_cpu(hostdata->madapter_info.partition_number),
1398 be32_to_cpu(hostdata->madapter_info.os_type),
1399 be32_to_cpu(hostdata->madapter_info.port_max_txu[0]));
1401 if (hostdata->madapter_info.port_max_txu[0])
1402 hostdata->host->max_sectors =
1403 be32_to_cpu(hostdata->madapter_info.port_max_txu[0]) >> 9;
1405 if (be32_to_cpu(hostdata->madapter_info.os_type) == SRP_MAD_OS_AIX &&
1406 strcmp(hostdata->madapter_info.srp_version, "1.6a") <= 0) {
1407 dev_err(hostdata->dev, "host (Ver. %s) doesn't support large transfers\n",
1408 hostdata->madapter_info.srp_version);
1409 dev_err(hostdata->dev, "limiting scatterlists to %d\n",
1411 hostdata->host->sg_tablesize = MAX_INDIRECT_BUFS;
1414 if (be32_to_cpu(hostdata->madapter_info.os_type) == SRP_MAD_OS_AIX) {
1415 enable_fast_fail(hostdata);
1420 send_srp_login(hostdata);
1428 * @hostdata: ibmvscsi_host_data of host
1432 static void send_mad_adapter_info(struct ibmvscsi_host_data *hostdata)
1438 evt_struct = get_event_struct(&hostdata->pool);
1450 req->common.length = cpu_to_be16(sizeof(hostdata->madapter_info));
1451 req->buffer = cpu_to_be64(hostdata->adapter_info_addr);
1453 spin_lock_irqsave(hostdata->host->host_lock, flags);
1454 if (ibmvscsi_send_srp_event(evt_struct, hostdata, info_timeout * 2))
1455 dev_err(hostdata->dev, "couldn't send ADAPTER_INFO_REQ!\n");
1456 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1463 static void init_adapter(struct ibmvscsi_host_data *hostdata)
1465 send_mad_adapter_info(hostdata);
1489 struct ibmvscsi_host_data *hostdata = shost_priv(cmd->device->host);
1502 spin_lock_irqsave(hostdata->host->host_lock, flags);
1506 list_for_each_entry(tmp_evt, &hostdata->sent, list) {
1514 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1518 evt = get_event_struct(&hostdata->pool);
1520 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1543 rsp_rc = ibmvscsi_send_srp_event(evt, hostdata, abort_timeout * 2);
1548 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1550 spin_lock_irqsave(hostdata->host->host_lock, flags);
1553 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1592 spin_lock_irqsave(hostdata->host->host_lock, flags);
1594 list_for_each_entry(tmp_evt, &hostdata->sent, list) {
1602 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1614 found_evt->hostdata->dev);
1615 free_event_struct(&found_evt->hostdata->pool, found_evt);
1616 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1617 atomic_inc(&hostdata->request_limit);
1628 struct ibmvscsi_host_data *hostdata = shost_priv(cmd->device->host);
1638 spin_lock_irqsave(hostdata->host->host_lock, flags);
1641 evt = get_event_struct(&hostdata->pool);
1643 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1665 rsp_rc = ibmvscsi_send_srp_event(evt, hostdata, reset_timeout * 2);
1670 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1672 spin_lock_irqsave(hostdata->host->host_lock, flags);
1675 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1712 spin_lock_irqsave(hostdata->host->host_lock, flags);
1713 list_for_each_entry_safe(tmp_evt, pos, &hostdata->sent, list) {
1719 tmp_evt->hostdata->dev);
1720 free_event_struct(&tmp_evt->hostdata->pool,
1722 atomic_inc(&hostdata->request_limit);
1729 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1740 struct ibmvscsi_host_data *hostdata = shost_priv(cmd->device->host);
1742 dev_err(hostdata->dev, "Resetting connection due to error recovery\n");
1744 ibmvscsi_reset_host(hostdata);
1748 atomic_read(&hostdata->request_limit) < 2;) {
1753 if (atomic_read(&hostdata->request_limit) <= 0)
1762 * @hostdata: ibmvscsi_host_data of host
1766 struct ibmvscsi_host_data *hostdata)
1777 dev_info(hostdata->dev, "partner initialized\n");
1779 rc = ibmvscsi_send_crq(hostdata, 0xC002000000000000LL, 0);
1782 init_adapter(hostdata);
1784 dev_err(hostdata->dev, "Unable to send init rsp. rc=%ld\n", rc);
1789 dev_info(hostdata->dev, "partner initialization complete\n");
1792 init_adapter(hostdata);
1795 dev_err(hostdata->dev, "unknown crq message type: %d\n", crq->format);
1799 scsi_block_requests(hostdata->host);
1800 ibmvscsi_set_request_limit(hostdata, 0);
1803 dev_info(hostdata->dev, "Re-enabling adapter!\n");
1804 hostdata->client_migrated = 1;
1805 hostdata->action = IBMVSCSI_HOST_ACTION_REENABLE;
1806 purge_requests(hostdata, DID_REQUEUE);
1807 wake_up(&hostdata->work_wait_q);
1809 dev_err(hostdata->dev, "Virtual adapter failed rc %d!\n",
1811 ibmvscsi_reset_host(hostdata);
1817 dev_err(hostdata->dev, "got an invalid message type 0x%02x\n",
1826 if (!valid_event_struct(&hostdata->pool, evt_struct)) {
1827 dev_err(hostdata->dev, "returned correlation_token 0x%p is invalid!\n",
1833 dev_err(hostdata->dev, "received duplicate correlation_token 0x%p!\n",
1840 &hostdata->request_limit);
1849 dev_err(hostdata->dev, "returned done() is NULL; not running it!\n");
1855 spin_lock_irqsave(evt_struct->hostdata->host->host_lock, flags);
1857 free_event_struct(&evt_struct->hostdata->pool, evt_struct);
1858 spin_unlock_irqrestore(evt_struct->hostdata->host->host_lock, flags);
1906 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1909 len = snprintf(buf, sizeof(hostdata->caps.loc), "%s\n",
1910 hostdata->caps.loc);
1926 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1929 len = snprintf(buf, sizeof(hostdata->caps.name), "%s\n",
1930 hostdata->caps.name);
1946 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1950 hostdata->madapter_info.srp_version);
1967 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1971 hostdata->madapter_info.partition_name);
1988 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
1992 be32_to_cpu(hostdata->madapter_info.partition_number));
2008 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
2012 be32_to_cpu(hostdata->madapter_info.mad_version));
2028 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
2032 be32_to_cpu(hostdata->madapter_info.os_type));
2060 struct ibmvscsi_host_data *hostdata = shost_priv(shost);
2062 dev_info(hostdata->dev, "Initiating adapter reset!\n");
2063 ibmvscsi_reset_host(hostdata);
2122 static void ibmvscsi_do_work(struct ibmvscsi_host_data *hostdata)
2128 spin_lock_irqsave(hostdata->host->host_lock, flags);
2129 switch (hostdata->action) {
2134 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
2135 rc = ibmvscsi_reset_crq_queue(&hostdata->queue, hostdata);
2136 spin_lock_irqsave(hostdata->host->host_lock, flags);
2138 rc = ibmvscsi_send_crq(hostdata, 0xC001000000000000LL, 0);
2139 vio_enable_interrupts(to_vio_dev(hostdata->dev));
2143 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
2144 rc = ibmvscsi_reenable_crq_queue(&hostdata->queue, hostdata);
2145 spin_lock_irqsave(hostdata->host->host_lock, flags);
2147 rc = ibmvscsi_send_crq(hostdata, 0xC001000000000000LL, 0);
2151 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
2155 hostdata->action = IBMVSCSI_HOST_ACTION_NONE;
2156 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
2159 ibmvscsi_set_request_limit(hostdata, -1);
2160 dev_err(hostdata->dev, "error after %s\n", action);
2163 scsi_unblock_requests(hostdata->host);
2166 static int __ibmvscsi_work_to_do(struct ibmvscsi_host_data *hostdata)
2170 switch (hostdata->action) {
2183 static int ibmvscsi_work_to_do(struct ibmvscsi_host_data *hostdata)
2188 spin_lock_irqsave(hostdata->host->host_lock, flags);
2189 rc = __ibmvscsi_work_to_do(hostdata);
2190 spin_unlock_irqrestore(hostdata->host->host_lock, flags);
2197 struct ibmvscsi_host_data *hostdata = data;
2203 rc = wait_event_interruptible(hostdata->work_wait_q,
2204 ibmvscsi_work_to_do(hostdata));
2211 ibmvscsi_do_work(hostdata);
2222 struct ibmvscsi_host_data *hostdata;
2232 host = scsi_host_alloc(&driver_template, sizeof(*hostdata));
2239 hostdata = shost_priv(host);
2240 memset(hostdata, 0x00, sizeof(*hostdata));
2241 INIT_LIST_HEAD(&hostdata->sent);
2242 init_waitqueue_head(&hostdata->work_wait_q);
2243 hostdata->host = host;
2244 hostdata->dev = dev;
2245 ibmvscsi_set_request_limit(hostdata, -1);
2246 hostdata->host->max_sectors = IBMVSCSI_MAX_SECTORS_DEFAULT;
2248 if (map_persist_bufs(hostdata)) {
2253 hostdata->work_thread = kthread_run(ibmvscsi_work, hostdata, "%s_%d",
2256 if (IS_ERR(hostdata->work_thread)) {
2258 PTR_ERR(hostdata->work_thread));
2262 rc = ibmvscsi_init_crq_queue(&hostdata->queue, hostdata, max_events);
2267 if (initialize_event_pool(&hostdata->pool, max_events, hostdata) != 0) {
2281 if (scsi_add_host(hostdata->host, hostdata->dev))
2285 memcpy(ids.port_id, hostdata->madapter_info.partition_name,
2296 if (ibmvscsi_send_crq(hostdata, 0xC001000000000000LL, 0) == 0
2306 atomic_read(&hostdata->request_limit) < 2;) {
2312 if (atomic_read(&hostdata->request_limit) > 0)
2316 dev_set_drvdata(&vdev->dev, hostdata);
2318 list_add_tail(&hostdata->host_list, &ibmvscsi_head);
2323 scsi_remove_host(hostdata->host);
2325 release_event_pool(&hostdata->pool, hostdata);
2327 ibmvscsi_release_crq_queue(&hostdata->queue, hostdata, max_events);
2329 kthread_stop(hostdata->work_thread);
2331 unmap_persist_bufs(hostdata);
2340 struct ibmvscsi_host_data *hostdata = dev_get_drvdata(&vdev->dev);
2342 srp_remove_host(hostdata->host);
2343 scsi_remove_host(hostdata->host);
2345 purge_requests(hostdata, DID_ERROR);
2346 release_event_pool(&hostdata->pool, hostdata);
2348 ibmvscsi_release_crq_queue(&hostdata->queue, hostdata,
2351 kthread_stop(hostdata->work_thread);
2352 unmap_persist_bufs(hostdata);
2355 list_del(&hostdata->host_list);
2358 scsi_host_put(hostdata->host);
2372 struct ibmvscsi_host_data *hostdata = dev_get_drvdata(dev);
2373 vio_disable_interrupts(to_vio_dev(hostdata->dev));
2374 tasklet_schedule(&hostdata->srp_task);