---
name: "ibv_create_cq"
section: "3"
platform: "linux"
package: "rdma-core"
version: "65.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/ibv_create_cq"
---

# ibv\_create\_cq(3)

create or destroy a completion queue (CQ)

## NAME

ibv\_create\_cq, ibv\_destroy\_cq - create or destroy a completion queue (CQ)

## SYNOPSIS

```
#include <infiniband/verbs.h>

struct ibv_cq *ibv_create_cq(struct ibv_context *context, int cqe,
                             void *cq_context,
                             struct ibv_comp_channel *channel,
                             int comp_vector);

int ibv_destroy_cq(struct ibv_cq *cq);
```

## DESCRIPTION

**ibv\_create\_cq()** creates a completion queue (CQ) with at least *cqe* entries for the RDMA device context *context.* The pointer *cq\_context* will be used to set user context pointer of the CQ structure. The argument *channel* is optional; if not NULL, the completion channel *channel* will be used to return completion events.  The CQ will use the completion vector *comp\_vector* for signaling completion events; it must be at least zero and less than *context-\>num\_comp\_vectors.*

**ibv\_destroy\_cq()** destroys the CQ *cq.*

## RETURN VALUE

**ibv\_create\_cq()** returns a pointer to the CQ, or NULL if the request fails, and errno is set to indicate the reason.

**ibv\_destroy\_cq()** returns 0 on success, or the value of errno on failure (which indicates the failure reason).

## NOTES

**ibv\_create\_cq()** may create a CQ with size greater than or equal to the requested size. Check the cqe attribute in the returned CQ for the actual size.

**ibv\_destroy\_cq()** fails if any queue pair is still associated with this CQ.

## SEE ALSO

[**ibv\_resize\_cq**(3)](/ibv_resize_cq/3.md), [**ibv\_req\_notify\_cq**(3)](/ibv_req_notify_cq/3.md), [**ibv\_ack\_cq\_events**(3)](/ibv_ack_cq_events/3.md), [**ibv\_create\_qp**(3)](/ibv_create_qp/3.md)

## AUTHORS

- Dotan Barak \<dotanba@gmail.com\>
