Lines Matching refs:adapter
61 struct zfcp_adapter *adapter; in zfcp_init_device_configure() local
71 adapter = zfcp_ccw_adapter_by_cdev(cdev); in zfcp_init_device_configure()
72 if (!adapter) in zfcp_init_device_configure()
75 port = zfcp_get_port_by_wwpn(adapter, wwpn); in zfcp_init_device_configure()
84 zfcp_ccw_adapter_put(adapter); in zfcp_init_device_configure()
189 struct zfcp_port *zfcp_get_port_by_wwpn(struct zfcp_adapter *adapter, in zfcp_get_port_by_wwpn() argument
195 read_lock_irqsave(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
196 list_for_each_entry(port, &adapter->port_list, list) in zfcp_get_port_by_wwpn()
200 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
203 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
207 static int zfcp_allocate_low_mem_buffers(struct zfcp_adapter *adapter) in zfcp_allocate_low_mem_buffers() argument
209 adapter->pool.erp_req = in zfcp_allocate_low_mem_buffers()
211 if (!adapter->pool.erp_req) in zfcp_allocate_low_mem_buffers()
214 adapter->pool.gid_pn_req = in zfcp_allocate_low_mem_buffers()
216 if (!adapter->pool.gid_pn_req) in zfcp_allocate_low_mem_buffers()
219 adapter->pool.scsi_req = in zfcp_allocate_low_mem_buffers()
221 if (!adapter->pool.scsi_req) in zfcp_allocate_low_mem_buffers()
224 adapter->pool.scsi_abort = in zfcp_allocate_low_mem_buffers()
226 if (!adapter->pool.scsi_abort) in zfcp_allocate_low_mem_buffers()
229 adapter->pool.status_read_req = in zfcp_allocate_low_mem_buffers()
232 if (!adapter->pool.status_read_req) in zfcp_allocate_low_mem_buffers()
235 adapter->pool.qtcb_pool = in zfcp_allocate_low_mem_buffers()
237 if (!adapter->pool.qtcb_pool) in zfcp_allocate_low_mem_buffers()
241 adapter->pool.sr_data = in zfcp_allocate_low_mem_buffers()
243 if (!adapter->pool.sr_data) in zfcp_allocate_low_mem_buffers()
246 adapter->pool.gid_pn = in zfcp_allocate_low_mem_buffers()
248 if (!adapter->pool.gid_pn) in zfcp_allocate_low_mem_buffers()
254 static void zfcp_free_low_mem_buffers(struct zfcp_adapter *adapter) in zfcp_free_low_mem_buffers() argument
256 mempool_destroy(adapter->pool.erp_req); in zfcp_free_low_mem_buffers()
257 mempool_destroy(adapter->pool.scsi_req); in zfcp_free_low_mem_buffers()
258 mempool_destroy(adapter->pool.scsi_abort); in zfcp_free_low_mem_buffers()
259 mempool_destroy(adapter->pool.qtcb_pool); in zfcp_free_low_mem_buffers()
260 mempool_destroy(adapter->pool.status_read_req); in zfcp_free_low_mem_buffers()
261 mempool_destroy(adapter->pool.sr_data); in zfcp_free_low_mem_buffers()
262 mempool_destroy(adapter->pool.gid_pn); in zfcp_free_low_mem_buffers()
274 int zfcp_status_read_refill(struct zfcp_adapter *adapter) in zfcp_status_read_refill() argument
276 while (atomic_add_unless(&adapter->stat_miss, -1, 0)) in zfcp_status_read_refill()
277 if (zfcp_fsf_status_read(adapter->qdio)) { in zfcp_status_read_refill()
278 atomic_inc(&adapter->stat_miss); /* undo add -1 */ in zfcp_status_read_refill()
279 if (atomic_read(&adapter->stat_miss) >= in zfcp_status_read_refill()
280 adapter->stat_read_buf_num) { in zfcp_status_read_refill()
281 zfcp_erp_adapter_reopen(adapter, 0, "axsref1"); in zfcp_status_read_refill()
297 struct zfcp_adapter *adapter = in zfcp_print_sl() local
301 dev_name(&adapter->ccw_device->dev), in zfcp_print_sl()
302 adapter->fsf_lic_version); in zfcp_print_sl()
305 static int zfcp_setup_adapter_work_queue(struct zfcp_adapter *adapter) in zfcp_setup_adapter_work_queue() argument
310 dev_name(&adapter->ccw_device->dev)); in zfcp_setup_adapter_work_queue()
311 adapter->work_queue = alloc_ordered_workqueue(name, WQ_MEM_RECLAIM); in zfcp_setup_adapter_work_queue()
313 if (adapter->work_queue) in zfcp_setup_adapter_work_queue()
318 static void zfcp_destroy_adapter_work_queue(struct zfcp_adapter *adapter) in zfcp_destroy_adapter_work_queue() argument
320 if (adapter->work_queue) in zfcp_destroy_adapter_work_queue()
321 destroy_workqueue(adapter->work_queue); in zfcp_destroy_adapter_work_queue()
322 adapter->work_queue = NULL; in zfcp_destroy_adapter_work_queue()
337 struct zfcp_adapter *adapter; in zfcp_adapter_enqueue() local
342 adapter = kzalloc(sizeof(struct zfcp_adapter), GFP_KERNEL); in zfcp_adapter_enqueue()
343 if (!adapter) { in zfcp_adapter_enqueue()
348 kref_init(&adapter->ref); in zfcp_adapter_enqueue()
351 adapter->ccw_device = ccw_device; in zfcp_adapter_enqueue()
353 INIT_WORK(&adapter->stat_work, _zfcp_status_read_scheduler); in zfcp_adapter_enqueue()
354 INIT_DELAYED_WORK(&adapter->scan_work, zfcp_fc_scan_ports); in zfcp_adapter_enqueue()
355 INIT_WORK(&adapter->ns_up_work, zfcp_fc_sym_name_update); in zfcp_adapter_enqueue()
357 adapter->next_port_scan = jiffies; in zfcp_adapter_enqueue()
359 adapter->erp_action.adapter = adapter; in zfcp_adapter_enqueue()
361 if (zfcp_diag_adapter_setup(adapter)) in zfcp_adapter_enqueue()
364 if (zfcp_qdio_setup(adapter)) in zfcp_adapter_enqueue()
367 if (zfcp_allocate_low_mem_buffers(adapter)) in zfcp_adapter_enqueue()
370 adapter->req_list = zfcp_reqlist_alloc(); in zfcp_adapter_enqueue()
371 if (!adapter->req_list) in zfcp_adapter_enqueue()
374 if (zfcp_dbf_adapter_register(adapter)) in zfcp_adapter_enqueue()
377 if (zfcp_setup_adapter_work_queue(adapter)) in zfcp_adapter_enqueue()
380 if (zfcp_fc_gs_setup(adapter)) in zfcp_adapter_enqueue()
383 rwlock_init(&adapter->port_list_lock); in zfcp_adapter_enqueue()
384 INIT_LIST_HEAD(&adapter->port_list); in zfcp_adapter_enqueue()
386 INIT_LIST_HEAD(&adapter->events.list); in zfcp_adapter_enqueue()
387 INIT_WORK(&adapter->events.work, zfcp_fc_post_event); in zfcp_adapter_enqueue()
388 spin_lock_init(&adapter->events.list_lock); in zfcp_adapter_enqueue()
390 init_waitqueue_head(&adapter->erp_ready_wq); in zfcp_adapter_enqueue()
391 init_waitqueue_head(&adapter->erp_done_wqh); in zfcp_adapter_enqueue()
393 INIT_LIST_HEAD(&adapter->erp_ready_head); in zfcp_adapter_enqueue()
394 INIT_LIST_HEAD(&adapter->erp_running_head); in zfcp_adapter_enqueue()
396 rwlock_init(&adapter->erp_lock); in zfcp_adapter_enqueue()
397 rwlock_init(&adapter->abort_lock); in zfcp_adapter_enqueue()
399 if (zfcp_erp_thread_setup(adapter)) in zfcp_adapter_enqueue()
402 adapter->service_level.seq_print = zfcp_print_sl; in zfcp_adapter_enqueue()
404 dev_set_drvdata(&ccw_device->dev, adapter); in zfcp_adapter_enqueue()
410 if (zfcp_diag_sysfs_setup(adapter)) in zfcp_adapter_enqueue()
414 adapter->ccw_device->dev.dma_parms = &adapter->dma_parms; in zfcp_adapter_enqueue()
416 adapter->stat_read_buf_num = FSF_STATUS_READS_RECOM; in zfcp_adapter_enqueue()
418 return adapter; in zfcp_adapter_enqueue()
421 zfcp_adapter_unregister(adapter); in zfcp_adapter_enqueue()
425 void zfcp_adapter_unregister(struct zfcp_adapter *adapter) in zfcp_adapter_unregister() argument
427 struct ccw_device *cdev = adapter->ccw_device; in zfcp_adapter_unregister()
429 cancel_delayed_work_sync(&adapter->scan_work); in zfcp_adapter_unregister()
430 cancel_work_sync(&adapter->stat_work); in zfcp_adapter_unregister()
431 cancel_work_sync(&adapter->ns_up_work); in zfcp_adapter_unregister()
432 zfcp_destroy_adapter_work_queue(adapter); in zfcp_adapter_unregister()
434 zfcp_fc_wka_ports_force_offline(adapter->gs); in zfcp_adapter_unregister()
435 zfcp_scsi_adapter_unregister(adapter); in zfcp_adapter_unregister()
436 zfcp_diag_sysfs_destroy(adapter); in zfcp_adapter_unregister()
439 zfcp_erp_thread_kill(adapter); in zfcp_adapter_unregister()
440 zfcp_dbf_adapter_unregister(adapter); in zfcp_adapter_unregister()
441 zfcp_qdio_destroy(adapter->qdio); in zfcp_adapter_unregister()
443 zfcp_ccw_adapter_put(adapter); /* final put to release */ in zfcp_adapter_unregister()
453 struct zfcp_adapter *adapter = container_of(ref, struct zfcp_adapter, in zfcp_adapter_release() local
455 struct ccw_device *cdev = adapter->ccw_device; in zfcp_adapter_release()
457 dev_set_drvdata(&adapter->ccw_device->dev, NULL); in zfcp_adapter_release()
458 zfcp_fc_gs_destroy(adapter); in zfcp_adapter_release()
459 zfcp_free_low_mem_buffers(adapter); in zfcp_adapter_release()
460 zfcp_diag_adapter_free(adapter); in zfcp_adapter_release()
461 kfree(adapter->req_list); in zfcp_adapter_release()
462 kfree(adapter->fc_stats); in zfcp_adapter_release()
463 kfree(adapter->stats_reset_data); in zfcp_adapter_release()
464 kfree(adapter); in zfcp_adapter_release()
472 zfcp_ccw_adapter_put(port->adapter); in zfcp_port_release()
488 struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, in zfcp_port_enqueue() argument
494 kref_get(&adapter->ref); in zfcp_port_enqueue()
496 port = zfcp_get_port_by_wwpn(adapter, wwpn); in zfcp_port_enqueue()
515 port->adapter = adapter; in zfcp_port_enqueue()
519 port->dev.parent = &adapter->ccw_device->dev; in zfcp_port_enqueue()
523 port->erp_action.adapter = adapter; in zfcp_port_enqueue()
537 write_lock_irq(&adapter->port_list_lock); in zfcp_port_enqueue()
538 list_add_tail(&port->list, &adapter->port_list); in zfcp_port_enqueue()
539 write_unlock_irq(&adapter->port_list_lock); in zfcp_port_enqueue()
546 zfcp_ccw_adapter_put(adapter); in zfcp_port_enqueue()