Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-21 Thread Mark Johnston
On Wed, Nov 21, 2018 at 08:07:16AM +0200, Konstantin Belousov wrote:
> On Tue, Nov 20, 2018 at 04:58:32PM -0800, Ben Widawsky wrote:
> > On 18-11-20 19:51:48, Mark Johnston wrote:
> > > On Tue, Nov 20, 2018 at 04:42:39PM -0800, Ben Widawsky wrote:
> > > > On 18-11-20 19:35:15, Mark Johnston wrote:
> > > > > On Tue, Nov 20, 2018 at 10:49:19PM +, Ben Widawsky wrote:
> > > > > > Author: bwidawsk
> > > > > > Date: Tue Nov 20 22:49:19 2018
> > > > > > New Revision: 340709
> > > > > > URL: https://svnweb.freebsd.org/changeset/base/340709
> > > > > > 
> > > > > > Log:
> > > > > >   linuxkpi: Add some basic swap functions
> > > > > >   
> > > > > >   These are used by kms-drm to determine various heuristics relate
> > > > > >   memory conditions.
> > > > > >   
> > > > > >   The number of free swap pages is just a variable, and it can be
> > > > > >   much cheaper by either adding a new getter, or simply extern'ing
> > > > > >   swap_total. However, this patch opts to use the more expensive,
> > > > > >   existing interface - since this isn't an operation in a high per
> > > > > >   path.
> > > > > >   
> > > > > >   This allows us to remove some more gpl linuxkpi and do the follo
> > > > > >   kms-drm:
> > > > > >   git rm linuxkpi/gplv2/include/linux/swap.h
> > > > > >   
> > > > > >   Reviewed by:mmacy, Johannes Lundberg 
> > > > > >   Approved by:emaste (mentor)
> > > > > >   Differential Revision:  https://reviews.freebsd.org/D18052
> > > > > > 
> > > > > > Added:
> > > > > >   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, 
> > > > > > props changed)
> > > > > > Modified:
> > > > > >   head/sys/vm/vm_pageout.h
> > > > > >   head/sys/vm/vm_swapout.c
> > > > > > 
> > > > > > [...]
> > > > > > Modified: head/sys/vm/vm_swapout.c
> > > > > > ==
> > > > > > --- head/sys/vm/vm_swapout.cTue Nov 20 22:24:18 2018
> > > > > > (r340708)
> > > > > > +++ head/sys/vm/vm_swapout.cTue Nov 20 22:49:19 2018
> > > > > > (r340709)
> > > > > > @@ -961,3 +961,10 @@ swapout(struct proc *p)
> > > > > > p->p_swtick = ticks;
> > > > > > return (0);
> > > > > >  }
> > > > > > +
> > > > > > +/* Used to determine if the current process is itself the reaper. 
> > > > > > */
> > > > > > +bool
> > > > > > +vm_curproc_is_vmproc(void)
> > > > > > +{
> > > > > > +   return curproc == vmproc;
> > > > > > +}
> > > > > 
> > > > > From a look at how this is used, it should probably be pageproc rather
> > > > > than vmproc.  There are various code paths that just check
> > > > > curproc == pageproc inline.
> > > > > 
> > > > 
> > > > Could I trouble you for a quick explanation of the difference between 
> > > > the two?
> > > 
> > > pageproc contains the page daemon and laundry threads, which are
> > > responsible for managing the LRU page queues and writing back dirty
> > > pages.  vmproc's main task is to swap out kernel stacks when the system
> > > is under memory pressure, and swap them back in when necessary.  It's a
> > > somewhat legacy component of the system and isn't required.  You can
> > > build a kernel without it by specifying "options NO_SWAPPING" (which is
> > > a somewhat misleading name), in which vm_swapout_dummy.c is compiled
> > > instead of vm_swapout.c.
> > > 
> > 
> > Thanks for the explanation. I indeed want the page daemon. I will put up a 
> > patch
> > to do that the correct way. Thanks.
> 
> What is the intent ? If the goal is to avoid wait for memory in
> deadlock- prone contexts, then you perhaps want to return true for both
> pagedaemon and vm daemon, and might be even the buf daemon threads as
> well.

In this case it's used to enable more aggressive shrinking of GEM
objects.  The function in question is invoked via a lowmem eventhandler,
so the page daemon may indeed be the caller.
___
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"


Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-20 Thread Konstantin Belousov
On Tue, Nov 20, 2018 at 04:58:32PM -0800, Ben Widawsky wrote:
> On 18-11-20 19:51:48, Mark Johnston wrote:
> > On Tue, Nov 20, 2018 at 04:42:39PM -0800, Ben Widawsky wrote:
> > > On 18-11-20 19:35:15, Mark Johnston wrote:
> > > > On Tue, Nov 20, 2018 at 10:49:19PM +, Ben Widawsky wrote:
> > > > > Author: bwidawsk
> > > > > Date: Tue Nov 20 22:49:19 2018
> > > > > New Revision: 340709
> > > > > URL: https://svnweb.freebsd.org/changeset/base/340709
> > > > > 
> > > > > Log:
> > > > >   linuxkpi: Add some basic swap functions
> > > > >   
> > > > >   These are used by kms-drm to determine various heuristics relate
> > > > >   memory conditions.
> > > > >   
> > > > >   The number of free swap pages is just a variable, and it can be
> > > > >   much cheaper by either adding a new getter, or simply extern'ing
> > > > >   swap_total. However, this patch opts to use the more expensive,
> > > > >   existing interface - since this isn't an operation in a high per
> > > > >   path.
> > > > >   
> > > > >   This allows us to remove some more gpl linuxkpi and do the follo
> > > > >   kms-drm:
> > > > >   git rm linuxkpi/gplv2/include/linux/swap.h
> > > > >   
> > > > >   Reviewed by:mmacy, Johannes Lundberg 
> > > > >   Approved by:emaste (mentor)
> > > > >   Differential Revision:  https://reviews.freebsd.org/D18052
> > > > > 
> > > > > Added:
> > > > >   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, 
> > > > > props changed)
> > > > > Modified:
> > > > >   head/sys/vm/vm_pageout.h
> > > > >   head/sys/vm/vm_swapout.c
> > > > > 
> > > > > [...]
> > > > > Modified: head/sys/vm/vm_swapout.c
> > > > > ==
> > > > > --- head/sys/vm/vm_swapout.c  Tue Nov 20 22:24:18 2018
> > > > > (r340708)
> > > > > +++ head/sys/vm/vm_swapout.c  Tue Nov 20 22:49:19 2018
> > > > > (r340709)
> > > > > @@ -961,3 +961,10 @@ swapout(struct proc *p)
> > > > >   p->p_swtick = ticks;
> > > > >   return (0);
> > > > >  }
> > > > > +
> > > > > +/* Used to determine if the current process is itself the reaper. */
> > > > > +bool
> > > > > +vm_curproc_is_vmproc(void)
> > > > > +{
> > > > > + return curproc == vmproc;
> > > > > +}
> > > > 
> > > > From a look at how this is used, it should probably be pageproc rather
> > > > than vmproc.  There are various code paths that just check
> > > > curproc == pageproc inline.
> > > > 
> > > 
> > > Could I trouble you for a quick explanation of the difference between the 
> > > two?
> > 
> > pageproc contains the page daemon and laundry threads, which are
> > responsible for managing the LRU page queues and writing back dirty
> > pages.  vmproc's main task is to swap out kernel stacks when the system
> > is under memory pressure, and swap them back in when necessary.  It's a
> > somewhat legacy component of the system and isn't required.  You can
> > build a kernel without it by specifying "options NO_SWAPPING" (which is
> > a somewhat misleading name), in which vm_swapout_dummy.c is compiled
> > instead of vm_swapout.c.
> > 
> 
> Thanks for the explanation. I indeed want the page daemon. I will put up a 
> patch
> to do that the correct way. Thanks.

What is the intent ? If the goal is to avoid wait for memory in
deadlock- prone contexts, then you perhaps want to return true for both
pagedaemon and vm daemon, and might be even the buf daemon threads as
well.
___
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"


Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-20 Thread Ben Widawsky
On 18-11-21 02:00:57, Oliver Pinter wrote:
> 
> 
> On Tuesday, November 20, 2018, Ben Widawsky  wrote:
> 
> Author: bwidawsk
> Date: Tue Nov 20 22:49:19 2018
> New Revision: 340709
> URL: https://svnweb.freebsd.org/changeset/base/340709
> 
> Log:
>   linuxkpi: Add some basic swap functions
> 
>   These are used by kms-drm to determine various heuristics relate
>   memory conditions.
> 
>   The number of free swap pages is just a variable, and it can be
>   much cheaper by either adding a new getter, or simply extern'ing
>   swap_total. However, this patch opts to use the more expensive,
>   existing interface - since this isn't an operation in a high per
>   path.
> 
>   This allows us to remove some more gpl linuxkpi and do the follo
>   kms-drm:
>   git rm linuxkpi/gplv2/include/linux/swap.h
> 
>   Reviewed by:    mmacy, Johannes Lundberg 
>   Approved by:    emaste (mentor)
>   Differential Revision:  https://reviews.freebsd.org/D18052
> 
> Added:
>   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, props
> changed)
> Modified:
>   head/sys/vm/vm_pageout.h
>   head/sys/vm/vm_swapout.c
> 
> Added: head/sys/compat/linuxkpi/common/include/linux/swap.h
> 
> ===
> ===
> --- /dev/null   00:00:00 1970   (empty, because file is newly added)
> +++ head/sys/compat/linuxkpi/common/include/linux/swap.h        Tue Nov 20
> 22:49:19 2018        (r340709)
> @@ -0,0 +1,102 @@
> +/*-
> + * Copyright (c) 2018 Intel Corporation
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions are
> + * met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in
> + *    the documentation and/or other materials provided with the
> + *    distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE 
> LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
> GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * $FreeBSD$
> + */
> +
> +#ifndef        _LINUX_SWAP_H_
> +#define        _LINUX_SWAP_H_
> +
> +#include 
> +#include 
> +
> +static inline long
> +get_nr_swap_pages(void)
> +{
> +       int i, j;
> +
> +       /* NB: This could be done cheaply by obtaining swap_total directly
> */
> +       swap_pager_status(&i, &j);
> +       return i - j;
> +}
> +
> +static inline int
> +current_is_kswapd(void)
> +{
> +       return vm_curproc_is_vmproc();
> +}
> +
> +#endif
> 
> 
> Probably I'm wrong, but this file contains twice the same intended content. 
>  

You are correct, but I have already fixed it. I have some problems with my
workflow still, apparently. :(

> 
> +/*-
> + * Copyright (c) 2018 Intel Corporation
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions are
> + * met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in
> + *    the documentation and/or other materials provided with the
> + *    distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE 
> LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CO

Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-20 Thread Oliver Pinter
On Tuesday, November 20, 2018, Ben Widawsky  wrote:

> Author: bwidawsk
> Date: Tue Nov 20 22:49:19 2018
> New Revision: 340709
> URL: https://svnweb.freebsd.org/changeset/base/340709
>
> Log:
>   linuxkpi: Add some basic swap functions
>
>   These are used by kms-drm to determine various heuristics relate
>   memory conditions.
>
>   The number of free swap pages is just a variable, and it can be
>   much cheaper by either adding a new getter, or simply extern'ing
>   swap_total. However, this patch opts to use the more expensive,
>   existing interface - since this isn't an operation in a high per
>   path.
>
>   This allows us to remove some more gpl linuxkpi and do the follo
>   kms-drm:
>   git rm linuxkpi/gplv2/include/linux/swap.h
>
>   Reviewed by:mmacy, Johannes Lundberg 
>   Approved by:emaste (mentor)
>   Differential Revision:  https://reviews.freebsd.org/D18052
>
> Added:
>   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, props
> changed)
> Modified:
>   head/sys/vm/vm_pageout.h
>   head/sys/vm/vm_swapout.c
>
> Added: head/sys/compat/linuxkpi/common/include/linux/swap.h
> 
> ==
> --- /dev/null   00:00:00 1970   (empty, because file is newly added)
> +++ head/sys/compat/linuxkpi/common/include/linux/swap.hTue Nov
> 20 22:49:19 2018(r340709)
> @@ -0,0 +1,102 @@
> +/*-
> + * Copyright (c) 2018 Intel Corporation
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions are
> + * met:
> + * 1. Redistributions of source code must retain the above copyright
> + *notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *notice, this list of conditions and the following disclaimer in
> + *the documentation and/or other materials provided with the
> + *distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * $FreeBSD$
> + */
> +
> +#ifndef_LINUX_SWAP_H_
> +#define_LINUX_SWAP_H_
> +
> +#include 
> +#include 
> +
> +static inline long
> +get_nr_swap_pages(void)
> +{
> +   int i, j;
> +
> +   /* NB: This could be done cheaply by obtaining swap_total directly
> */
> +   swap_pager_status(&i, &j);
> +   return i - j;
> +}
> +
> +static inline int
> +current_is_kswapd(void)
> +{
> +   return vm_curproc_is_vmproc();
> +}
> +
> +#endif


Probably I'm wrong, but this file contains twice the same intended content.


> +/*-
> + * Copyright (c) 2018 Intel Corporation
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions are
> + * met:
> + * 1. Redistributions of source code must retain the above copyright
> + *notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *notice, this list of conditions and the following disclaimer in
> + *the documentation and/or other materials provided with the
> + *distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * $FreeBSD$
> + */
> +
> +#ifndef_LINUX_SWAP_H_
> +#define_LINUX_SWAP_H_
> +
> +#include 
> +#include 
> +
> +static inline long
> +get_nr_swap_pages(void)
> +{
> +   

Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-20 Thread Ben Widawsky
On 18-11-20 19:51:48, Mark Johnston wrote:
> On Tue, Nov 20, 2018 at 04:42:39PM -0800, Ben Widawsky wrote:
> > On 18-11-20 19:35:15, Mark Johnston wrote:
> > > On Tue, Nov 20, 2018 at 10:49:19PM +, Ben Widawsky wrote:
> > > > Author: bwidawsk
> > > > Date: Tue Nov 20 22:49:19 2018
> > > > New Revision: 340709
> > > > URL: https://svnweb.freebsd.org/changeset/base/340709
> > > > 
> > > > Log:
> > > >   linuxkpi: Add some basic swap functions
> > > >   
> > > >   These are used by kms-drm to determine various heuristics relate
> > > >   memory conditions.
> > > >   
> > > >   The number of free swap pages is just a variable, and it can be
> > > >   much cheaper by either adding a new getter, or simply extern'ing
> > > >   swap_total. However, this patch opts to use the more expensive,
> > > >   existing interface - since this isn't an operation in a high per
> > > >   path.
> > > >   
> > > >   This allows us to remove some more gpl linuxkpi and do the follo
> > > >   kms-drm:
> > > >   git rm linuxkpi/gplv2/include/linux/swap.h
> > > >   
> > > >   Reviewed by:mmacy, Johannes Lundberg 
> > > >   Approved by:emaste (mentor)
> > > >   Differential Revision:  https://reviews.freebsd.org/D18052
> > > > 
> > > > Added:
> > > >   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, 
> > > > props changed)
> > > > Modified:
> > > >   head/sys/vm/vm_pageout.h
> > > >   head/sys/vm/vm_swapout.c
> > > > 
> > > > [...]
> > > > Modified: head/sys/vm/vm_swapout.c
> > > > ==
> > > > --- head/sys/vm/vm_swapout.cTue Nov 20 22:24:18 2018
> > > > (r340708)
> > > > +++ head/sys/vm/vm_swapout.cTue Nov 20 22:49:19 2018
> > > > (r340709)
> > > > @@ -961,3 +961,10 @@ swapout(struct proc *p)
> > > > p->p_swtick = ticks;
> > > > return (0);
> > > >  }
> > > > +
> > > > +/* Used to determine if the current process is itself the reaper. */
> > > > +bool
> > > > +vm_curproc_is_vmproc(void)
> > > > +{
> > > > +   return curproc == vmproc;
> > > > +}
> > > 
> > > From a look at how this is used, it should probably be pageproc rather
> > > than vmproc.  There are various code paths that just check
> > > curproc == pageproc inline.
> > > 
> > 
> > Could I trouble you for a quick explanation of the difference between the 
> > two?
> 
> pageproc contains the page daemon and laundry threads, which are
> responsible for managing the LRU page queues and writing back dirty
> pages.  vmproc's main task is to swap out kernel stacks when the system
> is under memory pressure, and swap them back in when necessary.  It's a
> somewhat legacy component of the system and isn't required.  You can
> build a kernel without it by specifying "options NO_SWAPPING" (which is
> a somewhat misleading name), in which vm_swapout_dummy.c is compiled
> instead of vm_swapout.c.
> 

Thanks for the explanation. I indeed want the page daemon. I will put up a patch
to do that the correct way. Thanks.
___
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"


Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-20 Thread Mark Johnston
On Tue, Nov 20, 2018 at 04:42:39PM -0800, Ben Widawsky wrote:
> On 18-11-20 19:35:15, Mark Johnston wrote:
> > On Tue, Nov 20, 2018 at 10:49:19PM +, Ben Widawsky wrote:
> > > Author: bwidawsk
> > > Date: Tue Nov 20 22:49:19 2018
> > > New Revision: 340709
> > > URL: https://svnweb.freebsd.org/changeset/base/340709
> > > 
> > > Log:
> > >   linuxkpi: Add some basic swap functions
> > >   
> > >   These are used by kms-drm to determine various heuristics relate
> > >   memory conditions.
> > >   
> > >   The number of free swap pages is just a variable, and it can be
> > >   much cheaper by either adding a new getter, or simply extern'ing
> > >   swap_total. However, this patch opts to use the more expensive,
> > >   existing interface - since this isn't an operation in a high per
> > >   path.
> > >   
> > >   This allows us to remove some more gpl linuxkpi and do the follo
> > >   kms-drm:
> > >   git rm linuxkpi/gplv2/include/linux/swap.h
> > >   
> > >   Reviewed by:mmacy, Johannes Lundberg 
> > >   Approved by:emaste (mentor)
> > >   Differential Revision:  https://reviews.freebsd.org/D18052
> > > 
> > > Added:
> > >   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, props 
> > > changed)
> > > Modified:
> > >   head/sys/vm/vm_pageout.h
> > >   head/sys/vm/vm_swapout.c
> > > 
> > > [...]
> > > Modified: head/sys/vm/vm_swapout.c
> > > ==
> > > --- head/sys/vm/vm_swapout.c  Tue Nov 20 22:24:18 2018
> > > (r340708)
> > > +++ head/sys/vm/vm_swapout.c  Tue Nov 20 22:49:19 2018
> > > (r340709)
> > > @@ -961,3 +961,10 @@ swapout(struct proc *p)
> > >   p->p_swtick = ticks;
> > >   return (0);
> > >  }
> > > +
> > > +/* Used to determine if the current process is itself the reaper. */
> > > +bool
> > > +vm_curproc_is_vmproc(void)
> > > +{
> > > + return curproc == vmproc;
> > > +}
> > 
> > From a look at how this is used, it should probably be pageproc rather
> > than vmproc.  There are various code paths that just check
> > curproc == pageproc inline.
> > 
> 
> Could I trouble you for a quick explanation of the difference between the two?

pageproc contains the page daemon and laundry threads, which are
responsible for managing the LRU page queues and writing back dirty
pages.  vmproc's main task is to swap out kernel stacks when the system
is under memory pressure, and swap them back in when necessary.  It's a
somewhat legacy component of the system and isn't required.  You can
build a kernel without it by specifying "options NO_SWAPPING" (which is
a somewhat misleading name), in which vm_swapout_dummy.c is compiled
instead of vm_swapout.c.
___
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"


Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-20 Thread Ben Widawsky
On 18-11-20 19:35:15, Mark Johnston wrote:
> On Tue, Nov 20, 2018 at 10:49:19PM +, Ben Widawsky wrote:
> > Author: bwidawsk
> > Date: Tue Nov 20 22:49:19 2018
> > New Revision: 340709
> > URL: https://svnweb.freebsd.org/changeset/base/340709
> > 
> > Log:
> >   linuxkpi: Add some basic swap functions
> >   
> >   These are used by kms-drm to determine various heuristics relate
> >   memory conditions.
> >   
> >   The number of free swap pages is just a variable, and it can be
> >   much cheaper by either adding a new getter, or simply extern'ing
> >   swap_total. However, this patch opts to use the more expensive,
> >   existing interface - since this isn't an operation in a high per
> >   path.
> >   
> >   This allows us to remove some more gpl linuxkpi and do the follo
> >   kms-drm:
> >   git rm linuxkpi/gplv2/include/linux/swap.h
> >   
> >   Reviewed by:mmacy, Johannes Lundberg 
> >   Approved by:emaste (mentor)
> >   Differential Revision:  https://reviews.freebsd.org/D18052
> > 
> > Added:
> >   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, props 
> > changed)
> > Modified:
> >   head/sys/vm/vm_pageout.h
> >   head/sys/vm/vm_swapout.c
> > 
> > [...]
> > Modified: head/sys/vm/vm_swapout.c
> > ==
> > --- head/sys/vm/vm_swapout.cTue Nov 20 22:24:18 2018
> > (r340708)
> > +++ head/sys/vm/vm_swapout.cTue Nov 20 22:49:19 2018
> > (r340709)
> > @@ -961,3 +961,10 @@ swapout(struct proc *p)
> > p->p_swtick = ticks;
> > return (0);
> >  }
> > +
> > +/* Used to determine if the current process is itself the reaper. */
> > +bool
> > +vm_curproc_is_vmproc(void)
> > +{
> > +   return curproc == vmproc;
> > +}
> 
> From a look at how this is used, it should probably be pageproc rather
> than vmproc.  There are various code paths that just check
> curproc == pageproc inline.
> 

Could I trouble you for a quick explanation of the difference between the two?
___
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"


Re: svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-20 Thread Mark Johnston
On Tue, Nov 20, 2018 at 10:49:19PM +, Ben Widawsky wrote:
> Author: bwidawsk
> Date: Tue Nov 20 22:49:19 2018
> New Revision: 340709
> URL: https://svnweb.freebsd.org/changeset/base/340709
> 
> Log:
>   linuxkpi: Add some basic swap functions
>   
>   These are used by kms-drm to determine various heuristics relate
>   memory conditions.
>   
>   The number of free swap pages is just a variable, and it can be
>   much cheaper by either adding a new getter, or simply extern'ing
>   swap_total. However, this patch opts to use the more expensive,
>   existing interface - since this isn't an operation in a high per
>   path.
>   
>   This allows us to remove some more gpl linuxkpi and do the follo
>   kms-drm:
>   git rm linuxkpi/gplv2/include/linux/swap.h
>   
>   Reviewed by:mmacy, Johannes Lundberg 
>   Approved by:emaste (mentor)
>   Differential Revision:  https://reviews.freebsd.org/D18052
> 
> Added:
>   head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, props 
> changed)
> Modified:
>   head/sys/vm/vm_pageout.h
>   head/sys/vm/vm_swapout.c
> 
> [...]
> Modified: head/sys/vm/vm_swapout.c
> ==
> --- head/sys/vm/vm_swapout.c  Tue Nov 20 22:24:18 2018(r340708)
> +++ head/sys/vm/vm_swapout.c  Tue Nov 20 22:49:19 2018(r340709)
> @@ -961,3 +961,10 @@ swapout(struct proc *p)
>   p->p_swtick = ticks;
>   return (0);
>  }
> +
> +/* Used to determine if the current process is itself the reaper. */
> +bool
> +vm_curproc_is_vmproc(void)
> +{
> + return curproc == vmproc;
> +}

>From a look at how this is used, it should probably be pageproc rather
than vmproc.  There are various code paths that just check
curproc == pageproc inline.
___
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"


svn commit: r340709 - in head/sys: compat/linuxkpi/common/include/linux vm

2018-11-20 Thread Ben Widawsky
Author: bwidawsk
Date: Tue Nov 20 22:49:19 2018
New Revision: 340709
URL: https://svnweb.freebsd.org/changeset/base/340709

Log:
  linuxkpi: Add some basic swap functions
  
  These are used by kms-drm to determine various heuristics relate
  memory conditions.
  
  The number of free swap pages is just a variable, and it can be
  much cheaper by either adding a new getter, or simply extern'ing
  swap_total. However, this patch opts to use the more expensive,
  existing interface - since this isn't an operation in a high per
  path.
  
  This allows us to remove some more gpl linuxkpi and do the follo
  kms-drm:
  git rm linuxkpi/gplv2/include/linux/swap.h
  
  Reviewed by:mmacy, Johannes Lundberg 
  Approved by:emaste (mentor)
  Differential Revision:  https://reviews.freebsd.org/D18052

Added:
  head/sys/compat/linuxkpi/common/include/linux/swap.h   (contents, props 
changed)
Modified:
  head/sys/vm/vm_pageout.h
  head/sys/vm/vm_swapout.c

Added: head/sys/compat/linuxkpi/common/include/linux/swap.h
==
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/compat/linuxkpi/common/include/linux/swap.hTue Nov 20 
22:49:19 2018(r340709)
@@ -0,0 +1,102 @@
+/*-
+ * Copyright (c) 2018 Intel Corporation
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in
+ *the documentation and/or other materials provided with the
+ *distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef_LINUX_SWAP_H_
+#define_LINUX_SWAP_H_
+
+#include 
+#include 
+
+static inline long
+get_nr_swap_pages(void)
+{
+   int i, j;
+
+   /* NB: This could be done cheaply by obtaining swap_total directly */
+   swap_pager_status(&i, &j);
+   return i - j;
+}
+
+static inline int
+current_is_kswapd(void)
+{
+   return vm_curproc_is_vmproc();
+}
+
+#endif
+/*-
+ * Copyright (c) 2018 Intel Corporation
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in
+ *the documentation and/or other materials provided with the
+ *distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef_LINUX_SWAP_H_
+#define_LINUX_SWAP_H_
+
+#include 
+#include 
+
+static inline long
+get_nr_swap_pages(void)
+{
+   int i, j;
+
+   /* NB: This could be done cheaply by obtaining swap_total directly */
+   swap_pager_status(&i, &j);
+   return i - j;
+}
+
+static inline int
+current_is_kswapd(void)
+{
+   return vm_curproc_is_vmproc();
+}
+
+#endif

Modified: head/sys/vm/vm_pageout.h
==
--- head/sys/vm/vm_pageou