Lines Matching refs:shca
89 static void print_error_data(struct ehca_shca *shca, void *data, in print_error_data() argument
104 ehca_err(&shca->ib_device, in print_error_data()
113 ehca_err(&shca->ib_device, in print_error_data()
119 ehca_err(&shca->ib_device, in print_error_data()
121 type, shca->ib_device.name); in print_error_data()
125 ehca_err(&shca->ib_device, "Error data is available: %llx.", resource); in print_error_data()
126 ehca_err(&shca->ib_device, "EHCA ----- error data begin " in print_error_data()
129 ehca_err(&shca->ib_device, "EHCA ----- error data end " in print_error_data()
135 int ehca_error_data(struct ehca_shca *shca, void *data, in ehca_error_data() argument
145 ehca_err(&shca->ib_device, "Cannot allocate rblock memory."); in ehca_error_data()
151 ret = hipz_h_error_data(shca->ipz_hca_handle, in ehca_error_data()
157 ehca_err(&shca->ib_device, in ehca_error_data()
167 print_error_data(shca, data, rblock, length); in ehca_error_data()
169 ehca_err(&shca->ib_device, in ehca_error_data()
179 static void dispatch_qp_event(struct ehca_shca *shca, struct ehca_qp *qp, in dispatch_qp_event() argument
188 event.device = &shca->ib_device; in dispatch_qp_event()
206 static void qp_event_callback(struct ehca_shca *shca, u64 eqe, in qp_event_callback() argument
222 ehca_error_data(shca, qp, qp->ipz_qp_handle.handle); in qp_event_callback()
224 dispatch_qp_event(shca, qp, fatal && qp->ext_type == EQPT_SRQ ? in qp_event_callback()
233 dispatch_qp_event(shca, qp, IB_EVENT_QP_LAST_WQE_REACHED); in qp_event_callback()
240 static void cq_event_callback(struct ehca_shca *shca, in cq_event_callback() argument
255 ehca_error_data(shca, cq, cq->ipz_cq_handle.handle); in cq_event_callback()
263 static void parse_identifier(struct ehca_shca *shca, u64 eqe) in parse_identifier() argument
269 qp_event_callback(shca, eqe, IB_EVENT_PATH_MIG, 0); in parse_identifier()
272 qp_event_callback(shca, eqe, IB_EVENT_COMM_EST, 0); in parse_identifier()
275 qp_event_callback(shca, eqe, IB_EVENT_SQ_DRAINED, 0); in parse_identifier()
279 qp_event_callback(shca, eqe, IB_EVENT_QP_FATAL, 1); in parse_identifier()
283 cq_event_callback(shca, eqe); in parse_identifier()
286 ehca_err(&shca->ib_device, "MRMWPTE error."); in parse_identifier()
289 ehca_err(&shca->ib_device, "Port event."); in parse_identifier()
292 ehca_err(&shca->ib_device, "MR access error."); in parse_identifier()
295 ehca_err(&shca->ib_device, "EQ error."); in parse_identifier()
298 ehca_err(&shca->ib_device, "P/Q_Key mismatch."); in parse_identifier()
301 ehca_err(&shca->ib_device, "Sampling complete."); in parse_identifier()
304 ehca_err(&shca->ib_device, "Unaffiliated access error."); in parse_identifier()
307 ehca_err(&shca->ib_device, "Path migrating."); in parse_identifier()
310 ehca_err(&shca->ib_device, "Interface trace stopped."); in parse_identifier()
313 ehca_info(&shca->ib_device, "First error capture available"); in parse_identifier()
316 qp_event_callback(shca, eqe, IB_EVENT_SRQ_LIMIT_REACHED, 0); in parse_identifier()
319 ehca_err(&shca->ib_device, "Unknown identifier: %x on %s.", in parse_identifier()
320 identifier, shca->ib_device.name); in parse_identifier()
327 static void dispatch_port_event(struct ehca_shca *shca, int port_num, in dispatch_port_event() argument
332 ehca_info(&shca->ib_device, "port %d %s.", port_num, msg); in dispatch_port_event()
333 event.device = &shca->ib_device; in dispatch_port_event()
339 static void notify_port_conf_change(struct ehca_shca *shca, int port_num) in notify_port_conf_change() argument
342 struct ehca_sma_attr *old_attr = &shca->sport[port_num - 1].saved_attr; in notify_port_conf_change()
344 ehca_query_sma_attr(shca, port_num, &new_attr); in notify_port_conf_change()
348 dispatch_port_event(shca, port_num, IB_EVENT_SM_CHANGE, in notify_port_conf_change()
353 dispatch_port_event(shca, port_num, IB_EVENT_LID_CHANGE, in notify_port_conf_change()
359 dispatch_port_event(shca, port_num, IB_EVENT_PKEY_CHANGE, in notify_port_conf_change()
385 static void parse_ec(struct ehca_shca *shca, u64 eqe) in parse_ec() argument
390 struct ehca_sport *sport = &shca->sport[port - 1]; in parse_ec()
404 dispatch_port_event(shca, port, IB_EVENT_PORT_ACTIVE, in parse_ec()
406 ehca_query_sma_attr(shca, port, &sport->saved_attr); in parse_ec()
409 dispatch_port_event(shca, port, IB_EVENT_PORT_ERR, in parse_ec()
419 ehca_warn(&shca->ib_device, "disruptive port " in parse_ec()
423 dispatch_port_event(shca, port, IB_EVENT_PORT_ERR, in parse_ec()
427 dispatch_port_event(shca, port, IB_EVENT_PORT_ACTIVE, in parse_ec()
429 ehca_query_sma_attr(shca, port, in parse_ec()
432 notify_port_conf_change(shca, port); in parse_ec()
435 ehca_err(&shca->ib_device, "Adapter malfunction."); in parse_ec()
438 ehca_err(&shca->ib_device, "Traced stopped."); in parse_ec()
443 dispatch_port_event(shca, port, in parse_ec()
447 ehca_warn(&shca->ib_device, "Unknown util async " in parse_ec()
451 ehca_err(&shca->ib_device, "Unknown event code: %x on %s.", in parse_ec()
452 ec, shca->ib_device.name); in parse_ec()
472 struct ehca_shca *shca = (struct ehca_shca*)dev_id; in ehca_interrupt_neq() local
474 tasklet_hi_schedule(&shca->neq.interrupt_task); in ehca_interrupt_neq()
481 struct ehca_shca *shca = (struct ehca_shca*)data; in ehca_tasklet_neq() local
485 eqe = ehca_poll_eq(shca, &shca->neq); in ehca_tasklet_neq()
489 parse_ec(shca, eqe->entry); in ehca_tasklet_neq()
491 eqe = ehca_poll_eq(shca, &shca->neq); in ehca_tasklet_neq()
494 ret = hipz_h_reset_event(shca->ipz_hca_handle, in ehca_tasklet_neq()
495 shca->neq.ipz_eq_handle, 0xFFFFFFFFFFFFFFFFL); in ehca_tasklet_neq()
498 ehca_err(&shca->ib_device, "Can't clear notification events."); in ehca_tasklet_neq()
505 struct ehca_shca *shca = (struct ehca_shca*)dev_id; in ehca_interrupt_eq() local
507 tasklet_hi_schedule(&shca->eq.interrupt_task); in ehca_interrupt_eq()
513 static inline void process_eqe(struct ehca_shca *shca, struct ehca_eqe *eqe) in process_eqe() argument
520 ehca_dbg(&shca->ib_device, "eqe_value=%llx", eqe_value); in process_eqe()
522 ehca_dbg(&shca->ib_device, "Got completion event"); in process_eqe()
530 ehca_err(&shca->ib_device, in process_eqe()
544 ehca_dbg(&shca->ib_device, "Got non completion event"); in process_eqe()
545 parse_identifier(shca, eqe_value); in process_eqe()
549 void ehca_process_eq(struct ehca_shca *shca, int is_irq) in ehca_process_eq() argument
551 struct ehca_eq *eq = &shca->eq; in ehca_process_eq()
564 shca->ipz_hca_handle, eq->ist); in ehca_process_eq()
569 ehca_dbg(&shca->ib_device, "int_state=%x query_cnt=%x", in ehca_process_eq()
577 eqe_cache[eqe_cnt].eqe = ehca_poll_eq(shca, eq); in ehca_process_eq()
589 ehca_err(&shca->ib_device, in ehca_process_eq()
600 ehca_dbg(&shca->ib_device, in ehca_process_eq()
606 ehca_err(&shca->ib_device, in ehca_process_eq()
608 ehca_dbg(&shca->ib_device, "deadman found %x eqe", eqe_cnt); in ehca_process_eq()
611 ehca_dbg(&shca->ib_device, "too many eqes for one irq event"); in ehca_process_eq()
619 eq_empty = (!ipz_eqit_eq_peek_valid(&shca->eq.ipz_queue)); in ehca_process_eq()
633 ehca_dbg(&shca->ib_device, "Got non completion event"); in ehca_process_eq()
634 parse_identifier(shca, eq->eqe_cache[i].eqe->entry); in ehca_process_eq()
641 eqe = ehca_poll_eq(shca, &shca->eq); in ehca_process_eq()
644 process_eqe(shca, eqe); in ehca_process_eq()