mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-11 02:29:58 +00:00
550.163.01
This commit is contained in:
@@ -1628,8 +1628,6 @@ static void nv_init_mapping_revocation(nv_linux_state_t *nvl,
|
||||
nv_linux_file_private_t *nvlfp,
|
||||
struct inode *inode)
|
||||
{
|
||||
down(&nvl->mmap_lock);
|
||||
|
||||
/* Set up struct address_space for use with unmap_mapping_range() */
|
||||
address_space_init_once(&nvlfp->mapping);
|
||||
nvlfp->mapping.host = inode;
|
||||
@@ -1638,10 +1636,20 @@ static void nv_init_mapping_revocation(nv_linux_state_t *nvl,
|
||||
nvlfp->mapping.backing_dev_info = inode->i_mapping->backing_dev_info;
|
||||
#endif
|
||||
file->f_mapping = &nvlfp->mapping;
|
||||
}
|
||||
|
||||
/* Add nvlfp to list of open files in nvl for mapping revocation */
|
||||
/* Adds nvlfp to list of open files for mapping revocation */
|
||||
static void nv_add_open_file(nv_linux_state_t *nvl,
|
||||
nv_linux_file_private_t *nvlfp)
|
||||
{
|
||||
nvlfp->nvptr = nvl;
|
||||
|
||||
/*
|
||||
* nvl->open_files and other mapping revocation members in nv_linux_state_t
|
||||
* are protected by nvl->mmap_lock instead of nvl->ldata_lock.
|
||||
*/
|
||||
down(&nvl->mmap_lock);
|
||||
list_add(&nvlfp->entry, &nvl->open_files);
|
||||
|
||||
up(&nvl->mmap_lock);
|
||||
}
|
||||
|
||||
@@ -1691,11 +1699,12 @@ static void nvidia_open_deferred(void *nvlfp_raw)
|
||||
*/
|
||||
down(&nvl->ldata_lock);
|
||||
rc = nv_open_device_for_nvlfp(NV_STATE_PTR(nvl), nvlfp->sp, nvlfp);
|
||||
up(&nvl->ldata_lock);
|
||||
|
||||
/* Set nvptr only upon success (where nvl->usage_count is incremented) */
|
||||
/* Only add open file tracking where nvl->usage_count is incremented */
|
||||
if (rc == 0)
|
||||
nvlfp->nvptr = nvl;
|
||||
nv_add_open_file(nvl, nvlfp);
|
||||
|
||||
up(&nvl->ldata_lock);
|
||||
|
||||
complete_all(&nvlfp->open_complete);
|
||||
}
|
||||
@@ -1814,6 +1823,7 @@ nvidia_open(
|
||||
}
|
||||
|
||||
nv = NV_STATE_PTR(nvl);
|
||||
nv_init_mapping_revocation(nvl, file, nvlfp, inode);
|
||||
|
||||
if (nv_try_lock_foreground_open(file, nvl) == 0)
|
||||
{
|
||||
@@ -1824,11 +1834,11 @@ nvidia_open(
|
||||
|
||||
rc = nv_open_device_for_nvlfp(nv, nvlfp->sp, nvlfp);
|
||||
|
||||
up(&nvl->ldata_lock);
|
||||
|
||||
/* Set nvptr only upon success (where nvl->usage_count is incremented) */
|
||||
/* Only add open file tracking where nvl->usage_count is incremented */
|
||||
if (rc == 0)
|
||||
nvlfp->nvptr = nvl;
|
||||
nv_add_open_file(nvl, nvlfp);
|
||||
|
||||
up(&nvl->ldata_lock);
|
||||
|
||||
complete_all(&nvlfp->open_complete);
|
||||
}
|
||||
@@ -1883,10 +1893,6 @@ failed:
|
||||
NV_SET_FILE_PRIVATE(file, NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
nv_init_mapping_revocation(nvl, file, nvlfp, inode);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user