get_nr_swap_pages is the only API we can accessed from other module now. It can't cover the case of the dynamic swap size increment. I mean: user can use "swapon" to enable new swap file or swap disk dynamically or "swapoff" to disable swap space. Above is why we always to get swap cache size rather than getting it once at module initialization time. That is internal in TTM. Please ignore that. And why TTM needs get_total_swap_pages instead of using get_nr_swap_pages directly. That because even though the TTM buffer has been swapped out, at the start they also stay in system memory by shmem. Later at some point when Under high memory pressure, Those buffers all are flushed into swap disk and used more swap disk size or even use up all swap size. That is not what we want and still has random OOM. So we need a API to get total swap size and control the swap size used by TTM very accurately. Thanks Roger(Hongbo.He) -----Original Message----- From: dri-devel [mailto:dri-devel-bounces@xxxxxxxxxxxxxxxxxxxxx] On Behalf Of He, Roger Sent: Tuesday, January 30, 2018 10:57 AM To: Michal Hocko <mhocko@xxxxxxxxxx> Cc: linux-mm@xxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; dri-devel@xxxxxxxxxxxxxxxxxxxxx; Koenig, Christian <Christian.Koenig@xxxxxxx> Subject: RE: [PATCH] mm/swap: add function get_total_swap_pages to expose total_swap_pages Hi Michal: We need a API to tell TTM module the system totally has how many swap cache. Then TTM module can use it to restrict how many the swap cache it can use to prevent triggering OOM. For Now we set the threshold of swap size TTM used as 1/2 * total size and leave the rest for others use. get_nr_swap_pages is the only API we can accessed from other module now. It can't cover the case of the dynamic swap size increment. I mean: user can use "swapon" to enable new swap file or swap disk dynamically or "swapoff" to disable swap space. Thanks Roger(Hongbo.He) -----Original Message----- From: dri-devel [mailto:dri-devel-bounces@xxxxxxxxxxxxxxxxxxxxx] On Behalf Of Michal Hocko Sent: Tuesday, January 30, 2018 12:31 AM To: He, Roger <Hongbo.He@xxxxxxx> Cc: linux-mm@xxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; dri-devel@xxxxxxxxxxxxxxxxxxxxx; Koenig, Christian <Christian.Koenig@xxxxxxx> Subject: Re: [PATCH] mm/swap: add function get_total_swap_pages to expose total_swap_pages On Mon 29-01-18 16:29:42, Roger He wrote: > ttm module needs it to determine its internal parameter setting. Could you be more specific why? > Signed-off-by: Roger He <Hongbo.He@xxxxxxx> > --- > include/linux/swap.h | 6 ++++++ > mm/swapfile.c | 15 +++++++++++++++ > 2 files changed, 21 insertions(+) > > diff --git a/include/linux/swap.h b/include/linux/swap.h index > c2b8128..708d66f 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -484,6 +484,7 @@ extern int try_to_free_swap(struct page *); struct > backing_dev_info; extern int init_swap_address_space(unsigned int > type, unsigned long nr_pages); extern void > exit_swap_address_space(unsigned int type); > +extern long get_total_swap_pages(void); > > #else /* CONFIG_SWAP */ > > @@ -516,6 +517,11 @@ static inline void show_swap_cache_info(void) { > } > > +long get_total_swap_pages(void) > +{ > + return 0; > +} > + > #define free_swap_and_cache(e) ({(is_migration_entry(e) || > is_device_private_entry(e));}) #define swapcache_prepare(e) > ({(is_migration_entry(e) || is_device_private_entry(e));}) > > diff --git a/mm/swapfile.c b/mm/swapfile.c index 3074b02..a0062eb > 100644 > --- a/mm/swapfile.c > +++ b/mm/swapfile.c > @@ -98,6 +98,21 @@ static atomic_t proc_poll_event = ATOMIC_INIT(0); > > atomic_t nr_rotate_swap = ATOMIC_INIT(0); > > +/* > + * expose this value for others use > + */ > +long get_total_swap_pages(void) > +{ > + long ret; > + > + spin_lock(&swap_lock); > + ret = total_swap_pages; > + spin_unlock(&swap_lock); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(get_total_swap_pages); > + > static inline unsigned char swap_count(unsigned char ent) { > return ent & ~SWAP_HAS_CACHE; /* may include SWAP_HAS_CONT flag */ > -- > 2.7.4 -- Michal Hocko SUSE Labs _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel