CVS commit: [netbsd-6-0] src/sys/arch/x86/x86
Module Name:src Committed By: snj Date: Thu Jul 14 07:09:39 UTC 2016 Modified Files: src/sys/arch/x86/x86 [netbsd-6-0]: pmap.c Log Message: Pull up following revision(s) (requested by hannken in ticket #1365): sys/arch/x86/x86/pmap.c: revision 1.190 Operation pmap_pp_clear_attrs() may remove the "used" attribute from a page that is still cached in the TLB of other CPUs. Call pmap_tlb_shootnow() here before enabling preemption to clear the TLB entries on other CPUs. Should prevent tmpfs data corruption under load. Ok: Chuck Silvers To generate a diff of this commit: cvs rdiff -u -r1.164.2.4 -r1.164.2.4.4.1 src/sys/arch/x86/x86/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: [netbsd-6-0] src/sys/arch/x86/x86
Module Name:src Committed By: snj Date: Thu Jul 14 07:09:39 UTC 2016 Modified Files: src/sys/arch/x86/x86 [netbsd-6-0]: pmap.c Log Message: Pull up following revision(s) (requested by hannken in ticket #1365): sys/arch/x86/x86/pmap.c: revision 1.190 Operation pmap_pp_clear_attrs() may remove the "used" attribute from a page that is still cached in the TLB of other CPUs. Call pmap_tlb_shootnow() here before enabling preemption to clear the TLB entries on other CPUs. Should prevent tmpfs data corruption under load. Ok: Chuck Silvers To generate a diff of this commit: cvs rdiff -u -r1.164.2.4 -r1.164.2.4.4.1 src/sys/arch/x86/x86/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/x86/x86/pmap.c diff -u src/sys/arch/x86/x86/pmap.c:1.164.2.4 src/sys/arch/x86/x86/pmap.c:1.164.2.4.4.1 --- src/sys/arch/x86/x86/pmap.c:1.164.2.4 Wed May 9 03:22:53 2012 +++ src/sys/arch/x86/x86/pmap.c Thu Jul 14 07:09:39 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.164.2.4 2012/05/09 03:22:53 riz Exp $ */ +/* $NetBSD: pmap.c,v 1.164.2.4.4.1 2016/07/14 07:09:39 snj Exp $ */ /*- * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. @@ -171,7 +171,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.164.2.4 2012/05/09 03:22:53 riz Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.164.2.4.4.1 2016/07/14 07:09:39 snj Exp $"); #include "opt_user_ldt.h" #include "opt_lockdebug.h" @@ -3717,6 +3717,7 @@ startover: } result = pp->pp_attrs & clearbits; pp->pp_attrs &= ~clearbits; + pmap_tlb_shootnow(); kpreempt_enable(); return result != 0;
CVS commit: [netbsd-6-0] src/sys/arch/x86/x86
Module Name:src Committed By: bouyer Date: Sun Nov 15 20:52:09 UTC 2015 Modified Files: src/sys/arch/x86/x86 [netbsd-6-0]: bus_dma.c Log Message: Pull up following revision(s) (requested by christos in ticket #1339): sys/arch/x86/x86/bus_dma.c: revision 1.72 sys/arch/x86/x86/bus_dma.c: revision 1.73 sys/arch/x86/x86/bus_dma.c: revision 1.74 - If we succeeded allocating a buffer that did not need bouncing before, but the buffer in the previous mapping did, clear the bounce bit. Fixes the ld_virtio.c bug with machines 8GB and dd if=/dev/zero of=crash bs=1g count=4. - Allocate with M_ZERO instead of doing memset - The panic string can take a format, use it. - When checking for the bounce buffer boundary check addr + len < limit, not addr < limit. make sure we have a cookie before we try to clear it. fix operator precedence. To generate a diff of this commit: cvs rdiff -u -r1.68 -r1.68.14.1 src/sys/arch/x86/x86/bus_dma.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: [netbsd-6-0] src/sys/arch/x86/x86
Module Name:src Committed By: bouyer Date: Sun Nov 15 20:52:09 UTC 2015 Modified Files: src/sys/arch/x86/x86 [netbsd-6-0]: bus_dma.c Log Message: Pull up following revision(s) (requested by christos in ticket #1339): sys/arch/x86/x86/bus_dma.c: revision 1.72 sys/arch/x86/x86/bus_dma.c: revision 1.73 sys/arch/x86/x86/bus_dma.c: revision 1.74 - If we succeeded allocating a buffer that did not need bouncing before, but the buffer in the previous mapping did, clear the bounce bit. Fixes the ld_virtio.c bug with machines 8GB and dd if=/dev/zero of=crash bs=1g count=4. - Allocate with M_ZERO instead of doing memset - The panic string can take a format, use it. - When checking for the bounce buffer boundary check addr + len < limit, not addr < limit. make sure we have a cookie before we try to clear it. fix operator precedence. To generate a diff of this commit: cvs rdiff -u -r1.68 -r1.68.14.1 src/sys/arch/x86/x86/bus_dma.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/x86/x86/bus_dma.c diff -u src/sys/arch/x86/x86/bus_dma.c:1.68 src/sys/arch/x86/x86/bus_dma.c:1.68.14.1 --- src/sys/arch/x86/x86/bus_dma.c:1.68 Fri Oct 14 18:28:04 2011 +++ src/sys/arch/x86/x86/bus_dma.c Sun Nov 15 20:52:09 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_dma.c,v 1.68 2011/10/14 18:28:04 bouyer Exp $ */ +/* $NetBSD: bus_dma.c,v 1.68.14.1 2015/11/15 20:52:09 bouyer Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2007 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.68 2011/10/14 18:28:04 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.68.14.1 2015/11/15 20:52:09 bouyer Exp $"); /* * The following is included because _bus_dma_uiomove is derived from @@ -283,11 +283,10 @@ _bus_dmamap_create(bus_dma_tag_t t, bus_ error = 0; mapsize = sizeof(struct x86_bus_dmamap) + (sizeof(bus_dma_segment_t) * (nsegments - 1)); - if ((mapstore = malloc(mapsize, M_DMAMAP, - (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK)) == NULL) + if ((mapstore = malloc(mapsize, M_DMAMAP, M_ZERO | + ((flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK))) == NULL) return (ENOMEM); - memset(mapstore, 0, mapsize); map = (struct x86_bus_dmamap *)mapstore; map->_dm_size = size; map->_dm_segcnt = nsegments; @@ -323,12 +322,11 @@ _bus_dmamap_create(bus_dma_tag_t t, bus_ /* * Allocate our cookie. */ - if ((cookiestore = malloc(cookiesize, M_DMAMAP, - (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK)) == NULL) { + if ((cookiestore = malloc(cookiesize, M_DMAMAP, M_ZERO | + ((flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK))) == NULL) { error = ENOMEM; goto out; } - memset(cookiestore, 0, cookiesize); cookie = (struct x86_bus_dma_cookie *)cookiestore; cookie->id_flags = cookieflags; map->_dm_cookie = cookie; @@ -391,6 +389,8 @@ _bus_dmamap_load(bus_dma_tag_t t, bus_dm } error = _bus_dmamap_load_buffer(t, map, buf, buflen, vm, flags); if (error == 0) { + if (cookie != NULL) + cookie->id_flags &= ~X86_DMA_IS_BOUNCING; map->dm_mapsize = buflen; return 0; } @@ -789,7 +789,7 @@ _bus_dmamap_sync(bus_dma_tag_t t, bus_dm */ if ((ops & (BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE)) != 0 && (ops & (BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE)) != 0) - panic("_bus_dmamap_sync: mix PRE and POST"); + panic("%s: mix PRE and POST", __func__); #ifdef DIAGNOSTIC if ((ops & (BUS_DMASYNC_PREWRITE|BUS_DMASYNC_POSTREAD)) != 0) { @@ -916,16 +916,17 @@ _bus_dmamap_sync(bus_dma_tag_t t, bus_dm } case X86_DMA_BUFTYPE_RAW: - panic("_bus_dmamap_sync: X86_DMA_BUFTYPE_RAW"); + panic("%s: X86_DMA_BUFTYPE_RAW", __func__); break; case X86_DMA_BUFTYPE_INVALID: - panic("_bus_dmamap_sync: X86_DMA_BUFTYPE_INVALID"); + panic("%s: X86_DMA_BUFTYPE_INVALID", __func__); break; default: - printf("unknown buffer type %d\n", cookie->id_buftype); - panic("_bus_dmamap_sync"); + panic("%s: unknown buffer type %d", __func__, + cookie->id_buftype); + break; } end: if (ops & (BUS_DMASYNC_PREWRITE|BUS_DMASYNC_POSTWRITE)) { @@ -1233,19 +1234,20 @@ _bus_dmamap_load_buffer(bus_dma_tag_t t, curaddr = _BUS_VIRT_TO_BUS(pmap, vaddr); /* + * Compute the segment size, and adjust counts. + */ + sgsize = PAGE_SIZE - ((u_long)vaddr & PGOFSET); + if (buflen < sgsize) + sgsize = buflen; + + /* * If we're beyond the bounce threshold, notify * the caller. */ if (map->_dm_bounce_thresh != 0 && - curaddr >= map->_dm_bounce_thresh) + curaddr + sgsize >= map->_dm_bounce_thresh) return (EINVAL); - /* - * Compute the segment size, and adjust counts. - */ - sgsize = PAGE_SIZE - ((u_long)vaddr & PGOFSET); - if (buflen < sgsize) - sgsize = buflen; error = _bus_dmamap_load_busaddr(t, map, curaddr, sgsize); if (error)
CVS commit: [netbsd-6-0] src/sys/arch/x86/x86
Module Name:src Committed By: bouyer Date: Sun Nov 15 20:57:08 UTC 2015 Modified Files: src/sys/arch/x86/x86 [netbsd-6-0]: sys_machdep.c Log Message: Pull up following revision(s) (requested by christos in ticket #1341): sys/arch/x86/x86/sys_machdep.c: revision 1.29 fix broken error handling; error was used uninitialized. Changing the compilation flags broke all threaded programs for me. XXX: pullup-7 To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.25.14.1 src/sys/arch/x86/x86/sys_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/x86/x86/sys_machdep.c diff -u src/sys/arch/x86/x86/sys_machdep.c:1.25 src/sys/arch/x86/x86/sys_machdep.c:1.25.14.1 --- src/sys/arch/x86/x86/sys_machdep.c:1.25 Mon Oct 10 15:15:28 2011 +++ src/sys/arch/x86/x86/sys_machdep.c Sun Nov 15 20:57:08 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_machdep.c,v 1.25 2011/10/10 15:15:28 jakllsch Exp $ */ +/* $NetBSD: sys_machdep.c,v 1.25.14.1 2015/11/15 20:57:08 bouyer Exp $ */ /*- * Copyright (c) 1998, 2007, 2009 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.25 2011/10/10 15:15:28 jakllsch Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.25.14.1 2015/11/15 20:57:08 bouyer Exp $"); #include "opt_mtrr.h" #include "opt_perfctrs.h" @@ -657,7 +657,6 @@ x86_set_sdbase(void *arg, char which, lw #else struct pcb *pcb; vaddr_t base; - int error; if (l->l_proc->p_flag & PK_32) { return x86_set_sdbase32(arg, which, l, direct); @@ -666,7 +665,7 @@ x86_set_sdbase(void *arg, char which, lw if (direct) { base = (vaddr_t)arg; } else { - error = copyin(arg, , sizeof(base)); + int error = copyin(arg, , sizeof(base)); if (error != 0) return error; } @@ -674,10 +673,6 @@ x86_set_sdbase(void *arg, char which, lw if (base >= VM_MAXUSER_ADDRESS) return EINVAL; - if (error) { - return error; - } - pcb = lwp_getpcb(l); kpreempt_disable(); @@ -697,7 +692,7 @@ x86_set_sdbase(void *arg, char which, lw } kpreempt_enable(); - return error; + return 0; #endif }
CVS commit: [netbsd-6-0] src/sys/arch/x86/x86
Module Name:src Committed By: bouyer Date: Sun Nov 15 20:57:08 UTC 2015 Modified Files: src/sys/arch/x86/x86 [netbsd-6-0]: sys_machdep.c Log Message: Pull up following revision(s) (requested by christos in ticket #1341): sys/arch/x86/x86/sys_machdep.c: revision 1.29 fix broken error handling; error was used uninitialized. Changing the compilation flags broke all threaded programs for me. XXX: pullup-7 To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.25.14.1 src/sys/arch/x86/x86/sys_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.