svn commit: r269782 - in head/sys/sparc64: include sparc64
Alan Cox
alc at rice.edu
Mon Aug 11 16:35:46 UTC 2014
On 08/10/2014 11:59, Konstantin Belousov wrote:
> Author: kib
> Date: Sun Aug 10 16:59:39 2014
> New Revision: 269782
> URL: http://svnweb.freebsd.org/changeset/base/269782
>
> Log:
> On sparc64, do not keep mappings for the destroyed sf_bufs. Sparc64
> pmap, unlike i386, and similar to i386/xen pv, does not tolerate
> abandoned mappings for the freed pages.
>
> Reported and tested by: dumbbell
> Diagnosed and reviewed by: alc
> Sponsored by: The FreeBSD Foundation
This change fixes things on sparc64, but there is also an opportunity
here to make sf_buf operations much faster on newer sparc64 hardware.
If someone is interested in doing this, then please e-mail me.
Basically, if dcache_color_ignore is non-zero, then sparc64's direct map
can be used. It shouldn't be a difficult change.
> Added:
> head/sys/sparc64/include/sf_buf.h
> - copied, changed from r269781, head/sys/i386/include/sf_buf.h
> Modified:
> head/sys/sparc64/include/vmparam.h
> head/sys/sparc64/sparc64/vm_machdep.c
>
> Copied and modified: head/sys/sparc64/include/sf_buf.h (from r269781, head/sys/i386/include/sf_buf.h)
> ==============================================================================
> --- head/sys/i386/include/sf_buf.h Sun Aug 10 15:21:26 2014 (r269781, copy source)
> +++ head/sys/sparc64/include/sf_buf.h Sun Aug 10 16:59:39 2014 (r269782)
> @@ -31,6 +31,5 @@
>
> void sf_buf_map(struct sf_buf *, int);
> int sf_buf_unmap(struct sf_buf *);
> -boolean_t sf_buf_invalidate_cache(vm_page_t);
>
> #endif /* !_MACHINE_SF_BUF_H_ */
>
> Modified: head/sys/sparc64/include/vmparam.h
> ==============================================================================
> --- head/sys/sparc64/include/vmparam.h Sun Aug 10 15:21:26 2014 (r269781)
> +++ head/sys/sparc64/include/vmparam.h Sun Aug 10 16:59:39 2014 (r269782)
> @@ -240,6 +240,6 @@ extern vm_offset_t vm_max_kernel_address
> #define ZERO_REGION_SIZE PAGE_SIZE
>
> #define SFBUF
> -#define SFBUF_NOMD
> +#define SFBUF_MAP
>
> #endif /* !_MACHINE_VMPARAM_H_ */
>
> Modified: head/sys/sparc64/sparc64/vm_machdep.c
> ==============================================================================
> --- head/sys/sparc64/sparc64/vm_machdep.c Sun Aug 10 15:21:26 2014 (r269781)
> +++ head/sys/sparc64/sparc64/vm_machdep.c Sun Aug 10 16:59:39 2014 (r269782)
> @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/proc.h>
> #include <sys/sysent.h>
> #include <sys/sched.h>
> +#include <sys/sf_buf.h>
> #include <sys/sysctl.h>
> #include <sys/unistd.h>
> #include <sys/vmmeter.h>
> @@ -443,3 +444,18 @@ uma_small_free(void *mem, int size, u_in
> vm_page_free(m);
> atomic_subtract_int(&vm_cnt.v_wire_count, 1);
> }
> +
> +void
> +sf_buf_map(struct sf_buf *sf, int flags)
> +{
> +
> + pmap_qenter(sf->kva, &sf->m, 1);
> +}
> +
> +int
> +sf_buf_unmap(struct sf_buf *sf)
> +{
> +
> + pmap_qremove(sf->kva, 1);
> + return (1);
> +}
>
>
More information about the svn-src-all
mailing list