@@ -42,9 +42,16 @@ static uint64_t mqd_stride_v9(struct mqd_manager *mm,
4242 struct queue_properties * q )
4343{
4444 if (mm -> dev -> kfd -> cwsr_enabled &&
45- q -> type == KFD_QUEUE_TYPE_COMPUTE )
46- return ALIGN (q -> ctl_stack_size , PAGE_SIZE ) +
47- ALIGN (sizeof (struct v9_mqd ), PAGE_SIZE );
45+ q -> type == KFD_QUEUE_TYPE_COMPUTE ) {
46+
47+ /* On gfxv9, the MQD resides in the first 4K page,
48+ * followed by the control stack. Align both to
49+ * AMDGPU_GPU_PAGE_SIZE to maintain the required 4K boundary.
50+ */
51+
52+ return ALIGN (ALIGN (q -> ctl_stack_size , AMDGPU_GPU_PAGE_SIZE ) +
53+ ALIGN (sizeof (struct v9_mqd ), AMDGPU_GPU_PAGE_SIZE ), PAGE_SIZE );
54+ }
4855
4956 return mm -> mqd_size ;
5057}
@@ -151,8 +158,8 @@ static struct kfd_mem_obj *allocate_mqd(struct mqd_manager *mm,
151158 if (!mqd_mem_obj )
152159 return NULL ;
153160 retval = amdgpu_amdkfd_alloc_kernel_mem (node -> adev ,
154- (ALIGN (q -> ctl_stack_size , PAGE_SIZE ) +
155- ALIGN (sizeof (struct v9_mqd ), PAGE_SIZE )) *
161+ (ALIGN (ALIGN ( q -> ctl_stack_size , AMDGPU_GPU_PAGE_SIZE ) +
162+ ALIGN (sizeof (struct v9_mqd ), AMDGPU_GPU_PAGE_SIZE ), PAGE_SIZE )) *
156163 NUM_XCC (node -> xcc_mask ),
157164 mqd_on_vram (node -> adev ) ? AMDGPU_GEM_DOMAIN_VRAM :
158165 AMDGPU_GEM_DOMAIN_GTT ,
@@ -360,7 +367,7 @@ static int get_wave_state(struct mqd_manager *mm, void *mqd,
360367 struct kfd_context_save_area_header header ;
361368
362369 /* Control stack is located one page after MQD. */
363- void * mqd_ctl_stack = (void * )((uintptr_t )mqd + PAGE_SIZE );
370+ void * mqd_ctl_stack = (void * )((uintptr_t )mqd + AMDGPU_GPU_PAGE_SIZE );
364371
365372 m = get_mqd (mqd );
366373
@@ -397,7 +404,7 @@ static void checkpoint_mqd(struct mqd_manager *mm, void *mqd, void *mqd_dst, voi
397404{
398405 struct v9_mqd * m ;
399406 /* Control stack is located one page after MQD. */
400- void * ctl_stack = (void * )((uintptr_t )mqd + PAGE_SIZE );
407+ void * ctl_stack = (void * )((uintptr_t )mqd + AMDGPU_GPU_PAGE_SIZE );
401408
402409 m = get_mqd (mqd );
403410
@@ -443,7 +450,7 @@ static void restore_mqd(struct mqd_manager *mm, void **mqd,
443450 * gart_addr = addr ;
444451
445452 /* Control stack is located one page after MQD. */
446- ctl_stack = (void * )((uintptr_t )* mqd + PAGE_SIZE );
453+ ctl_stack = (void * )((uintptr_t )* mqd + AMDGPU_GPU_PAGE_SIZE );
447454 memcpy (ctl_stack , ctl_stack_src , ctl_stack_size );
448455
449456 m -> cp_hqd_pq_doorbell_control =
0 commit comments