Lines Matching full:let
145 let ancestors_i = self in validate_parent_fixup()
151 let sg_idx = self.ancestors[ancestors_i]; in validate_parent_fixup()
152 let sg_entry = match self.sg_entries.get(sg_idx) { in validate_parent_fixup()
172 let new_min_offset = parent_offset.checked_add(length).ok_or(EINVAL)?; in validate_parent_fixup()
181 let target_offset = sg_entry.offset.checked_add(parent_offset).ok_or(EINVAL)?; in validate_parent_fixup()
207 let size = ptr_align(size).ok_or(EINVAL)?; in claim_next()
208 let new_offset = self.offset.checked_add(size).ok_or(EINVAL)?; in claim_next()
211 let offset = self.offset; in claim_next()
298 let ret = self.work_list.pop_front(); in pop_work()
314 if let Ok(work) = ListArc::try_from_arc(self.reply_work.clone()) { in push_reply_work()
323 if let Ok(work) = ListArc::try_from_arc(self.return_work.clone()) { in push_return_work()
343 let transaction = self.current_transaction.take().ok_or(EINVAL)?; in pop_transaction_to_reply()
440 let inner = InnerThread::new()?; in new()
458 let inner = self.inner.lock(); in debug_print()
470 let mut t_opt = inner.current_transaction.as_ref(); in debug_print()
471 while let Some(t) = t_opt { in debug_print()
491 let mut writer = data.writer(); in get_extended_error()
492 let ee = self.inner.lock().extended_error; in get_extended_error()
510 let mut inner = self.inner.lock(); in get_work_local()
522 let mut inner = self.inner.lock(); in get_work_local()
524 if let Some(work) = inner.pop_work() { in get_work_local()
529 let signal_pending = self.work_condvar.wait_interruptible_freezable(&mut inner); in get_work_local()
549 let mut inner = self.inner.lock(); in get_work()
550 if let Some(work) = inner.pop_work() { in get_work()
568 let reg = match self.process.get_work_or_register(self) { in get_work()
573 let mut inner = self.inner.lock(); in get_work()
575 if let Some(work) = inner.pop_work() { in get_work()
580 let signal_pending = self.work_condvar.wait_interruptible_freezable(&mut inner); in get_work()
591 let res = match self.inner.lock().pop_work() { in get_work()
605 let sync = work.should_sync_wakeup(); in push_work()
607 let res = self.inner.lock().push_work(work); in push_work()
623 let mut inner = self.inner.lock(); in push_work_if_looper()
652 let strong = obj.hdr.type_ == BINDER_TYPE_BINDER; in translate_object()
655 let ptr = unsafe { obj.__bindgen_anon_1.binder } as _; in translate_object()
656 let cookie = obj.cookie as _; in translate_object()
657 let flags = obj.flags as _; in translate_object()
658 let node = self in translate_object()
666 let strong = obj.hdr.type_ == BINDER_TYPE_HANDLE; in translate_object()
668 let handle = unsafe { obj.__bindgen_anon_1.handle } as _; in translate_object()
669 let node = self.process.get_node_from_handle(handle, strong)?; in translate_object()
679 let fd = unsafe { obj.__bindgen_anon_1.fd }; in translate_object()
680 let file = LocalFile::fget(fd)?; in translate_object()
683 let file = unsafe { LocalFile::assume_no_fdget_pos(file) }; in translate_object()
690 let mut obj_write = BinderFdObject::default(); in translate_object()
700 let field_offset = offset + FD_FIELD_OFFSET; in translate_object()
705 let obj_length = obj.length.try_into().map_err(|_| EINVAL)?; in translate_object()
706 let alloc_offset = match sg_state.unused_buffer_space.claim_next(obj_length) { in translate_object()
719 let sg_state_idx = sg_state.sg_entries.len(); in translate_object()
732 let buffer_ptr_in_user_space = (view.alloc.ptr + alloc_offset) as u64; in translate_object()
741 let parent_index = usize::try_from(obj.parent).map_err(|_| EINVAL)?; in translate_object()
742 let parent_offset = usize::try_from(obj.parent_offset).map_err(|_| EINVAL)?; in translate_object()
744 let info = sg_state.validate_parent_fixup( in translate_object()
753 let parent_entry = match sg_state.sg_entries.get_mut(info.parent_sg_index) { in translate_object()
774 let mut obj_write = BinderBufferObject::default(); in translate_object()
787 let parent_index = usize::try_from(obj.parent).map_err(|_| EINVAL)?; in translate_object()
788 let parent_offset = usize::try_from(obj.parent_offset).map_err(|_| EINVAL)?; in translate_object()
789 let num_fds = usize::try_from(obj.num_fds).map_err(|_| EINVAL)?; in translate_object()
790 let fds_len = num_fds.checked_mul(size_of::<u32>()).ok_or(EINVAL)?; in translate_object()
792 let info = sg_state.validate_parent_fixup(parent_index, parent_offset, fds_len)?; in translate_object()
796 let parent_entry = match sg_state.sg_entries.get_mut(info.parent_sg_index) { in translate_object()
819 let fda_uaddr = parent_entry in translate_object()
823 let mut fda_bytes = KVec::new(); in translate_object()
833 let fd = { in translate_object()
834 let mut fd_bytes = [0u8; size_of::<u32>()]; in translate_object()
839 let file = LocalFile::fget(fd)?; in translate_object()
842 let file = unsafe { LocalFile::assume_no_fdget_pos(file) }; in translate_object()
855 let mut obj_write = BinderFdArrayObject::default(); in translate_object()
868 let mut end_of_previous_fixup = sg_entry.offset; in apply_sg()
869 let offset_end = sg_entry.offset.checked_add(sg_entry.length).ok_or(EINVAL)?; in apply_sg()
871 let mut reader = in apply_sg()
874 let fixup_len = if fixup.skip == 0 { in apply_sg()
880 let target_offset_end = fixup.target_offset.checked_add(fixup_len).ok_or(EINVAL)?; in apply_sg()
892 let copy_off = end_of_previous_fixup; in apply_sg()
893 let copy_len = fixup.target_offset - end_of_previous_fixup; in apply_sg()
894 if let Err(err) = alloc.copy_into(&mut reader, copy_off, copy_len) { in apply_sg()
899 let res = alloc.write::<u64>(fixup.target_offset, &fixup.pointer_value); in apply_sg()
900 if let Err(err) = res { in apply_sg()
905 if let Err(err) = reader.skip(fixup_len) { in apply_sg()
911 let copy_off = end_of_previous_fixup; in apply_sg()
912 let copy_len = offset_end - end_of_previous_fixup; in apply_sg()
913 if let Err(err) = alloc.copy_into(&mut reader, copy_off, copy_len) { in apply_sg()
934 let trd = &tr.transaction_data; in copy_transaction_data()
935 let is_oneway = trd.flags & TF_ONE_WAY != 0; in copy_transaction_data()
936 let mut secctx = if let Some(offset) = txn_security_ctx_offset { in copy_transaction_data()
937 let secid = self.process.cred.get_secid(); in copy_transaction_data()
938 let ctx = match security::SecurityCtx::from_secid(secid) { in copy_transaction_data()
950 let data_size = trd.data_size.try_into().map_err(|_| EINVAL)?; in copy_transaction_data()
951 let aligned_data_size = ptr_align(data_size).ok_or(EINVAL)?; in copy_transaction_data()
952 let offsets_size = trd.offsets_size.try_into().map_err(|_| EINVAL)?; in copy_transaction_data()
953 let aligned_offsets_size = ptr_align(offsets_size).ok_or(EINVAL)?; in copy_transaction_data()
954 let buffers_size = tr.buffers_size.try_into().map_err(|_| EINVAL)?; in copy_transaction_data()
955 let aligned_buffers_size = ptr_align(buffers_size).ok_or(EINVAL)?; in copy_transaction_data()
956 let aligned_secctx_size = match secctx.as_ref() { in copy_transaction_data()
962 let len = usize::max( in copy_transaction_data()
970 let secctx_off = aligned_data_size + aligned_offsets_size + aligned_buffers_size; in copy_transaction_data()
971 let mut alloc = in copy_transaction_data()
986 let trd_data_ptr = unsafe { &trd.data.ptr }; in copy_transaction_data()
987 let mut buffer_reader = in copy_transaction_data()
989 let mut end_of_previous_object = 0; in copy_transaction_data()
990 let mut sg_state = None; in copy_transaction_data()
995 let mut reader = in copy_transaction_data()
1001 let offsets_start = aligned_data_size; in copy_transaction_data()
1002 let offsets_end = aligned_data_size + aligned_offsets_size; in copy_transaction_data()
1005 let sg_state = sg_state.insert(ScatterGatherState { in copy_transaction_data()
1015 let mut view = AllocationView::new(&mut alloc, data_size); in copy_transaction_data()
1020 let offset = view.alloc.read(index_offset)?; in copy_transaction_data()
1036 let mut object = BinderObject::read_from(&mut buffer_reader)?; in copy_transaction_data()
1054 let offset_after_object = index_offset + size_of::<usize>(); in copy_transaction_data()
1067 if let Some(sg_state) = sg_state.as_mut() { in copy_transaction_data()
1068 if let Err(err) = self.apply_sg(&mut alloc, sg_state) { in copy_transaction_data()
1074 if let Some((off_out, secctx)) = secctx.as_mut() { in copy_transaction_data()
1075 if let Err(err) = alloc.write(secctx_off, secctx.as_bytes()) { in copy_transaction_data()
1085 let mut thread = self.clone(); in unwind_transaction_stack()
1086 while let Ok(transaction) = { in unwind_transaction_stack()
1087 let mut inner = thread.inner.lock(); in unwind_transaction_stack()
1090 let reply = Err(BR_DEAD_REPLY); in unwind_transaction_stack()
1119 if let Ok(transaction) = &reply { in deliver_single_reply()
1124 let mut inner = self.inner.lock(); in deliver_single_reply()
1148 let inner = self.inner.lock(); in is_current_transaction()
1159 let inner = self.inner.lock(); in top_of_transaction_stack()
1160 if let Some(cur) = &inner.current_transaction { in top_of_transaction_stack()
1175 if let Err(err) = inner(self, tr) { in transaction()
1177 let mut ee = self.inner.lock().extended_error; in transaction()
1193 let handle = unsafe { tr.transaction_data.target.handle }; in transaction_inner()
1194 let node_ref = self.process.get_transaction_node(handle)?; in transaction_inner()
1198 let top = self.top_of_transaction_stack()?; in transaction_inner()
1199 let list_completion = DTRWrap::arc_try_new(DeliverCode::new(BR_TRANSACTION_COMPLETE))?; in transaction_inner()
1200 let completion = list_completion.clone_arc(); in transaction_inner()
1201 let transaction = Transaction::new(node_ref, top, self, tr)?; in transaction_inner()
1206 let mut inner = self.inner.lock(); in transaction_inner()
1217 if let Err(e) = transaction.submit() { in transaction_inner()
1220 let transaction; in transaction_inner()
1221 let mut inner = self.inner.lock(); in transaction_inner()
1231 let orig = self.inner.lock().pop_transaction_to_reply(self)?; in reply_inner()
1237 let out = (|| -> BinderResult<_> { in reply_inner()
1238 let completion = DTRWrap::arc_try_new(DeliverCode::new(BR_TRANSACTION_COMPLETE))?; in reply_inner()
1239 let process = orig.from.process.clone(); in reply_inner()
1240 let allow_fds = orig.flags & TF_ACCEPT_FDS != 0; in reply_inner()
1241 let reply = Transaction::new_reply(self, process, tr, allow_fds)?; in reply_inner()
1247 // At this point we only return `BR_TRANSACTION_COMPLETE` to the caller, and we must let in reply_inner()
1253 let reply = Err(BR_FAILED_REPLY); in reply_inner()
1265 let handle = unsafe { tr.transaction_data.target.handle }; in oneway_transaction_inner()
1266 let node_ref = self.process.get_transaction_node(handle)?; in oneway_transaction_inner()
1268 let transaction = Transaction::new(node_ref, None, self, tr)?; in oneway_transaction_inner()
1269 let code = if self.process.is_oneway_spam_detection_enabled() in oneway_transaction_inner()
1276 let list_completion = DTRWrap::arc_try_new(DeliverCode::new(code))?; in oneway_transaction_inner()
1277 let completion = list_completion.clone_arc(); in oneway_transaction_inner()
1289 let write_start = req.write_buffer.wrapping_add(req.write_consumed); in write()
1290 let write_len = req.write_size.saturating_sub(req.write_consumed); in write()
1291 let mut reader = in write()
1295 let before = reader.len(); in write()
1296 let cmd = reader.read::<u32>()?; in write()
1301 let tr = reader.read::<BinderTransactionData>()?.with_buffers_size(0); in write()
1309 let tr = reader.read::<BinderTransactionDataSg>()?; in write()
1317 let tr = reader.read::<BinderTransactionData>()?.with_buffers_size(0); in write()
1321 let tr = reader.read::<BinderTransactionDataSg>()?; in write()
1325 let buffer = self.process.buffer_get(reader.read()?); in write()
1326 if let Some(buffer) = buffer { in write()
1359 let valid = self.process.register_thread(); in write()
1380 let read_start = req.read_buffer.wrapping_add(req.read_consumed); in read()
1381 let read_len = req.read_size.saturating_sub(req.read_consumed); in read()
1382 let mut writer = BinderReturnWriter::new( in read()
1386 let (in_pool, use_proc_queue) = { in read()
1387 let inner = self.inner.lock(); in read()
1391 let getter = if use_proc_queue { in read()
1399 let mut has_noop_placeholder = false; in read()
1401 if let Err(err) = writer.write_code(BR_NOOP) { in read()
1409 let initial_len = writer.len(); in read()
1440 let mut writer = in read()
1449 let (mut reader, mut writer) = data.reader_writer(); in write_read()
1450 let mut req = reader.read::<BinderWriteRead>()?; in write_read()
1453 let mut ret = Ok(()); in write_read()
1456 if let Err(err) = ret { in write_read()
1491 let mut inner = self.inner.lock(); in poll()
1497 let mut inner = self.inner.lock(); in exit_looper()
1498 let should_notify = inner.looper_flags & LOOPER_WAITING != 0; in exit_looper()
1511 let inner = self.inner.lock(); in notify_if_poll_ready()
1512 let notify = inner.looper_flags & LOOPER_POLL != 0 && inner.should_use_process_work_queue(); in notify_if_poll_ready()
1532 while let Ok(Some(work)) = self.get_work_local(false) { in release()
1569 let code = self.error_code.load(Ordering::Relaxed); in do_work()