@@ -9,7 +9,8 @@ use core::num::{NonZeroU16, NonZeroUsize};
99mod arch;
1010
1111pub use arch:: {
12- SCRATCH_TOP_GPA , SCRATCH_TOP_GVA , SNAPSHOT_PT_GVA_MAX , SNAPSHOT_PT_GVA_MIN , io_page,
12+ SCRATCH_TOP_GPA , SCRATCH_TOP_GVA , SNAPSHOT_PT_GVA_MAX , SNAPSHOT_PT_GVA_MIN ,
13+ VIRTQ_BUFFER_GVA_END , VIRTQ_BUFFER_GVA_START , io_page,
1314} ;
1415
1516use crate :: virtq;
@@ -100,6 +101,21 @@ const _: () = {
100101 assert ! ( SCRATCH_TOP_H2G_POOL_PAGES_OFFSET == 0x60 ) ;
101102 assert ! ( SCRATCH_TOP_H2G_BUFFER_SIZE_OFFSET == 0x68 ) ;
102103 assert ! ( SCRATCH_TOP_EXN_STACK_OFFSET == 0x70 ) ;
104+
105+ assert ! ( VIRTQ_BUFFER_GVA_START < VIRTQ_BUFFER_GVA_END ) ;
106+ assert ! ( ( VIRTQ_BUFFER_GVA_START as usize ) . is_multiple_of( crate :: vmem:: PAGE_SIZE ) ) ;
107+ assert ! ( ( VIRTQ_BUFFER_GVA_END as usize ) . is_multiple_of( crate :: vmem:: PAGE_SIZE ) ) ;
108+ assert ! ( VIRTQ_BUFFER_GVA_START > SNAPSHOT_PT_GVA_MAX as u64 ) ;
109+
110+ #[ cfg( target_arch = "x86_64" ) ]
111+ assert ! ( VIRTQ_BUFFER_GVA_START >> 47 == 0x1ffff ) ;
112+ #[ cfg( target_arch = "x86_64" ) ]
113+ assert ! ( ( VIRTQ_BUFFER_GVA_END - 1 ) >> 47 == 0x1ffff ) ;
114+ #[ cfg( target_arch = "aarch64" ) ]
115+ assert ! ( VIRTQ_BUFFER_GVA_END <= 1 << 48 ) ;
116+
117+ assert ! ( VIRTQ_BUFFER_GVA_END < scratch_base_gva( 16 * 1024 * 1024 * 1024 ) ) ;
118+ assert ! ( ( SCRATCH_TOP_GPA as u64 ) < VIRTQ_BUFFER_GVA_END - VIRTQ_BUFFER_GVA_START ) ;
103119} ;
104120
105121/// Exclusive upper GPA boundary for dynamic scratch allocations.
@@ -110,7 +126,7 @@ pub const fn scratch_allocator_limit_gpa() -> u64 {
110126pub fn scratch_base_gpa ( size : usize ) -> u64 {
111127 ( SCRATCH_TOP_GPA - size + 1 ) as u64
112128}
113- pub fn scratch_base_gva ( size : usize ) -> u64 {
129+ pub const fn scratch_base_gva ( size : usize ) -> u64 {
114130 ( SCRATCH_TOP_GVA - size + 1 ) as u64
115131}
116132
0 commit comments