@@ -378,7 +378,12 @@ def initialize(self, device_ordinal: int) -> None:
378378 logger .info ("LocalHipDriver initialized (device %d)" , device_ordinal )
379379
380380 def allocate_exportable (
381- self , size : int , va : Optional [int ] = None
381+ self ,
382+ size : int ,
383+ va : Optional [int ] = None ,
384+ * ,
385+ access_va : Optional [int ] = None ,
386+ access_size : Optional [int ] = None ,
382387 ) -> LocalAllocation :
383388 """
384389 Allocate HIP VMem exportable as a DMA-BUF.
@@ -387,6 +392,8 @@ def allocate_exportable(
387392 granularity-aligned VA range containing [va, va + size).
388393 """
389394 self ._check_initialized ()
395+ if (access_va is None ) != (access_size is None ):
396+ raise LocalHipError ("access_va and access_size must be provided together" )
390397 props = self ._make_alloc_props ()
391398 granularity = self ._get_granularity ()
392399 alloc_size = _round_up (size , granularity )
@@ -418,7 +425,10 @@ def allocate_exportable(
418425 "hipMemMap" ,
419426 )
420427 mapped = True
421- self ._mem_set_access (mapped_va , alloc_size )
428+ self ._mem_set_access (
429+ int (access_va ) if access_va is not None else mapped_va ,
430+ int (access_size ) if access_size is not None else alloc_size ,
431+ )
422432 return LocalAllocation (
423433 va = mapped_va ,
424434 size = alloc_size ,
@@ -509,10 +519,19 @@ def export_handle(self, allocation: LocalAllocation) -> bytes:
509519 return self ._export_range (allocation .va , allocation .size )
510520
511521 def import_and_map (
512- self , peer_rank : int , handle_bytes : bytes , size : int , va : Optional [int ] = None
522+ self ,
523+ peer_rank : int ,
524+ handle_bytes : bytes ,
525+ size : int ,
526+ va : Optional [int ] = None ,
527+ * ,
528+ access_va : Optional [int ] = None ,
529+ access_size : Optional [int ] = None ,
513530 ) -> PeerMapping :
514531 """Import a DMA-BUF descriptor and map it into local GPU address space."""
515532 self ._check_initialized ()
533+ if (access_va is None ) != (access_size is None ):
534+ raise LocalHipError ("access_va and access_size must be provided together" )
516535 if len (handle_bytes ) != _AMD_HANDLE_BYTES :
517536 raise LocalHipError (
518537 f"AMD local handle must be { _AMD_HANDLE_BYTES } bytes, got { len (handle_bytes )} "
@@ -548,7 +567,10 @@ def import_and_map(
548567 "hipMemMap" ,
549568 )
550569 mapped = True
551- self ._mem_set_access (mapped_va , size )
570+ self ._mem_set_access (
571+ int (access_va ) if access_va is not None else mapped_va ,
572+ int (access_size ) if access_size is not None else size ,
573+ )
552574 return PeerMapping (
553575 peer_rank = peer_rank ,
554576 transport = InterconnectLevel .INTRA_NODE ,
0 commit comments