Lines Matching refs:adapter

61 	struct zfcp_adapter *adapter;
71 adapter = zfcp_ccw_adapter_by_cdev(cdev);
72 if (!adapter)
75 port = zfcp_get_port_by_wwpn(adapter, wwpn);
84 zfcp_ccw_adapter_put(adapter);
183 * zfcp_get_port_by_wwpn - find port in port list of adapter by wwpn
184 * @adapter: pointer to adapter to search for port
189 struct zfcp_port *zfcp_get_port_by_wwpn(struct zfcp_adapter *adapter,
195 read_lock_irqsave(&adapter->port_list_lock, flags);
196 list_for_each_entry(port, &adapter->port_list, list)
200 read_unlock_irqrestore(&adapter->port_list_lock, flags);
203 read_unlock_irqrestore(&adapter->port_list_lock, flags);
207 static int zfcp_allocate_low_mem_buffers(struct zfcp_adapter *adapter)
209 adapter->pool.erp_req =
211 if (!adapter->pool.erp_req)
214 adapter->pool.gid_pn_req =
216 if (!adapter->pool.gid_pn_req)
219 adapter->pool.scsi_req =
221 if (!adapter->pool.scsi_req)
224 adapter->pool.scsi_abort =
226 if (!adapter->pool.scsi_abort)
229 adapter->pool.status_read_req =
232 if (!adapter->pool.status_read_req)
235 adapter->pool.qtcb_pool =
237 if (!adapter->pool.qtcb_pool)
241 adapter->pool.sr_data =
243 if (!adapter->pool.sr_data)
246 adapter->pool.gid_pn =
248 if (!adapter->pool.gid_pn)
254 static void zfcp_free_low_mem_buffers(struct zfcp_adapter *adapter)
256 mempool_destroy(adapter->pool.erp_req);
257 mempool_destroy(adapter->pool.scsi_req);
258 mempool_destroy(adapter->pool.scsi_abort);
259 mempool_destroy(adapter->pool.qtcb_pool);
260 mempool_destroy(adapter->pool.status_read_req);
261 mempool_destroy(adapter->pool.sr_data);
262 mempool_destroy(adapter->pool.gid_pn);
267 * @adapter: ptr to struct zfcp_adapter for which the buffers should be refilled
272 * also triggers adapter reopen recovery
274 int zfcp_status_read_refill(struct zfcp_adapter *adapter)
276 while (atomic_add_unless(&adapter->stat_miss, -1, 0))
277 if (zfcp_fsf_status_read(adapter->qdio)) {
278 atomic_inc(&adapter->stat_miss); /* undo add -1 */
279 if (atomic_read(&adapter->stat_miss) >=
280 adapter->stat_read_buf_num) {
281 zfcp_erp_adapter_reopen(adapter, 0, "axsref1");
297 struct zfcp_adapter *adapter = container_of(work, struct zfcp_adapter,
300 zfcp_fsf_exchange_config_data_sync(adapter->qdio, NULL);
305 struct zfcp_adapter *adapter =
309 dev_name(&adapter->ccw_device->dev),
310 adapter->fsf_lic_version);
313 static int zfcp_setup_adapter_work_queue(struct zfcp_adapter *adapter)
318 dev_name(&adapter->ccw_device->dev));
319 adapter->work_queue = alloc_ordered_workqueue(name, WQ_MEM_RECLAIM);
321 if (adapter->work_queue)
326 static void zfcp_destroy_adapter_work_queue(struct zfcp_adapter *adapter)
328 if (adapter->work_queue)
329 destroy_workqueue(adapter->work_queue);
330 adapter->work_queue = NULL;
335 * zfcp_adapter_enqueue - enqueue a new adapter to the list
339 * Enqueues an adapter at the end of the adapter list in the driver data.
340 * All adapter internal structures are set up.
345 struct zfcp_adapter *adapter;
350 adapter = kzalloc(sizeof(struct zfcp_adapter), GFP_KERNEL);
351 if (!adapter) {
356 kref_init(&adapter->ref);
359 adapter->ccw_device = ccw_device;
361 INIT_WORK(&adapter->stat_work, _zfcp_status_read_scheduler);
362 INIT_DELAYED_WORK(&adapter->scan_work, zfcp_fc_scan_ports);
363 INIT_WORK(&adapter->ns_up_work, zfcp_fc_sym_name_update);
364 INIT_WORK(&adapter->version_change_lost_work,
367 adapter->next_port_scan = jiffies;
369 adapter->erp_action.adapter = adapter;
371 if (zfcp_diag_adapter_setup(adapter))
374 if (zfcp_qdio_setup(adapter))
377 if (zfcp_allocate_low_mem_buffers(adapter))
380 adapter->req_list = zfcp_reqlist_alloc();
381 if (!adapter->req_list)
384 if (zfcp_dbf_adapter_register(adapter))
387 if (zfcp_setup_adapter_work_queue(adapter))
390 if (zfcp_fc_gs_setup(adapter))
393 rwlock_init(&adapter->port_list_lock);
394 INIT_LIST_HEAD(&adapter->port_list);
396 INIT_LIST_HEAD(&adapter->events.list);
397 INIT_WORK(&adapter->events.work, zfcp_fc_post_event);
398 spin_lock_init(&adapter->events.list_lock);
400 init_waitqueue_head(&adapter->erp_ready_wq);
401 init_waitqueue_head(&adapter->erp_done_wqh);
403 INIT_LIST_HEAD(&adapter->erp_ready_head);
404 INIT_LIST_HEAD(&adapter->erp_running_head);
406 rwlock_init(&adapter->erp_lock);
407 rwlock_init(&adapter->abort_lock);
409 if (zfcp_erp_thread_setup(adapter))
412 adapter->service_level.seq_print = zfcp_print_sl;
414 dev_set_drvdata(&ccw_device->dev, adapter);
420 adapter->ccw_device->dev.dma_parms = &adapter->dma_parms;
422 adapter->stat_read_buf_num = FSF_STATUS_READS_RECOM;
424 return adapter;
429 cancel_delayed_work_sync(&adapter->scan_work);
430 cancel_work_sync(&adapter->stat_work);
431 cancel_work_sync(&adapter->ns_up_work);
432 cancel_work_sync(&adapter->version_change_lost_work);
433 zfcp_destroy_adapter_work_queue(adapter);
435 zfcp_fc_wka_ports_force_offline(adapter->gs);
436 zfcp_scsi_adapter_unregister(adapter);
438 zfcp_erp_thread_kill(adapter);
439 zfcp_dbf_adapter_unregister(adapter);
440 zfcp_qdio_destroy(adapter->qdio);
442 zfcp_ccw_adapter_put(adapter); /* final put to release */
446 void zfcp_adapter_unregister(struct zfcp_adapter *adapter)
448 struct ccw_device *cdev = adapter->ccw_device;
450 cancel_delayed_work_sync(&adapter->scan_work);
451 cancel_work_sync(&adapter->stat_work);
452 cancel_work_sync(&adapter->ns_up_work);
453 cancel_work_sync(&adapter->version_change_lost_work);
454 zfcp_destroy_adapter_work_queue(adapter);
456 zfcp_fc_wka_ports_force_offline(adapter->gs);
457 zfcp_scsi_adapter_unregister(adapter);
460 zfcp_erp_thread_kill(adapter);
461 zfcp_dbf_adapter_unregister(adapter);
462 zfcp_qdio_destroy(adapter->qdio);
464 zfcp_ccw_adapter_put(adapter); /* final put to release */
468 * zfcp_adapter_release - remove the adapter from the resource list
470 * locks: adapter list write lock is assumed to be held by caller
474 struct zfcp_adapter *adapter = container_of(ref, struct zfcp_adapter,
476 struct ccw_device *cdev = adapter->ccw_device;
478 dev_set_drvdata(&adapter->ccw_device->dev, NULL);
479 zfcp_fc_gs_destroy(adapter);
480 zfcp_free_low_mem_buffers(adapter);
481 zfcp_diag_adapter_free(adapter);
482 kfree(adapter->req_list);
483 kfree(adapter->fc_stats);
484 kfree(adapter->stats_reset_data);
485 kfree(adapter);
493 zfcp_ccw_adapter_put(port->adapter);
498 * zfcp_port_enqueue - enqueue port to port list of adapter
499 * @adapter: adapter where remote port is added
509 struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
515 kref_get(&adapter->ref);
517 port = zfcp_get_port_by_wwpn(adapter, wwpn);
536 port->adapter = adapter;
540 port->dev.parent = &adapter->ccw_device->dev;
544 port->erp_action.adapter = adapter;
558 write_lock_irq(&adapter->port_list_lock);
559 list_add_tail(&port->list, &adapter->port_list);
560 write_unlock_irq(&adapter->port_list_lock);
567 zfcp_ccw_adapter_put(adapter);