pub struct EfaQueuePair { /* private fields */ }Expand description
An EFA SRD queue pair, created through efadv_create_qp_ex and driven by the
extended work-request builder reached via ibv_qp_to_qp_ex.
SRD is a driver queue-pair type that the device runs through the unreliable
datagram state machine, so this shares almost nothing with the
reliable-connected path: the connection handshake carries a queue key rather
than access flags, and each work request supplies its own destination. Only
endpoint discovery, state queries, and completion polling are common, and
those delegate to the shared helpers in super::queue_pair.
Single-owner: it owns the [IbvQp] — which in turn owns its two completion
queues and the protection domain — and destroys them on drop, so the type is
intentionally !Clone.
Trait Implementations§
Source§impl Debug for EfaQueuePair
impl Debug for EfaQueuePair
Source§impl IbvQueuePair for EfaQueuePair
impl IbvQueuePair for EfaQueuePair
Source§unsafe fn new<I: IbvDomainImpl<QueuePair = Self>>(
domain: &IbvDomain<I>,
config: IbvConfig,
send_cq: Arc<IbvCq>,
recv_cq: Arc<IbvCq>,
) -> Result<Self, Error>
unsafe fn new<I: IbvDomainImpl<QueuePair = Self>>( domain: &IbvDomain<I>, config: IbvConfig, send_cq: Arc<IbvCq>, recv_cq: Arc<IbvCq>, ) -> Result<Self, Error>
Creates a queue pair against
domain in the RESET state, reporting its
completions on send_cq and recv_cq; Self::connect transitions it
to RTS before use. Read moreSource§fn connect(&mut self, info: &IbvQpInfo) -> Result<(), Error>
fn connect(&mut self, info: &IbvQpInfo) -> Result<(), Error>
Transitions the QP through
INIT -> RTR -> RTS, connected to info.Source§fn get_qp_info(&mut self) -> Result<IbvQpInfo, Error>
fn get_qp_info(&mut self) -> Result<IbvQpInfo, Error>
Returns the local endpoint other peers need in order to connect to this
QP.
Source§fn max_msg_size(&self) -> usize
fn max_msg_size(&self) -> usize
Largest transfer this QP issues as a single work request;
Self::put
and Self::get split anything larger into that many WRs. The owning
[QueuePairActor] budgets send-queue credits against this value, so an
implementation that chunks more finely must report it here or it will
over-commit the send queue.Source§fn put(
&mut self,
remote_dst: IbvRemoteMemoryRegionView,
local_src: IbvMemoryRegionView,
) -> Result<Vec<u64>, Error>
fn put( &mut self, remote_dst: IbvRemoteMemoryRegionView, local_src: IbvMemoryRegionView, ) -> Result<Vec<u64>, Error>
Post an RDMA WRITE of
local_src into remote_dst. The request may
be chunked into multiple WRs. This method returns the list of WR ids
that were posted.Source§fn get(
&mut self,
local_dst: IbvMemoryRegionView,
remote_src: IbvRemoteMemoryRegionView,
) -> Result<Vec<u64>, Error>
fn get( &mut self, local_dst: IbvMemoryRegionView, remote_src: IbvRemoteMemoryRegionView, ) -> Result<Vec<u64>, Error>
Post an RDMA READ of
remote_src into local_dst. The request may
be chunked into multiple WRs. This method returns the list of WR ids
that were posted.Auto Trait Implementations§
impl Freeze for EfaQueuePair
impl RefUnwindSafe for EfaQueuePair
impl Send for EfaQueuePair
impl Sync for EfaQueuePair
impl Unpin for EfaQueuePair
impl UnsafeUnpin for EfaQueuePair
impl UnwindSafe for EfaQueuePair
Blanket Implementations§
impl<T> Allocation for T
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Applies the layer to a service and wraps it in [
Layered].