dqm->active_cp_queue_count--;
 }
 
-int read_sdma_queue_counter(uint64_t q_rptr, uint64_t *val)
-{
-       int ret;
-       uint64_t tmp = 0;
-
-       if (!val)
-               return -EINVAL;
-       /*
-        * SDMA activity counter is stored at queue's RPTR + 0x8 location.
-        */
-       if (!access_ok((const void __user *)(q_rptr +
-                                       sizeof(uint64_t)), sizeof(uint64_t))) {
-               pr_err("Can't access sdma queue activity counter\n");
-               return -EFAULT;
-       }
-
-       ret = get_user(tmp, (uint64_t *)(q_rptr + sizeof(uint64_t)));
-       if (!ret) {
-               *val = tmp;
-       }
-
-       return ret;
-}
-
 static int allocate_doorbell(struct qcm_process_device *qpd, struct queue *q)
 {
        struct kfd_dev *dev = qpd->dqm->dev;
        /* Get the SDMA queue stats */
        if ((q->properties.type == KFD_QUEUE_TYPE_SDMA) ||
            (q->properties.type == KFD_QUEUE_TYPE_SDMA_XGMI)) {
-               retval = read_sdma_queue_counter((uint64_t)q->properties.read_ptr,
+               retval = read_sdma_queue_counter((uint64_t __user *)q->properties.read_ptr,
                                                        &sdma_val);
                if (retval)
                        pr_err("Failed to read SDMA queue counter for queue: %d\n",
        /* Get the SDMA queue stats */
        if ((q->properties.type == KFD_QUEUE_TYPE_SDMA) ||
            (q->properties.type == KFD_QUEUE_TYPE_SDMA_XGMI)) {
-               retval = read_sdma_queue_counter((uint64_t)q->properties.read_ptr,
+               retval = read_sdma_queue_counter((uint64_t __user *)q->properties.read_ptr,
                                                        &sdma_val);
                if (retval)
                        pr_err("Failed to read SDMA queue counter for queue: %d\n",
 
        mutex_unlock(&dqm->lock_hidden);
 }
 
-int read_sdma_queue_counter(uint64_t q_rptr, uint64_t *val);
+static inline int read_sdma_queue_counter(uint64_t __user *q_rptr, uint64_t *val)
+{
+        /*
+         * SDMA activity counter is stored at queue's RPTR + 0x8 location.
+         */
+       return get_user(*val, q_rptr + 1);
+}
 #endif /* KFD_DEVICE_QUEUE_MANAGER_H_ */
 
 };
 
 struct temp_sdma_queue_list {
-       uint64_t rptr;
+       uint64_t __user *rptr;
        uint64_t sdma_val;
        unsigned int queue_id;
        struct list_head list;
                }
 
                INIT_LIST_HEAD(&sdma_q->list);
-               sdma_q->rptr = (uint64_t)q->properties.read_ptr;
+               sdma_q->rptr = (uint64_t __user *)q->properties.read_ptr;
                sdma_q->queue_id = q->properties.queue_id;
                list_add_tail(&sdma_q->list, &sdma_q_list.list);
        }
                        continue;
 
                list_for_each_entry_safe(sdma_q, next, &sdma_q_list.list, list) {
-                       if (((uint64_t)q->properties.read_ptr == sdma_q->rptr) &&
+                       if (((uint64_t __user *)q->properties.read_ptr == sdma_q->rptr) &&
                             (sdma_q->queue_id == q->properties.queue_id)) {
                                list_del(&sdma_q->list);
                                kfree(sdma_q);