]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
drm/amdkfd: dqm fence memory corruption
[mirror_ubuntu-hirsute-kernel.git] / drivers / gpu / drm / amd / amdkfd / kfd_device_queue_manager.h
index 49d8e324c636f85ede46115b5ac848e74c473da4..45f81594655441e3ddded9617efb232144fcb794 100644 (file)
@@ -192,7 +192,7 @@ struct device_queue_manager {
        uint16_t                vmid_pasid[VMID_NUM];
        uint64_t                pipelines_addr;
        uint64_t                fence_gpu_addr;
-       unsigned int            *fence_addr;
+       uint64_t                *fence_addr;
        struct kfd_mem_obj      *fence_mem;
        bool                    active_runlist;
        int                     sched_policy;
@@ -243,13 +243,19 @@ get_sh_mem_bases_nybble_64(struct kfd_process_device *pdd)
 static inline void dqm_lock(struct device_queue_manager *dqm)
 {
        mutex_lock(&dqm->lock_hidden);
-       dqm->saved_flags = memalloc_nofs_save();
+       dqm->saved_flags = memalloc_noreclaim_save();
 }
 static inline void dqm_unlock(struct device_queue_manager *dqm)
 {
-       memalloc_nofs_restore(dqm->saved_flags);
+       memalloc_noreclaim_restore(dqm->saved_flags);
        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_ */