Skip to content

Commit e552a78

Browse files
committed
Inlines account_data_region_memory_state().
1 parent 8ec5108 commit e552a78

File tree

2 files changed

+20
-28
lines changed

2 files changed

+20
-28
lines changed

program-runtime/src/serialization.rs

+11-23
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use {
88
solana_sbpf::{
99
aligned_memory::{AlignedMemory, Pod},
1010
ebpf::{HOST_ALIGN, MM_INPUT_START},
11-
memory_region::{MemoryRegion, MemoryState},
11+
memory_region::MemoryRegion,
1212
},
1313
solana_sdk_ids::bpf_loader_deprecated,
1414
solana_system_interface::MAX_PERMITTED_DATA_LENGTH,
@@ -102,16 +102,16 @@ impl Serializer {
102102
self.push_region();
103103
let vaddr = self.vaddr;
104104
if !account.get_data().is_empty() {
105-
let region = match account_data_region_memory_state(account) {
106-
MemoryState::Readable => {
107-
MemoryRegion::new_readonly(account.get_data(), self.vaddr)
108-
}
109-
MemoryState::Writable => {
110-
MemoryRegion::new_writable(account.get_data_mut()?, self.vaddr)
111-
}
112-
MemoryState::Cow(region_index) => {
113-
MemoryRegion::new_cow(account.get_data(), self.vaddr, region_index)
114-
}
105+
let region = if account.can_data_be_changed().is_err() {
106+
MemoryRegion::new_readonly(account.get_data(), self.vaddr)
107+
} else if account.is_shared() {
108+
MemoryRegion::new_cow(
109+
account.get_data(),
110+
self.vaddr,
111+
account.get_index_in_transaction() as u64,
112+
)
113+
} else {
114+
MemoryRegion::new_writable(account.get_data_mut()?, self.vaddr)
115115
};
116116
self.vaddr += region.len;
117117
self.regions.push(region);
@@ -607,18 +607,6 @@ fn deserialize_parameters_aligned<I: IntoIterator<Item = usize>>(
607607
Ok(())
608608
}
609609

610-
pub fn account_data_region_memory_state(account: &BorrowedAccount<'_>) -> MemoryState {
611-
if account.can_data_be_changed().is_ok() {
612-
if account.is_shared() {
613-
MemoryState::Cow(account.get_index_in_transaction() as u64)
614-
} else {
615-
MemoryState::Writable
616-
}
617-
} else {
618-
MemoryState::Readable
619-
}
620-
}
621-
622610
#[cfg(test)]
623611
#[allow(clippy::indexing_slicing)]
624612
mod tests {

programs/bpf_loader/src/syscalls/cpi.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ use {
55
solana_loader_v3_interface::instruction as bpf_loader_upgradeable,
66
solana_measure::measure::Measure,
77
solana_program_runtime::{
8-
invoke_context::SerializedAccountMetadata,
9-
serialization::{account_data_region_memory_state, ZEROED_REALLOC_PADDING},
8+
invoke_context::SerializedAccountMetadata, serialization::ZEROED_REALLOC_PADDING,
109
},
1110
solana_sbpf::{
1211
ebpf,
@@ -1273,9 +1272,14 @@ fn update_caller_account_perms(
12731272

12741273
let data_region = account_data_region(memory_mapping, *vm_data_addr, *original_data_len)?;
12751274
if let Some(region) = data_region {
1276-
region
1277-
.state
1278-
.set(account_data_region_memory_state(callee_account));
1275+
let memory_state = if callee_account.can_data_be_changed().is_err() {
1276+
MemoryState::Readable
1277+
} else if callee_account.is_shared() {
1278+
MemoryState::Cow(callee_account.get_index_in_transaction() as u64)
1279+
} else {
1280+
MemoryState::Writable
1281+
};
1282+
region.state.set(memory_state);
12791283
}
12801284
let realloc_region = account_realloc_region(
12811285
memory_mapping,

0 commit comments

Comments
 (0)