ibverbs_rs/multi_channel/ops/
unpolled_ops.rs1use crate::channel::PendingWork;
2use crate::ibverbs::error::IbvResult;
3use crate::ibverbs::work::SendWorkRequest;
4use crate::multi_channel::MultiChannel;
5use crate::multi_channel::work_request::*;
6
7impl MultiChannel {
8 pub unsafe fn scatter_send_unpolled<'wr, 'data, I>(
13 &mut self,
14 wrs: I,
15 ) -> IbvResult<Vec<PendingWork<'data>>>
16 where
17 I: IntoIterator<Item = PeerSendWorkRequest<'wr, 'data>>,
18 'data: 'wr,
19 {
20 wrs.into_iter()
21 .map(|wr| unsafe { self.send_unpolled(wr) })
22 .collect()
23 }
24
25 pub unsafe fn scatter_write_unpolled<'wr, 'data, I>(
30 &mut self,
31 wrs: I,
32 ) -> IbvResult<Vec<PendingWork<'data>>>
33 where
34 I: IntoIterator<Item = PeerWriteWorkRequest<'wr, 'data>>,
35 'data: 'wr,
36 {
37 wrs.into_iter()
38 .map(|wr| unsafe { self.write_unpolled(wr) })
39 .collect()
40 }
41
42 pub unsafe fn gather_receive_unpolled<'wr, 'data, I>(
47 &mut self,
48 wrs: I,
49 ) -> IbvResult<Vec<PendingWork<'data>>>
50 where
51 I: IntoIterator<Item = PeerReceiveWorkRequest<'wr, 'data>>,
52 'data: 'wr,
53 {
54 wrs.into_iter()
55 .map(|wr| unsafe { self.receive_unpolled(wr) })
56 .collect()
57 }
58
59 pub unsafe fn gather_read_unpolled<'wr, 'data, I>(
64 &mut self,
65 wrs: I,
66 ) -> IbvResult<Vec<PendingWork<'data>>>
67 where
68 I: IntoIterator<Item = PeerReadWorkRequest<'wr, 'data>>,
69 'data: 'wr,
70 {
71 wrs.into_iter()
72 .map(|wr| unsafe { self.read_unpolled(wr) })
73 .collect()
74 }
75
76 pub unsafe fn multicast_send_unpolled<'wr, 'data, I>(
81 &mut self,
82 peers: I,
83 wr: SendWorkRequest<'wr, 'data>,
84 ) -> IbvResult<Vec<PendingWork<'data>>>
85 where
86 I: IntoIterator<Item = usize>,
87 {
88 peers
89 .into_iter()
90 .map(|peer| unsafe {
91 self.send_unpolled(PeerSendWorkRequest::from_wr(peer, wr.clone()))
92 })
93 .collect()
94 }
95}