mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 09:11:26 +03:00
video: tegra: nvmap: Remove use of add_mm_counter
add_mm_counter is not an exported function, so instead use
atomic_long_add_return/percpu_counter_add to directly modify RSS stat
counters.
Bug 5222690
Change-Id: I51a68d932aeb04f96e51a4a3c286ee5c8efc789a
Signed-off-by: Ketan Patil <ketanp@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3446982
(cherry picked from commit 8e1a6b2dd1)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3453099
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Reviewed-by: Amulya Yarlagadda <ayarlagadda@nvidia.com>
Tested-by: Amulya Yarlagadda <ayarlagadda@nvidia.com>
This commit is contained in:
committed by
Amulya Yarlagadda
parent
cfe6242c8c
commit
e488812038
@@ -596,7 +596,7 @@ static int handle_page_alloc(struct nvmap_client *client,
|
|||||||
* Increment the RSS counter of the allocating process by number of pages allocated.
|
* Increment the RSS counter of the allocating process by number of pages allocated.
|
||||||
*/
|
*/
|
||||||
h->anon_count = nr_page;
|
h->anon_count = nr_page;
|
||||||
add_mm_counter(mm, MM_ANONPAGES, nr_page);
|
nvmap_add_mm_counter(mm, MM_ANONPAGES, nr_page);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure any data in the caches is cleaned out before
|
* Make sure any data in the caches is cleaned out before
|
||||||
@@ -618,7 +618,7 @@ static int handle_page_alloc(struct nvmap_client *client,
|
|||||||
ref->mm = mm;
|
ref->mm = mm;
|
||||||
ref->anon_count = h->anon_count;
|
ref->anon_count = h->anon_count;
|
||||||
} else {
|
} else {
|
||||||
add_mm_counter(mm, MM_ANONPAGES, -nr_page);
|
nvmap_add_mm_counter(mm, MM_ANONPAGES, -nr_page);
|
||||||
mmput(mm);
|
mmput(mm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1176,7 +1176,7 @@ void nvmap_free_handle(struct nvmap_client *client,
|
|||||||
* to this ref and do mmput so that mm_struct can be freed, if required.
|
* to this ref and do mmput so that mm_struct can be freed, if required.
|
||||||
*/
|
*/
|
||||||
if (ref->mm != NULL && ref->anon_count != 0) {
|
if (ref->mm != NULL && ref->anon_count != 0) {
|
||||||
add_mm_counter(ref->mm, MM_ANONPAGES, -ref->anon_count);
|
nvmap_add_mm_counter(ref->mm, MM_ANONPAGES, -ref->anon_count);
|
||||||
mmput(ref->mm);
|
mmput(ref->mm);
|
||||||
ref->mm = NULL;
|
ref->mm = NULL;
|
||||||
ref->anon_count = 0;
|
ref->anon_count = 0;
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ static void destroy_client(struct nvmap_client *client)
|
|||||||
* to this ref and do mmput so that mm_struct can be freed, if required.
|
* to this ref and do mmput so that mm_struct can be freed, if required.
|
||||||
*/
|
*/
|
||||||
if (ref->mm != NULL && ref->anon_count != 0) {
|
if (ref->mm != NULL && ref->anon_count != 0) {
|
||||||
add_mm_counter(ref->mm, MM_ANONPAGES, -ref->anon_count);
|
nvmap_add_mm_counter(ref->mm, MM_ANONPAGES, -ref->anon_count);
|
||||||
mmput(ref->mm);
|
mmput(ref->mm);
|
||||||
ref->mm = NULL;
|
ref->mm = NULL;
|
||||||
ref->anon_count = 0;
|
ref->anon_count = 0;
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ struct nvmap_handle_ref *nvmap_duplicate_handle(struct nvmap_client *client,
|
|||||||
if (!mmget_not_zero(ref->mm))
|
if (!mmget_not_zero(ref->mm))
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
add_mm_counter(ref->mm, MM_ANONPAGES, ref->anon_count);
|
nvmap_add_mm_counter(ref->mm, MM_ANONPAGES, ref->anon_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_ro) {
|
if (is_ro) {
|
||||||
@@ -436,7 +436,7 @@ out:
|
|||||||
|
|
||||||
exit_mm:
|
exit_mm:
|
||||||
if (ref->anon_count != 0 && ref->mm != NULL) {
|
if (ref->anon_count != 0 && ref->mm != NULL) {
|
||||||
add_mm_counter(ref->mm, MM_ANONPAGES, -ref->anon_count);
|
nvmap_add_mm_counter(ref->mm, MM_ANONPAGES, -ref->anon_count);
|
||||||
mmput(ref->mm);
|
mmput(ref->mm);
|
||||||
ref->mm = NULL;
|
ref->mm = NULL;
|
||||||
ref->anon_count = 0;
|
ref->anon_count = 0;
|
||||||
|
|||||||
@@ -916,6 +916,16 @@ static inline struct dma_buf *nvmap_id_array_id_release(struct xarray *xarr, u32
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline void nvmap_add_mm_counter(struct mm_struct *mm, int member, long value)
|
||||||
|
{
|
||||||
|
#if defined(NV_MM_STRUCT_STRUCT_HAS_PERCPU_COUNTER_RSS_STAT) /* Linux v6.2 */
|
||||||
|
percpu_counter_add(&mm->rss_stat[member], value);
|
||||||
|
#else
|
||||||
|
atomic_long_add_return(value, &mm->rss_stat.count[member]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void *nvmap_dmabuf_get_drv_data(struct dma_buf *dmabuf,
|
void *nvmap_dmabuf_get_drv_data(struct dma_buf *dmabuf,
|
||||||
struct device *dev);
|
struct device *dev);
|
||||||
bool is_nvmap_memory_available(size_t size, uint32_t heap);
|
bool is_nvmap_memory_available(size_t size, uint32_t heap);
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += i2c_mux_add_adapter_has_no_class_argument
|
|||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += iio_dev_opaque_has_mlock
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += iio_dev_opaque_has_mlock
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += iommu_map_has_gfp_arg
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += iommu_map_has_gfp_arg
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += kthread_complete_and_exit
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += kthread_complete_and_exit
|
||||||
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += mm_struct_struct_has_percpu_counter_rss_stat
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += mii_bus_struct_has_read_c45
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += mii_bus_struct_has_read_c45
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += mii_bus_struct_has_write_c45
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += mii_bus_struct_has_write_c45
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += netif_set_tso_max_size
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += netif_set_tso_max_size
|
||||||
|
|||||||
@@ -7395,6 +7395,23 @@ compile_test() {
|
|||||||
compile_check_conftest "$CODE" "NV_MII_BUS_STRUCT_HAS_WRITE_C45" "" "types"
|
compile_check_conftest "$CODE" "NV_MII_BUS_STRUCT_HAS_WRITE_C45" "" "types"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
mm_struct_struct_has_percpu_counter_rss_stat)
|
||||||
|
#
|
||||||
|
# Determine if the 'rss_stat' member of the 'mm_struct' structure is
|
||||||
|
# defined with 'percpu_counter'.
|
||||||
|
#
|
||||||
|
# This change was made in Linux v6.2 by commit f1a7941243c1 ("mm:
|
||||||
|
# convert mm's rss stats into percpu_counter2").
|
||||||
|
#
|
||||||
|
CODE="
|
||||||
|
#include <linux/mm_types.h>
|
||||||
|
void conftest_mm_struct_struct_has_percpu_counter_rss_stat(struct mm_struct *mm) {
|
||||||
|
percpu_counter_add(&mm->rss_stat[0], 0);
|
||||||
|
}"
|
||||||
|
|
||||||
|
compile_check_conftest "$CODE" "NV_MM_STRUCT_STRUCT_HAS_PERCPU_COUNTER_RSS_STAT" "" "types"
|
||||||
|
;;
|
||||||
|
|
||||||
of_property_for_each_u32_removed_internal_args)
|
of_property_for_each_u32_removed_internal_args)
|
||||||
#
|
#
|
||||||
# Determine if the internal arguments for the macro
|
# Determine if the internal arguments for the macro
|
||||||
|
|||||||
Reference in New Issue
Block a user