david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

Don't use the mailboxless version of the HW2SW_CQ command; it seems to

crash the machine.
This commit is contained in:
Michael Brown 2007-09-17 19:47:19 +01:00
parent 12b4cb964b
commit f3fcb53faf
1 changed files with 7 additions and 4 deletions

View File

@ -225,10 +225,12 @@ arbel_cmd_sw2hw_cq ( struct arbel *arbel, unsigned long cqn,
} }
static inline int static inline int
arbel_cmd_hw2sw_cq ( struct arbel *arbel, unsigned long cqn ) { arbel_cmd_hw2sw_cq ( struct arbel *arbel, unsigned long cqn,
struct arbelprm_completion_queue_context *cqctx) {
return arbel_cmd ( arbel, return arbel_cmd ( arbel,
ARBEL_HCR_VOID_CMD ( ARBEL_HCR_HW2SW_CQ ), ARBEL_HCR_OUT_CMD ( ARBEL_HCR_HW2SW_CQ,
1, NULL, cqn, NULL ); 1, sizeof ( *cqctx ) ),
0, NULL, cqn, cqctx );
} }
static inline int static inline int
@ -421,13 +423,14 @@ static void arbel_destroy_cq ( struct ib_device *ibdev,
struct ib_completion_queue *cq ) { struct ib_completion_queue *cq ) {
struct arbel *arbel = ibdev->dev_priv; struct arbel *arbel = ibdev->dev_priv;
struct arbel_completion_queue *arbel_cq = cq->dev_priv; struct arbel_completion_queue *arbel_cq = cq->dev_priv;
struct arbelprm_completion_queue_context cqctx;
struct arbelprm_cq_ci_db_record *ci_db_rec; struct arbelprm_cq_ci_db_record *ci_db_rec;
struct arbelprm_cq_arm_db_record *arm_db_rec; struct arbelprm_cq_arm_db_record *arm_db_rec;
int cqn_offset; int cqn_offset;
int rc; int rc;
/* Take ownership back from hardware */ /* Take ownership back from hardware */
if ( ( rc = arbel_cmd_hw2sw_cq ( arbel, cq->cqn ) ) != 0 ) { if ( ( rc = arbel_cmd_hw2sw_cq ( arbel, cq->cqn, &cqctx ) ) != 0 ) {
DBGC ( arbel, "Arbel %p FATAL HW2SW_CQ failed on CQN %#lx: " DBGC ( arbel, "Arbel %p FATAL HW2SW_CQ failed on CQN %#lx: "
"%s\n", arbel, cq->cqn, strerror ( rc ) ); "%s\n", arbel, cq->cqn, strerror ( rc ) );
/* Leak memory and return; at least we avoid corruption */ /* Leak memory and return; at least we avoid corruption */