static int initialize_cpsch(struct device_queue_manager *dqm)
 {
+       uint64_t num_sdma_queues;
+       uint64_t num_xgmi_sdma_queues;
+
        pr_debug("num of pipes: %d\n", get_pipes_per_mec(dqm));
 
        mutex_init(&dqm->lock_hidden);
        dqm->active_cp_queue_count = 0;
        dqm->gws_queue_count = 0;
        dqm->active_runlist = false;
-       dqm->sdma_bitmap = ~0ULL >> (64 - get_num_sdma_queues(dqm));
-       dqm->xgmi_sdma_bitmap = ~0ULL >> (64 - get_num_xgmi_sdma_queues(dqm));
+
+       num_sdma_queues = get_num_sdma_queues(dqm);
+       if (num_sdma_queues >= BITS_PER_TYPE(dqm->sdma_bitmap))
+               dqm->sdma_bitmap = ULLONG_MAX;
+       else
+               dqm->sdma_bitmap = (BIT_ULL(num_sdma_queues) - 1);
+
+       num_xgmi_sdma_queues = get_num_xgmi_sdma_queues(dqm);
+       if (num_xgmi_sdma_queues >= BITS_PER_TYPE(dqm->xgmi_sdma_bitmap))
+               dqm->xgmi_sdma_bitmap = ULLONG_MAX;
+       else
+               dqm->xgmi_sdma_bitmap = (BIT_ULL(num_xgmi_sdma_queues) - 1);
 
        INIT_WORK(&dqm->hw_exception_work, kfd_process_hw_exception);