Re: Make rd(4) a 'real' device

2011-06-20 Thread Matthew Dempsky
On Sun, Jun 19, 2011 at 07:21:03PM -0700, Matthew Dempsky wrote:
 The diff below makes rd(4) into a real device;

This idea was a little contentious, so diff below includes the rest of
the cleanups I mentioned, but leaves rd(4) as a pseudo-device.

(As before, the RAMDISK_HOOKS option can be removed, but they're
harmless to leave in and there aren't any other necessary config
changes with this diff, so omitting them for now.)

Index: conf/files
===
RCS file: /home/mdempsky/anoncvs/cvs/src/sys/conf/files,v
retrieving revision 1.512
diff -u -p -r1.512 files
--- conf/files  7 Apr 2011 13:42:53 -   1.512
+++ conf/files  20 Jun 2011 05:38:48 -
@@ -493,7 +493,7 @@ pseudo-device vnd: disk
 pseudo-device ccd: disk
 pseudo-device raid: disk
 pseudo-device rd: disk
-file   dev/ramdisk.c   rd needs-flag
+file   dev/rd.crd needs-flag
 
 pseudo-device pty: tty
 pseudo-device nmea: tty
@@ -1015,7 +1015,6 @@ file uvm/uvm_swap_encrypt.c   uvm_swap_en
 file uvm/uvm_unix.c
 file uvm/uvm_user.c
 file uvm/uvm_vnode.c
-file dev/rd.c  ramdisk_hooks
 
 # IPv6
 file net/if_faith.cfaith   needs-count
Index: dev/rd.c
===
RCS file: /home/mdempsky/anoncvs/cvs/src/sys/dev/rd.c,v
retrieving revision 1.2
diff -u -p -r1.2 rd.c
--- dev/rd.c22 Aug 2008 03:12:37 -  1.2
+++ dev/rd.c20 Jun 2011 05:53:22 -
@@ -29,11 +29,20 @@
 
 #include sys/param.h
 #include sys/systm.h
-#include sys/reboot.h
-
-#include dev/ramdisk.h
-
-extern int boothowto;
+#include sys/proc.h
+#include sys/errno.h
+#include sys/buf.h
+#include sys/malloc.h
+#include sys/ioctl.h
+#include sys/disklabel.h
+#include sys/device.h
+#include sys/disk.h
+#include sys/stat.h
+#include sys/file.h
+#include sys/uio.h
+#include sys/conf.h
+#include sys/dkio.h
+#include sys/vnode.h
 
 #ifndef MINIROOTSIZE
 #define MINIROOTSIZE 512
@@ -48,25 +57,360 @@ extern int boothowto;
 u_int32_t rd_root_size = ROOTBYTES;
 char rd_root_image[ROOTBYTES] = |This is the root ramdisk!\n;
 
-/*
- * This is called during autoconfig.
- */
+void   rdattach(int);
+intrd_match(struct device *, void *, void *);
+void   rd_attach(struct device *, struct device *, void *);
+intrd_detach(struct device *, int);
+
+struct rd_softc {
+   struct device   sc_dev;
+   struct disk sc_dk;
+};
+
+struct cfattach rd_ca = {
+   sizeof(struct rd_softc),
+   rd_match,
+   rd_attach,
+   rd_detach
+};
+
+struct cfdriver rd_cd = {
+   NULL,
+   rd,
+   DV_DISK
+};
+
+#define rdlookup(unit) ((struct rd_softc *)disk_lookup(rd_cd, (unit)))
+
+intrdgetdisklabel(dev_t, struct rd_softc *, struct disklabel *, int);
+
 void
-rd_attach_hook(int unit, struct rd_conf *rd)
+rdattach(int num)
 {
-   if (unit == 0) {
-   /* Setup root ramdisk */
-   rd-rd_addr = (caddr_t) rd_root_image;
-   rd-rd_size = (size_t)  rd_root_size;
-   rd-rd_type = RD_KMEM_FIXED;
-   printf(rd%d: fixed, %d blocks\n, unit, MINIROOTSIZE);
+   static struct cfdata cf; /* Fake cf. */
+   struct rd_softc *sc;
+   int i;
+
+   /* There's only one rd_root_image, so only attach one rd. */
+   num = 1;
+
+   /* XXX: Fake up more? */
+   cf.cf_attach = rd_ca;
+   cf.cf_driver = rd_cd;
+
+   rd_cd.cd_ndevs = num;
+   rd_cd.cd_devs = malloc(num * sizeof(void *), M_DEVBUF, M_NOWAIT);
+   if (rd_cd.cd_devs == NULL)
+   panic(rdattach: out of memory);
+
+   for (i = 0; i  num; ++i) {
+   /* Allocate the softc and initialize it. */
+   sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT|M_ZERO);
+   if (sc == NULL)
+   panic(rdattach: out of memory);
+   sc-sc_dev.dv_class = DV_DISK;
+   sc-sc_dev.dv_cfdata = cf;
+   sc-sc_dev.dv_flags = DVF_ACTIVE;
+   sc-sc_dev.dv_unit = i;
+   if (snprintf(sc-sc_dev.dv_xname, sizeof(sc-sc_dev.dv_xname),
+   rd%d, i) = sizeof(sc-sc_dev.dv_xname))
+   panic(rdattach: device name too long);
+   sc-sc_dev.dv_ref = 1;
+
+   /* Attach it to the device tree. */
+   rd_cd.cd_devs[i] = sc;
+   TAILQ_INSERT_TAIL(alldevs, sc-sc_dev, dv_list);
+   device_ref(sc-sc_dev);
+
+   /* Finish initializing. */
+   rd_attach(NULL, sc-sc_dev, NULL);
}
 }
 
-/*
- * This is called during open (i.e. mountroot)
- */
+int
+rd_match(struct device *parent, void *match, void *aux)
+{
+   return (0);
+}
+
+void
+rd_attach(struct device *parent, struct device *self, void *aux)
+{
+   struct rd_softc *sc = (struct rd_softc *)self;
+
+   /* Attach disk. */
+   sc-sc_dk.dk_name = 

hibernate_machdep.c depends on acpi

2011-06-20 Thread Mike Belopuhov
hi,

the hibernate_machdep.c file depends on the acpi so it would be
nice if we excluded this file if kernel config doesn't reference
acpi. a simple fix that establishes the dependency is below. ok?

Index: arch/i386/conf/files.i386
===
RCS file: /home/cvs/src/sys/arch/i386/conf/files.i386,v
retrieving revision 1.203
diff -u -p -r1.203 files.i386
--- arch/i386/conf/files.i386   23 May 2011 09:54:20 -  1.203
+++ arch/i386/conf/files.i386   17 Jun 2011 10:28:40 -
@@ -24,7 +24,7 @@ file  arch/i386/i386/est.c!small_kernel
 file   arch/i386/i386/gdt.c
 file   arch/i386/i386/in_cksum.s   inet
 file   arch/i386/i386/machdep.c
-file   arch/i386/i386/hibernate_machdep.c
+file   arch/i386/i386/hibernate_machdep.c  acpi
 file   arch/i386/i386/via.c
 file   arch/i386/i386/amd64errata.c!small_kernel
 file   arch/i386/i386/kgdb_machdep.c   kgdb



Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Stuart Henderson
On 2011/06/20 13:22, Mark Kettenis wrote:
  Date: Mon, 20 Jun 2011 11:04:24 +0200
  From: Mike Belopuhov m...@crypt.org.ru
  
  hi,
  
  the hibernate_machdep.c file depends on the acpi so it would be
  nice if we excluded this file if kernel config doesn't reference
  acpi. a simple fix that establishes the dependency is below. ok?
 
 The hibernate code doesn't really depend on ACPI.  Currently it is
 only called by the acpi code, but it should work just as well on
 systems without ACPI.

Currently the hibernate code doesn't link if ACPI is not in kernel config.



Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Mark Kettenis
 Date: Mon, 20 Jun 2011 11:04:24 +0200
 From: Mike Belopuhov m...@crypt.org.ru
 
 hi,
 
 the hibernate_machdep.c file depends on the acpi so it would be
 nice if we excluded this file if kernel config doesn't reference
 acpi. a simple fix that establishes the dependency is below. ok?

The hibernate code doesn't really depend on ACPI.  Currently it is
only called by the acpi code, but it should work just as well on
systems without ACPI.

The code should be !small_kernel though; it seems it is currently
wasting ramdisk space.

 Index: arch/i386/conf/files.i386
 ===
 RCS file: /home/cvs/src/sys/arch/i386/conf/files.i386,v
 retrieving revision 1.203
 diff -u -p -r1.203 files.i386
 --- arch/i386/conf/files.i386 23 May 2011 09:54:20 -  1.203
 +++ arch/i386/conf/files.i386 17 Jun 2011 10:28:40 -
 @@ -24,7 +24,7 @@ filearch/i386/i386/est.c!small_kernel
  file arch/i386/i386/gdt.c
  file arch/i386/i386/in_cksum.s   inet
  file arch/i386/i386/machdep.c
 -file arch/i386/i386/hibernate_machdep.c
 +file arch/i386/i386/hibernate_machdep.c  acpi
  file arch/i386/i386/via.c
  file arch/i386/i386/amd64errata.c!small_kernel
  file arch/i386/i386/kgdb_machdep.c   kgdb



Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Mark Kettenis
 Date: Mon, 20 Jun 2011 13:22:52 +0200 (CEST)
 From: Mark Kettenis mark.kette...@xs4all.nl
 
  Date: Mon, 20 Jun 2011 11:04:24 +0200
  From: Mike Belopuhov m...@crypt.org.ru
  
  hi,
  
  the hibernate_machdep.c file depends on the acpi so it would be
  nice if we excluded this file if kernel config doesn't reference
  acpi. a simple fix that establishes the dependency is below. ok?
 
 The hibernate code doesn't really depend on ACPI.  Currently it is
 only called by the acpi code, but it should work just as well on
 systems without ACPI.
 
 The code should be !small_kernel though; it seems it is currently
 wasting ramdisk space.

Turns out it isn't actually wasting space, or at least not a lot of
it, since the whole file is wrapped in #ifndef SMALL_KERNEL.  We could
still consider adding !small_kernel, since it will speed up building
ramdisk kernels a bit.



Re: ksh completion

2011-06-20 Thread LEVAI Daniel
On Sun, Jun 19, 2011 at 15:26:26 -0400, STeve Andre' wrote:
 I hope not.  I've seen this as well.  I want to test this, seeing as
 how I just
 bumped into this.  Can you post the last patch for this?

Alexander has a whole bunch of excelent stuff for ksh in his repo. Seven
patches IIRC, and they really improve the usability of ksh (including
the command completing).
Hope he'll repost them (or the URL for it) soon.


Daniel

-- 
LIVAI Daniel
PGP key ID = 0x83B63A8F
Key fingerprint = DBEC C66B A47A DFA2 792D  650C C69B BE4C 83B6 3A8F



Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Owain Ainsworth
On Mon, Jun 20, 2011 at 01:54:38PM +0200, Mark Kettenis wrote:
  Date: Mon, 20 Jun 2011 13:22:52 +0200 (CEST)
  From: Mark Kettenis mark.kette...@xs4all.nl
  
   Date: Mon, 20 Jun 2011 11:04:24 +0200
   From: Mike Belopuhov m...@crypt.org.ru
   
   hi,
   
   the hibernate_machdep.c file depends on the acpi so it would be
   nice if we excluded this file if kernel config doesn't reference
   acpi. a simple fix that establishes the dependency is below. ok?
  
  The hibernate code doesn't really depend on ACPI.  Currently it is
  only called by the acpi code, but it should work just as well on
  systems without ACPI.
  
  The code should be !small_kernel though; it seems it is currently
  wasting ramdisk space.
 
 Turns out it isn't actually wasting space, or at least not a lot of
 it, since the whole file is wrapped in #ifndef SMALL_KERNEL.  We could
 still consider adding !small_kernel, since it will speed up building
 ramdisk kernels a bit.

Agreed, !small_kernel in the config is much nicer than wrapping the
whole file in an #ifndef.

If no one else does this i'll whip up the diff later today.

-0-
-- 
The sooner all the animals are dead, the sooner we'll find their money.
-- Ed Bluestone, The National Lampoon



Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Mark Kettenis
 Date: Mon, 20 Jun 2011 12:31:57 +0100
 From: Stuart Henderson s...@spacehopper.org
 
 On 2011/06/20 13:22, Mark Kettenis wrote:
   Date: Mon, 20 Jun 2011 11:04:24 +0200
   From: Mike Belopuhov m...@crypt.org.ru
   
   hi,
   
   the hibernate_machdep.c file depends on the acpi so it would be
   nice if we excluded this file if kernel config doesn't reference
   acpi. a simple fix that establishes the dependency is below. ok?
  
  The hibernate code doesn't really depend on ACPI.  Currently it is
  only called by the acpi code, but it should work just as well on
  systems without ACPI.
 
 Currently the hibernate code doesn't link if ACPI is not in kernel config.

Then that problem should be fixed.  Meanwhile, I don't think it is a
big issue if people can't compile their frankenkernels.



Re: X configuration changes for synaptics - please test

2011-06-20 Thread Bryan Vyhmeister
Attached is my dmesg output and Xorg.0.log from my Dell Vostro A90. My
primary motivation for testing this was to see if I could disable
tapping and by default, that is how it works. I am now also able to
scroll with the touchpad. All of this works seamlessly without an
xorg.conf. Everything has been working as expected since yesterday
when I installed everything. Great work guys!

I used the two initial patches (wscons_config.2.diff and
xf86-input-keyboard.diff) along with synaptics.v2.diff.

Bryan

[demime 1.01d removed an attachment of type application/octet-stream which had 
a name of mini9-dmesg]

[demime 1.01d removed an attachment of type text/x-log which had a name of 
mini9-Xorg.0.log]



Re: X configuration changes for synaptics - please test

2011-06-20 Thread Bryan Vyhmeister
Sorry about that. Attached instead of inline. My dmesg and Xorg.0.log
are now inline.

Bryan


OpenBSD 4.9-current (GENERIC.MP) #0: Sun Jun 19 17:02:51 PDT 2011
r...@nine.dsvc.net:/usr/src/sys/arch/i386/compile/GENERIC.MP
cpu0: Intel(R) Atom(TM) CPU N270 @ 1.60GHz (GenuineIntel 686-class) 1.60 GHz
cpu0: 
FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,SBF,SSE3,MWAIT,DS-CPL,EST,TM2,SSSE3,xTPR,PDCM,MOVBE
real mem  = 2137387008 (2038MB)
avail mem = 2092212224 (1995MB)
mainbus0 at root
bios0 at mainbus0: AT/286+ BIOS, date 03/05/09, BIOS32 rev. 0 @
0xfdc40, SMBIOS rev. 2.5 @ 0xf2350 (34 entries)
bios0: vendor Dell Inc. version A04 date 03/05/2009
bios0: Dell Inc. Vostro A90
acpi0 at bios0: rev 2
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP APIC HPET MCFG TCPA TMOR APIC BOOT SSDT
acpi0: wakeup devices LID0(S3) HDEF(S4) PXS1(S4) PXS2(S4) PXS3(S3)
PXS4(S4) PXS5(S4) PXS6(S4) USB1(S0) USB2(S0) USB3(S0) USB4(S0)
USB7(S0) SLT0(S4) SLT1(S4) SLT2(S4) SL
T3(S4) SLT6(S4)
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee0: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: apic clock running at 133MHz
cpu1 at mainbus0: apid 1 (application processor)
cpu1: Intel(R) Atom(TM) CPU N270 @ 1.60GHz (GenuineIntel 686-class) 1.60 GHz
cpu1: 
FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,SBF,SSE3,MWAIT,DS-CPL,EST,TM2,SSSE3,xTPR,PDCM,MOVBE
ioapic0 at mainbus0: apid 1 pa 0xfec0, version 20, 24 pins
ioapic0: misconfigured as apic 2, remapped to apid 1
acpihpet0 at acpi0: 14318179 Hz
acpimcfg0 at acpi0 addr 0xe000, bus 0-255
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus 2 (RP01)
acpiprt2 at acpi0: bus 3 (RP02)
acpiprt3 at acpi0: bus 4 (RP03)
acpiprt4 at acpi0: bus -1 (RP04)
acpiprt5 at acpi0: bus -1 (RP05)
acpiprt6 at acpi0: bus -1 (RP06)
acpiprt7 at acpi0: bus 5 (PCIB)
acpiec0 at acpi0
acpicpu0 at acpi0: C3, C2, C1, PSS
acpicpu1 at acpi0: C3, C2, C1, PSS
acpitz0 at acpi0: critical temperature is 102 degC
acpibtn0 at acpi0: LID0
acpibtn1 at acpi0: PWRB
acpibtn2 at acpi0: SLPB
acpiac0 at acpi0: AC unit online
acpibat0 at acpi0: BAT1 serial 11 type Lion oem DELL
acpivideo0 at acpi0: GFX0
acpivout0 at acpivideo0: LCD_
bios0: ROM list: 0xc/0xec00! 0xcf000/0x1000 0xe/0x1800!
cpu0: Enhanced SpeedStep 1597 MHz: speeds: 1600, 1333, 1067, 800 MHz
pci0 at mainbus0 bus 0: configuration mode 1 (bios)
pchb0 at pci0 dev 0 function 0 Intel 82945GME Host rev 0x03
vga1 at pci0 dev 2 function 0 Intel 82945GME Video rev 0x03
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
intagp0 at vga1
agp0 at intagp0: aperture at 0xd000, size 0x1000
inteldrm0 at vga1: apic 1 int 16
drm0 at inteldrm0
Intel 82945GM Video rev 0x03 at pci0 dev 2 function 1 not configured
azalia0 at pci0 dev 27 function 0 Intel 82801GB HD Audio rev 0x02: msi
azalia0: codecs: Realtek ALC268
audio0 at azalia0
ppb0 at pci0 dev 28 function 0 Intel 82801GB PCIE rev 0x02: apic 1 int 17
pci1 at ppb0 bus 2
JMicron SD/MMC rev 0x00 at pci1 dev 0 function 0 not configured
sdhc0 at pci1 dev 0 function 2 JMicron SD Host Controller rev 0x00:
apic 1 int 16
sdmmc0 at sdhc0
JMicron Memory Stick rev 0x00 at pci1 dev 0 function 3 not configured
ppb1 at pci0 dev 28 function 1 Intel 82801GB PCIE rev 0x02: apic 1 int 16
pci2 at ppb1 bus 3
iwn0 at pci2 dev 0 function 0 Intel WiFi Link 5100 rev 0x00: msi,
MIMO 1T2R, MoW, address 00:21:6b:94:12:fa
ppb2 at pci0 dev 28 function 2 Intel 82801GB PCIE rev 0x02: apic 1 int 18
pci3 at ppb2 bus 4
re0 at pci3 dev 0 function 0 Realtek 8101E rev 0x02: RTL8102EL
(0x2480), apic 1 int 18, address 00:24:e8:a6:6a:d3
rlphy0 at re0 phy 7: RTL8201L 10/100 PHY, rev. 1
uhci0 at pci0 dev 29 function 0 Intel 82801GB USB rev 0x02: apic 1 int 23
uhci1 at pci0 dev 29 function 1 Intel 82801GB USB rev 0x02: apic 1 int 19
uhci2 at pci0 dev 29 function 2 Intel 82801GB USB rev 0x02: apic 1 int 18
uhci3 at pci0 dev 29 function 3 Intel 82801GB USB rev 0x02: apic 1 int 16
ehci0 at pci0 dev 29 function 7 Intel 82801GB USB rev 0x02: apic 1 int 23
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 Intel EHCI root hub rev 2.00/1.00 addr 1
ppb3 at pci0 dev 30 function 0 Intel 82801BAM Hub-to-PCI rev 0xe2
pci4 at ppb3 bus 5
ichpcib0 at pci0 dev 31 function 0 Intel 82801GBM LPC rev 0x02: PM disabled
pciide0 at pci0 dev 31 function 1 Intel 82801GB IDE rev 0x02: DMA,
channel 0 configured to compatibility, channel 1 configured to
compatibility
wd0 at pciide0 channel 0 drive 0: STT_FEM16GFDL
wd0: 1-sector PIO, LBA, 14559MB, 29818656 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 5
pciide0: channel 1 ignored (disabled)
ichiic0 at pci0 dev 31 function 3 Intel 82801GB SMBus rev 0x02: apic 1 int 19
iic0 at ichiic0
spdmem0 at iic0 addr 0x50: 2GB DDR2 SDRAM non-parity PC2-5300CL5 SO-DIMM
usb1 at uhci0: USB revision 1.0
uhub1 at usb1 Intel 

Convert SO_RTABLE protocol level to SOL_SOCKET

2011-06-20 Thread Mike Belopuhov
Now that we support SO_RTABLE on the socket level, it makes
sense to cleanup the tree.  OK?

Index: sbin/ping/ping.c
===
RCS file: /home/cvs/src/sbin/ping/ping.c,v
retrieving revision 1.88
diff -u -p -r1.88 ping.c
--- sbin/ping/ping.c3 Jul 2010 04:44:51 -   1.88
+++ sbin/ping/ping.c20 Jun 2011 15:31:59 -
@@ -312,7 +312,7 @@ main(int argc, char *argv[])
errx(1, rtable value is %s: %s,
errstr, optarg);
 
-   if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
sizeof(rtableid)) == -1)
err(1, setsockopt SO_RTABLE);
break;
Index: usr.bin/nc/netcat.c
===
RCS file: /home/cvs/src/usr.bin/nc/netcat.c,v
retrieving revision 1.100
diff -u -p -r1.100 netcat.c
--- usr.bin/nc/netcat.c 9 Jan 2011 22:16:46 -   1.100
+++ usr.bin/nc/netcat.c 20 Jun 2011 15:50:35 -
@@ -552,7 +552,7 @@ remote_connect(const char *host, const c
continue;
 
if (rtableid) {
-   if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
sizeof(rtableid)) == -1)
err(1, setsockopt SO_RTABLE);
}
Index: usr.bin/tcpbench/tcpbench.c
===
RCS file: /home/cvs/src/usr.bin/tcpbench/tcpbench.c,v
retrieving revision 1.21
diff -u -p -r1.21 tcpbench.c
--- usr.bin/tcpbench/tcpbench.c 16 Mar 2011 08:06:10 -  1.21
+++ usr.bin/tcpbench/tcpbench.c 20 Jun 2011 15:53:59 -
@@ -719,9 +719,10 @@ server_init(struct addrinfo *aitop, stru
warn(socket);
continue;
}
-   if (ptb-Vflag  ai-ai_family == AF_INET) {
-   if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
-   ptb-Vflag, sizeof(ptb-Vflag)) == -1)
+   if (ptb-Vflag) {
+   if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
+   ptb-Vflag, sizeof(ptb-Vflag)) == -1 
+   errno != ENOPROTOOPT)
err(1, setsockopt SO_RTABLE);
} else if (ptb-Vflag)
warnx(rtable only supported on AF_INET);
@@ -817,9 +818,10 @@ client_init(struct addrinfo *aitop, int 
warn(socket);
continue;
}
-   if (ptb-Vflag  ai-ai_family == AF_INET) {
-   if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
-   ptb-Vflag, sizeof(ptb-Vflag)) == -1)
+   if (ptb-Vflag) {
+   if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
+   ptb-Vflag, sizeof(ptb-Vflag)) == -1 
+   errno != ENOPROTOOPT)
err(1, setsockopt SO_RTABLE);
} else if (ptb-Vflag)
warnx(rtable only supported on AF_INET);
Index: usr.bin/telnet/commands.c
===
RCS file: /home/cvs/src/usr.bin/telnet/commands.c,v
retrieving revision 1.52
diff -u -p -r1.52 commands.c
--- usr.bin/telnet/commands.c   3 Jul 2010 04:44:51 -   1.52
+++ usr.bin/telnet/commands.c   20 Jun 2011 16:00:02 -
@@ -2397,7 +2397,7 @@ tn(argc, argv)
continue;
 
if (rtableid) {
-   if (setsockopt(net, IPPROTO_IP, SO_RTABLE, rtableid,
+   if (setsockopt(net, SOL_SOCKET, SO_RTABLE, rtableid,
sizeof(rtableid)) == -1)
perror(setsockopt (SO_RTABLE));
}
Index: usr.sbin/dhcrelay/dhcrelay.c
===
RCS file: /home/cvs/src/usr.sbin/dhcrelay/dhcrelay.c,v
retrieving revision 1.34
diff -u -p -r1.34 dhcrelay.c
--- usr.sbin/dhcrelay/dhcrelay.c3 Jul 2010 04:44:52 -   1.34
+++ usr.sbin/dhcrelay/dhcrelay.c20 Jun 2011 16:05:40 -
@@ -176,7 +176,7 @@ main(int argc, char *argv[])
if (setsockopt(sp-fd, SOL_SOCKET, SO_REUSEPORT,
opt, sizeof(opt)) == -1)
error(setsockopt: %m);
-   if (setsockopt(sp-fd, IPPROTO_IP, SO_RTABLE, rdomain,
+   if (setsockopt(sp-fd, SOL_SOCKET, SO_RTABLE, rdomain,
sizeof(rdomain)) == -1)
error(setsockopt: %m);
if (bind(sp-fd, (struct sockaddr 

Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Theo de Raadt
 The code should be !small_kernel though; it seems it is currently
 wasting ramdisk space.

Yes, it should be !small_kernel



Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Mike Belopuhov
On Mon, Jun 20, 2011 at 13:22 +0200, Mark Kettenis wrote:
  Date: Mon, 20 Jun 2011 11:04:24 +0200
  From: Mike Belopuhov m...@crypt.org.ru
  
  hi,
  
  the hibernate_machdep.c file depends on the acpi so it would be
  nice if we excluded this file if kernel config doesn't reference
  acpi. a simple fix that establishes the dependency is below. ok?
 
 The hibernate code doesn't really depend on ACPI.  Currently it is
 only called by the acpi code, but it should work just as well on
 systems without ACPI.
 

it's an unfortunate consequence of putting an assembler chunk of the
hibernate code into the acpi_wakecode.S.



Re: Convert SO_RTABLE protocol level to SOL_SOCKET

2011-06-20 Thread Claudio Jeker
On Mon, Jun 20, 2011 at 06:30:11PM +0200, Mike Belopuhov wrote:
 Now that we support SO_RTABLE on the socket level, it makes
 sense to cleanup the tree.  OK?
 

The if (getsockopt()  errno != ENOPROTOOPT) constructs are in my opinion
evil but the sa_family == AF_INET check is not much better but I guess you
should have a closer look at tcpbench:
if (ptb-Vflag) {
if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
ptb-Vflag, sizeof(ptb-Vflag)) == -1 
errno != ENOPROTOOPT)
err(1, setsockopt SO_RTABLE);
} else if (ptb-Vflag)
warnx(rtable only supported on AF_INET);

That does not make sense.
The other changes are OK claudio@

 Index: sbin/ping/ping.c
 ===
 RCS file: /home/cvs/src/sbin/ping/ping.c,v
 retrieving revision 1.88
 diff -u -p -r1.88 ping.c
 --- sbin/ping/ping.c  3 Jul 2010 04:44:51 -   1.88
 +++ sbin/ping/ping.c  20 Jun 2011 15:31:59 -
 @@ -312,7 +312,7 @@ main(int argc, char *argv[])
   errx(1, rtable value is %s: %s,
   errstr, optarg);
  
 - if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
 + if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
   sizeof(rtableid)) == -1)
   err(1, setsockopt SO_RTABLE);
   break;
 Index: usr.bin/nc/netcat.c
 ===
 RCS file: /home/cvs/src/usr.bin/nc/netcat.c,v
 retrieving revision 1.100
 diff -u -p -r1.100 netcat.c
 --- usr.bin/nc/netcat.c   9 Jan 2011 22:16:46 -   1.100
 +++ usr.bin/nc/netcat.c   20 Jun 2011 15:50:35 -
 @@ -552,7 +552,7 @@ remote_connect(const char *host, const c
   continue;
  
   if (rtableid) {
 - if (setsockopt(s, IPPROTO_IP, SO_RTABLE, rtableid,
 + if (setsockopt(s, SOL_SOCKET, SO_RTABLE, rtableid,
   sizeof(rtableid)) == -1)
   err(1, setsockopt SO_RTABLE);
   }
 Index: usr.bin/tcpbench/tcpbench.c
 ===
 RCS file: /home/cvs/src/usr.bin/tcpbench/tcpbench.c,v
 retrieving revision 1.21
 diff -u -p -r1.21 tcpbench.c
 --- usr.bin/tcpbench/tcpbench.c   16 Mar 2011 08:06:10 -  1.21
 +++ usr.bin/tcpbench/tcpbench.c   20 Jun 2011 15:53:59 -
 @@ -719,9 +719,10 @@ server_init(struct addrinfo *aitop, stru
   warn(socket);
   continue;
   }
 - if (ptb-Vflag  ai-ai_family == AF_INET) {
 - if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
 - ptb-Vflag, sizeof(ptb-Vflag)) == -1)
 + if (ptb-Vflag) {
 + if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
 + ptb-Vflag, sizeof(ptb-Vflag)) == -1 
 + errno != ENOPROTOOPT)
   err(1, setsockopt SO_RTABLE);
   } else if (ptb-Vflag)
   warnx(rtable only supported on AF_INET);
 @@ -817,9 +818,10 @@ client_init(struct addrinfo *aitop, int 
   warn(socket);
   continue;
   }
 - if (ptb-Vflag  ai-ai_family == AF_INET) {
 - if (setsockopt(sock, IPPROTO_IP, SO_RTABLE,
 - ptb-Vflag, sizeof(ptb-Vflag)) == -1)
 + if (ptb-Vflag) {
 + if (setsockopt(sock, SOL_SOCKET, SO_RTABLE,
 + ptb-Vflag, sizeof(ptb-Vflag)) == -1 
 + errno != ENOPROTOOPT)
   err(1, setsockopt SO_RTABLE);
   } else if (ptb-Vflag)
   warnx(rtable only supported on AF_INET);
 Index: usr.bin/telnet/commands.c
 ===
 RCS file: /home/cvs/src/usr.bin/telnet/commands.c,v
 retrieving revision 1.52
 diff -u -p -r1.52 commands.c
 --- usr.bin/telnet/commands.c 3 Jul 2010 04:44:51 -   1.52
 +++ usr.bin/telnet/commands.c 20 Jun 2011 16:00:02 -
 @@ -2397,7 +2397,7 @@ tn(argc, argv)
   continue;
  
   if (rtableid) {
 - if (setsockopt(net, IPPROTO_IP, SO_RTABLE, rtableid,
 + if (setsockopt(net, SOL_SOCKET, SO_RTABLE, rtableid,
   sizeof(rtableid)) == -1)
   perror(setsockopt (SO_RTABLE));
   }
 Index: usr.sbin/dhcrelay/dhcrelay.c
 ===
 RCS file: 

Re: pf flag PFDESC_IP_REAS

2011-06-20 Thread Claudio Jeker
On Mon, Jun 20, 2011 at 02:09:39AM +0200, Alexander Bluhm wrote:
 Hi,
 
 We accept more TCP reset packets in pf, if fragment reassembly is
 turned off.  That does not make sense to me.  It came into the tree
 here:
 
 revision 1.443
 date: 2004/04/27 18:28:07;  author: frantzen;  state: Exp;  lines: +9 -6
 validate the sequence numbers on TCP resets are an exact match.  check is only
 enabled when we're doing full frag reassembly and thus have full seq info
 ok markus@
 
 Nowadays we have full fragment reassembly on by default, the fragment
 cache has gone.  When the user turns it off, he has to cope with
 the consequences.  Fragmented TCP reset packets too short for the
 sequence number are likely to be evil.
 
 ok to remove PFDESC_IP_REAS?
 

Yes please. OK claudio@ and sorry for the conflict.
The codepath with this check is only entered with either not fragmented
packets or with packets that are reassembled. So there is no way you could
end up there with a fragment. Plus it removes the pd from
pf_normalize_ip() which is something I planned to do soon.

 
 Index: net/pf.c
 ===
 RCS file: /data/mirror/openbsd/cvs/src/sys/net/pf.c,v
 retrieving revision 1.747
 diff -u -p -r1.747 pf.c
 --- net/pf.c  2 Jun 2011 22:08:40 -   1.747
 +++ net/pf.c  17 Jun 2011 23:59:35 -
 @@ -3617,8 +3617,7 @@ pf_tcp_track_full(struct pf_state_peer *
   (ackskew = (MAXACKWINDOW  sws)) 
   /* Acking not more than one window forward */
   ((th-th_flags  TH_RST) == 0 || orig_seq == src-seqlo ||
 - (orig_seq == src-seqlo + 1) || (orig_seq + 1 == src-seqlo) ||
 - (pd-flags  PFDESC_IP_REAS) == 0)) {
 + (orig_seq == src-seqlo + 1) || (orig_seq + 1 == src-seqlo))) {
   /* Require an exact/+1 sequence match on resets when possible */
  
   if (dst-scrub || src-scrub) {
 @@ -5810,7 +5809,7 @@ pf_test(int dir, struct ifnet *ifp, stru
   h = mtod(m, struct ip *);
   if (pf_status.reass 
   (h-ip_off  htons(IP_MF | IP_OFFMASK)) 
 - pf_normalize_ip(m0, dir, kif, reason, pd) != PF_PASS) {
 + pf_normalize_ip(m0, dir, kif, reason) != PF_PASS) {
   action = PF_DROP;
   goto done;
   }
 @@ -6090,7 +6089,7 @@ pf_test6(int fwdir, struct ifnet *ifp, s
  
   /* packet reassembly */
   if (pf_status.reass 
 - pf_normalize_ip6(m0, fwdir, kif, reason, pd) != PF_PASS) {
 + pf_normalize_ip6(m0, fwdir, kif, reason) != PF_PASS) {
   action = PF_DROP;
   goto done;
   }
 Index: net/pf_norm.c
 ===
 RCS file: /data/mirror/openbsd/cvs/src/sys/net/pf_norm.c,v
 retrieving revision 1.133
 diff -u -p -r1.133 pf_norm.c
 --- net/pf_norm.c 24 May 2011 14:01:52 -  1.133
 +++ net/pf_norm.c 17 Jun 2011 23:58:35 -
 @@ -740,7 +740,7 @@ pf_refragment6(struct mbuf **m0, struct 
  
  int
  pf_normalize_ip(struct mbuf **m0, int dir, struct pfi_kif *kif,
 -u_short *reason, struct pf_pdesc *pd)
 +u_short *reason)
  {
   struct mbuf *m = *m0;
   struct ip   *h = mtod(m, struct ip *);
 @@ -787,7 +787,6 @@ pf_normalize_ip(struct mbuf **m0, int di
   if (h-ip_off  ~htons(IP_DF))
   h-ip_off = htons(IP_DF);
  
 - pd-flags |= PFDESC_IP_REAS;
   return (PF_PASS);
  
   drop:
 @@ -798,7 +797,7 @@ pf_normalize_ip(struct mbuf **m0, int di
  #ifdef INET6
  int
  pf_normalize_ip6(struct mbuf **m0, int dir, struct pfi_kif *kif,
 -u_short *reason, struct pf_pdesc *pd)
 +u_short *reason)
  {
   struct mbuf *m = *m0;
   struct ip6_hdr  *h = mtod(m, struct ip6_hdr *);
 @@ -924,7 +923,6 @@ pf_normalize_ip6(struct mbuf **m0, int d
   if (m == NULL)
   return (PF_PASS);
  
 - pd-flags |= PFDESC_IP_REAS;
   return (PF_PASS);
  
   shortpkt:
 Index: net/pfvar.h
 ===
 RCS file: /data/mirror/openbsd/cvs/src/sys/net/pfvar.h,v
 retrieving revision 1.332
 diff -u -p -r1.332 pfvar.h
 --- net/pfvar.h   24 May 2011 14:01:52 -  1.332
 +++ net/pfvar.h   17 Jun 2011 23:58:57 -
 @@ -1221,8 +1221,6 @@ struct pf_pdesc {
   u_int16_t   *proto_sum;
  
   u_int16_trdomain;   /* original routing domain */
 - u_int16_tflags;
 -#define PFDESC_IP_REAS   0x0002  /* IP frags would've been 
 reassembled */
   sa_family_t  af;
   u_int8_t proto;
   u_int8_t tos;
 @@ -1777,10 +1775,8 @@ intpf_match_gid(u_int8_t, gid_t, gid_t,
  
  int  pf_refragment6(struct mbuf **, struct m_tag *mtag, int);
  void pf_normalize_init(void);
 -int  pf_normalize_ip(struct mbuf **, int, struct pfi_kif *, u_short *,
 - struct pf_pdesc *);
 -int  pf_normalize_ip6(struct mbuf **, int, struct pfi_kif *, u_short *,
 -   

Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Mike Larkin
On Mon, Jun 20, 2011 at 01:02:01PM +0100, Owain Ainsworth wrote:
 On Mon, Jun 20, 2011 at 01:54:38PM +0200, Mark Kettenis wrote:
   Date: Mon, 20 Jun 2011 13:22:52 +0200 (CEST)
   From: Mark Kettenis mark.kette...@xs4all.nl
   
Date: Mon, 20 Jun 2011 11:04:24 +0200
From: Mike Belopuhov m...@crypt.org.ru

hi,

the hibernate_machdep.c file depends on the acpi so it would be
nice if we excluded this file if kernel config doesn't reference
acpi. a simple fix that establishes the dependency is below. ok?
   
   The hibernate code doesn't really depend on ACPI.  Currently it is
   only called by the acpi code, but it should work just as well on
   systems without ACPI.
   
   The code should be !small_kernel though; it seems it is currently
   wasting ramdisk space.
  
  Turns out it isn't actually wasting space, or at least not a lot of
  it, since the whole file is wrapped in #ifndef SMALL_KERNEL.  We could
  still consider adding !small_kernel, since it will speed up building
  ramdisk kernels a bit.
 
 Agreed, !small_kernel in the config is much nicer than wrapping the
 whole file in an #ifndef.
 
 If no one else does this i'll whip up the diff later today.
 
 -0-
 -- 
 The sooner all the animals are dead, the sooner we'll find their money.
   -- Ed Bluestone, The National Lampoon

I'm ok with the diff, mlarkin@

PS Nathanael Rensen nathanael at polymorpheus.com pointed this out to me
a few months back, just never got around to it.

-ml



Re: hibernate_machdep.c depends on acpi

2011-06-20 Thread Mike Larkin
On Mon, Jun 20, 2011 at 06:38:40PM +0200, Mike Belopuhov wrote:
 On Mon, Jun 20, 2011 at 13:22 +0200, Mark Kettenis wrote:
   Date: Mon, 20 Jun 2011 11:04:24 +0200
   From: Mike Belopuhov m...@crypt.org.ru
   
   hi,
   
   the hibernate_machdep.c file depends on the acpi so it would be
   nice if we excluded this file if kernel config doesn't reference
   acpi. a simple fix that establishes the dependency is below. ok?
  
  The hibernate code doesn't really depend on ACPI.  Currently it is
  only called by the acpi code, but it should work just as well on
  systems without ACPI.
  
 
 it's an unfortunate consequence of putting an assembler chunk of the
 hibernate code into the acpi_wakecode.S.

We could split that up I suppose. There are two functions in there that
are needed in hibernate, one to swap stacks and the other to bounce down
to the S3 resume trampoline.

-ml



fix a few uvm includes

2011-06-20 Thread Ted Unangst
uvm_extern.h is the header people should be consuming.  change a few uvm.h 
to uvm_extern.h.

a couple other sys .h headers included uvm when they don't need to.  fix 
that.

fix a few .c files that depended on getting headers from headers.

also, simplify and move the bufcache adjustment code from sysctl to the 
vfs_bio.c where it fits nicer.

Index: arch/i386/i386/machdep.c
===
RCS file: /home/tedu/cvs/src/sys/arch/i386/i386/machdep.c,v
retrieving revision 1.500
diff -u -r1.500 machdep.c
--- arch/i386/i386/machdep.c5 Jun 2011 19:41:07 -   1.500
+++ arch/i386/i386/machdep.c20 Jun 2011 19:26:09 -
@@ -83,7 +83,6 @@
 #include sys/mbuf.h
 #include sys/msgbuf.h
 #include sys/mount.h
-#include sys/vnode.h
 #include sys/device.h
 #include sys/extent.h
 #include sys/sysctl.h
@@ -101,6 +100,7 @@
 
 #include uvm/uvm_extern.h
 #include uvm/uvm_swap.h
+#include uvm/uvm.h
 
 #include machine/bus.h
 
Index: kern/exec_subr.c
===
RCS file: /home/tedu/cvs/src/sys/kern/exec_subr.c,v
retrieving revision 1.28
diff -u -r1.28 exec_subr.c
--- kern/exec_subr.c14 Nov 2006 18:00:27 -  1.28
+++ kern/exec_subr.c20 Jun 2011 19:22:34 -
@@ -41,7 +41,7 @@
 #include sys/mman.h
 #include sys/resourcevar.h
 
-#include uvm/uvm.h
+#include uvm/uvm_extern.h
 
 #ifdef DEBUG
 /*
Index: kern/init_main.c
===
RCS file: /home/tedu/cvs/src/sys/kern/init_main.c,v
retrieving revision 1.177
diff -u -r1.177 init_main.c
--- kern/init_main.c18 Apr 2011 21:44:56 -  1.177
+++ kern/init_main.c20 Jun 2011 19:22:34 -
@@ -85,7 +85,7 @@
 
 #include machine/cpu.h
 
-#include uvm/uvm.h
+#include uvm/uvm_extern.h
 
 #include net/if.h
 #include net/raw_cb.h
Index: kern/kern_fork.c
===
RCS file: /home/tedu/cvs/src/sys/kern/kern_fork.c,v
retrieving revision 1.126
diff -u -r1.126 kern_fork.c
--- kern/kern_fork.c6 Jun 2011 17:05:46 -   1.126
+++ kern/kern_fork.c20 Jun 2011 19:27:20 -
@@ -64,6 +64,7 @@
 
 #include uvm/uvm_extern.h
 #include uvm/uvm_map.h
+#include uvm/uvm.h
 
 intnprocs = 1; /* process 0 */
 intrandompid;  /* when set to 1, pid's go random */
Index: kern/kern_sysctl.c
===
RCS file: /home/tedu/cvs/src/sys/kern/kern_sysctl.c,v
retrieving revision 1.203
diff -u -r1.203 kern_sysctl.c
--- kern/kern_sysctl.c  9 Jun 2011 21:10:55 -   1.203
+++ kern/kern_sysctl.c  20 Jun 2011 19:22:34 -
@@ -565,22 +565,17 @@
return (sysctl_int(oldp, oldlenp, newp, newlen,
rthreads_enabled));
case KERN_CACHEPCT: {
-   u_int64_t dmapages;
-   int opct, pgs;
-   opct = bufcachepercent;
+   int newpct = bufcachepercent;
error = sysctl_int(oldp, oldlenp, newp, newlen,
-   bufcachepercent);
+   newpct);
if (error)
return(error);
-   if (bufcachepercent  90 || bufcachepercent  5) {
-   bufcachepercent = opct;
+   if (newpct  90 || newpct  5) {
return (EINVAL);
}
-   dmapages = uvm_pagecount(dma_constraint);
-   if (bufcachepercent != opct) {
-   pgs = bufcachepercent * dmapages / 100;
-   bufadjust(pgs); /* adjust bufpages */
-   bufhighpages = bufpages; /* set high water mark */
+   if (bufcachepercent != newpct) {
+   bufcachepercent = newpct;
+   bufadjustpct();
}
return(0);
}
Index: kern/uipc_mbuf.c
===
RCS file: /home/tedu/cvs/src/sys/kern/uipc_mbuf.c,v
retrieving revision 1.157
diff -u -r1.157 uipc_mbuf.c
--- kern/uipc_mbuf.c4 May 2011 16:05:49 -   1.157
+++ kern/uipc_mbuf.c20 Jun 2011 19:22:34 -
@@ -89,7 +89,6 @@
 
 #include machine/cpu.h
 
-#include uvm/uvm.h
 #include uvm/uvm_extern.h
 
 #ifdef DDB
Index: kern/vfs_bio.c
===
RCS file: /home/tedu/cvs/src/sys/kern/vfs_bio.c,v
retrieving revision 1.130
diff -u -r1.130 vfs_bio.c
--- kern/vfs_bio.c  5 Jun 2011 19:41:04 -   1.130
+++ kern/vfs_bio.c  20 Jun 2011 19:22:34 -
@@ -58,6 +58,7 @@
 #include sys/kernel.h
 
 #include uvm/uvm_extern.h
+#include uvm/uvm.h   /* need dma_constraint */
 
 #include miscfs/specfs/specdev.h
 
@@ -119,6 +120,8 @@
 struct proc *cleanerproc;
 int bd_req;/* Sleep point for cleaner daemon. */
 
+void bufadjust(int);
+
 void
 

Re: fix a few uvm includes

2011-06-20 Thread Miod Vallat
 uvm_extern.h is the header people should be consuming.  change a few uvm.h 
 to uvm_extern.h.

This is not what, say, kern_fork.c does. If you include uvm.h, you
don't need any other uvm_whatever.h, and definitely not
uvm/uvm_extern.h.

 also, simplify and move the bufcache adjustment code from sysctl to the 
 vfs_bio.c where it fits nicer.

Separate diff please.



grep -o

2011-06-20 Thread Ted Unangst
this was proposed a while ago, but got sidetracked by some nonstandard 
option discussion. bringing it back in slightly different form.

-o only prints the matching parts of a line, not the entire line.  While 
this is possible using awk, the same could be said of everything grep 
does.  It is intended to match the behavior of the same option in gnu 
grep.

Index: grep.1
===
RCS file: /home/tedu/cvs/src/usr.bin/grep/grep.1,v
retrieving revision 1.40
diff -u -r1.40 grep.1
--- grep.1  4 Mar 2011 03:11:22 -   1.40
+++ grep.1  20 Jun 2011 19:38:55 -
@@ -38,7 +38,7 @@
 .Sh SYNOPSIS
 .Nm grep
 .Bk -words
-.Op Fl abcEFGHhIiLlnqRsUVvwxZ
+.Op Fl abcEFGHhIiLlnoqRsUVvwxZ
 .Op Fl A Ar num
 .Op Fl B Ar num
 .Op Fl C Ns Op Ar num
@@ -228,6 +228,8 @@
 .Fl q
 is
 specified.
+.It Fl o
+Print each match, but only the match, not the containing line.
 .It Fl q
 Quiet mode:
 suppress normal output.
Index: grep.c
===
RCS file: /home/tedu/cvs/src/usr.bin/grep/grep.c,v
retrieving revision 1.43
diff -u -r1.43 grep.c
--- grep.c  4 Mar 2011 03:11:23 -   1.43
+++ grep.c  20 Jun 2011 19:36:39 -
@@ -74,6 +74,7 @@
 int iflag; /* -i: ignore case */
 int lflag; /* -l: only show names of files with matches */
 int nflag; /* -n: show line numbers in front of matching lines */
+int oflag; /* -o: print each match */
 int qflag; /* -q: quiet mode (don't output anything) */
 int sflag; /* -s: silent mode (ignore errors) */
 int vflag; /* -v: only show non-matching lines */
@@ -117,9 +118,9 @@
 }
 
 #ifdef NOZ
-static char *optstr = 0123456789A:B:CEFGHILRUVabce:f:hilnqrsuvwxy;
+static char *optstr = 0123456789A:B:CEFGHILRUVabce:f:hilnoqrsuvwxy;
 #else
-static char *optstr = 0123456789A:B:CEFGHILRUVZabce:f:hilnqrsuvwxy;
+static char *optstr = 0123456789A:B:CEFGHILRUVZabce:f:hilnoqrsuvwxy;
 #endif
 
 struct option long_options[] =
@@ -382,6 +383,9 @@
break;
case 'n':
nflag = 1;
+   break;
+   case 'o':
+   oflag = 1;
break;
case 'q':
qflag = 1;
Index: grep.h
===
RCS file: /home/tedu/cvs/src/usr.bin/grep/grep.h,v
retrieving revision 1.16
diff -u -r1.16 grep.h
--- grep.h  4 Mar 2011 03:11:23 -   1.16
+++ grep.h  20 Jun 2011 19:34:58 -
@@ -65,7 +65,7 @@
 /* Command line flags */
 extern int  Aflag, Bflag, Eflag, Fflag, Gflag, Hflag, Lflag,
 Rflag, Zflag,
-bflag, cflag, hflag, iflag, lflag, nflag, qflag, sflag,
+bflag, cflag, hflag, iflag, lflag, nflag, oflag, qflag, sflag,
 vflag, wflag, xflag;
 extern int  binbehave;
 
@@ -84,7 +84,7 @@
 void   *grep_malloc(size_t size);
 void   *grep_calloc(size_t nmemb, size_t size);
 void   *grep_realloc(void *ptr, size_t size);
-voidprintline(str_t *line, int sep);
+voidprintline(str_t *line, int sep, regmatch_t *pmatch);
 int fastcomp(fastgrep_t *, const char *);
 voidfgrepcomp(fastgrep_t *, const char *);
 
Index: queue.c
===
RCS file: /home/tedu/cvs/src/usr.bin/grep/queue.c,v
retrieving revision 1.5
diff -u -r1.5 queue.c
--- queue.c 9 Feb 2006 09:54:47 -   1.5
+++ queue.c 20 Jun 2011 19:33:23 -
@@ -107,7 +107,7 @@
queue_t *item;
 
while ((item = dequeue()) != NULL) {
-   printline(item-data, '-');
+   printline(item-data, '-', NULL);
free_item(item);
}
 }
Index: util.c
===
RCS file: /home/tedu/cvs/src/usr.bin/grep/util.c,v
retrieving revision 1.39
diff -u -r1.39 util.c
--- util.c  2 Jul 2010 22:18:03 -   1.39
+++ util.c  20 Jun 2011 19:34:30 -
@@ -48,9 +48,9 @@
 
 static int linesqueued;
 static int procline(str_t *l, int);
-static int grep_search(fastgrep_t *, unsigned char *, size_t, regmatch_t 
*pmatch);
+static int grep_search(fastgrep_t *, char *, size_t, regmatch_t *pmatch);
 #ifndef SMALL
-static int grep_cmp(const unsigned char *, const unsigned char *, size_t);
+static int grep_cmp(const char *, const char *, size_t);
 static voidgrep_revstr(unsigned char *, int);
 #endif
 
@@ -169,19 +169,25 @@
 {
regmatch_t  pmatch;
int c, i, r;
+   int offset;
 
+   c = 0;
+   i = 0;
if (matchall) {
-   c = !vflag;
goto print;
}
 
-   for (c = i = 0; i  patterns; i++) {
+   for (i = 0; i  patterns; i++) {

Re: fix a few uvm includes

2011-06-20 Thread Ted Unangst
On Mon, Jun 20, 2011 at 3:43 PM, Miod Vallat m...@online.fr wrote:
 uvm_extern.h is the header people should be consuming.  change a few uvm.h
 to uvm_extern.h.

 This is not what, say, kern_fork.c does. If you include uvm.h, you
 don't need any other uvm_whatever.h, and definitely not
 uvm/uvm_extern.h.

kern_fork.c was relying on vnode.h to get uvm.h, so it's added.  I was
undecided on whether to include both or not, I think there's already
several examples of that in the tree.  I went with both as a hint that
uvm.h was intentional, but can easily remove the uvm_extern.h
includes.

 also, simplify and move the bufcache adjustment code from sysctl to the
 vfs_bio.c where it fits nicer.

 Separate diff please.

OK, this happened because it's another file that needed dma_constraint.



raidframe bzero casts

2011-06-20 Thread Ted Unangst
yeah, i know.  no need to cast to char *.  also, no need to cast void 
return of bzero to void.

Index: rf_alloclist.c
===
RCS file: /home/tedu/cvs/src/sys/dev/raidframe/rf_alloclist.c,v
retrieving revision 1.4
diff -u -r1.4 rf_alloclist.c
--- rf_alloclist.c  16 Dec 2002 07:01:03 -  1.4
+++ rf_alloclist.c  20 Jun 2011 22:17:04 -
@@ -185,6 +185,6 @@
if (p == NULL) {
return (NULL);
}
-   bzero((char *) p, sizeof(RF_AllocListElem_t));
+   bzero(p, sizeof(RF_AllocListElem_t));
return (p);
 }
Index: rf_cvscan.c
===
RCS file: /home/tedu/cvs/src/sys/dev/raidframe/rf_cvscan.c,v
retrieving revision 1.5
diff -u -r1.5 rf_cvscan.c
--- rf_cvscan.c 16 Dec 2002 07:01:03 -  1.5
+++ rf_cvscan.c 20 Jun 2011 22:17:10 -
@@ -352,7 +352,7 @@
 
RF_MallocAndAdd(hdr, sizeof(RF_CvscanHeader_t), (RF_CvscanHeader_t *),
clList);
-   bzero((char *) hdr, sizeof(RF_CvscanHeader_t));
+   bzero(hdr, sizeof(RF_CvscanHeader_t));
hdr-range_for_avg = RF_MAX(range, 1);
hdr-change_penalty = RF_MAX(penalty, 0);
hdr-direction = rf_cvscan_RIGHT;
Index: rf_dagutils.c
===
RCS file: /home/tedu/cvs/src/sys/dev/raidframe/rf_dagutils.c,v
retrieving revision 1.4
diff -u -r1.4 rf_dagutils.c
--- rf_dagutils.c   16 Dec 2002 07:01:03 -  1.4
+++ rf_dagutils.c   20 Jun 2011 22:17:20 -
@@ -246,7 +246,7 @@
 
RF_FREELIST_GET(rf_dagh_freelist, dh, next, (RF_DagHeader_t *));
if (dh) {
-   bzero((char *) dh, sizeof(RF_DagHeader_t));
+   bzero(dh, sizeof(RF_DagHeader_t));
}
return (dh);
 }
Index: rf_driver.c
===
RCS file: /home/tedu/cvs/src/sys/dev/raidframe/rf_driver.c,v
retrieving revision 1.12
diff -u -r1.12 rf_driver.c
--- rf_driver.c 26 Jun 2008 05:42:17 -  1.12
+++ rf_driver.c 20 Jun 2011 22:17:25 -
@@ -636,7 +636,7 @@
desc-state = 0;
 
desc-status = 0;
-   bzero((char *) desc-tracerec, sizeof(RF_AccTraceEntry_t));
+   bzero(desc-tracerec, sizeof(RF_AccTraceEntry_t));
desc-callbackFunc = (void (*) (RF_CBParam_t)) cbF; /* XXX */
desc-callbackArg = cbA;
desc-next = NULL;
Index: rf_evenodd.c
===
RCS file: /home/tedu/cvs/src/sys/dev/raidframe/rf_evenodd.c,v
retrieving revision 1.5
diff -u -r1.5 rf_evenodd.c
--- rf_evenodd.c16 Dec 2002 07:01:03 -  1.5
+++ rf_evenodd.c20 Jun 2011 22:17:44 -
@@ -529,7 +529,7 @@
asmap-qInfo;
 
/* Fire off the DAG. */
-   bzero((char *) tracerec, sizeof(tracerec));
+   bzero(tracerec, sizeof(tracerec));
rd_dag_h-tracerec = tracerec;
 
if (rf_verifyParityDebug) {
@@ -601,7 +601,7 @@
wrBlock-succedents[0]-params[2].v = psID;
wrBlock-succedents[0]-params[3].v =
RF_CREATE_PARAM3(RF_IO_NORMAL_PRIORITY, 0, 0, which_ru);
-   bzero((char *) tracerec, sizeof(tracerec));
+   bzero(tracerec, sizeof(tracerec));
wr_dag_h-tracerec = tracerec;
if (rf_verifyParityDebug) {
printf(Parity verify write dag:\n);
@@ -633,7 +633,7 @@
wrBlock-succedents[0]-params[2].v = psID;
wrBlock-succedents[0]-params[3].v =
RF_CREATE_PARAM3(RF_IO_NORMAL_PRIORITY, 0, 0, which_ru);
-   bzero((char *) tracerec, sizeof(tracerec));
+   bzero(tracerec, sizeof(tracerec));
wr_dag_h-tracerec = tracerec;
if (rf_verifyParityDebug) {
printf(Dag of write new second redundant information
Index: rf_evenodd_dagfuncs.c
===
RCS file: /home/tedu/cvs/src/sys/dev/raidframe/rf_evenodd_dagfuncs.c,v
retrieving revision 1.7
diff -u -r1.7 rf_evenodd_dagfuncs.c
--- rf_evenodd_dagfuncs.c   16 Dec 2002 07:01:04 -  1.7
+++ rf_evenodd_dagfuncs.c   20 Jun 2011 22:18:11 -
@@ -454,7 +454,7 @@
RF_AccTraceEntry_t *tracerec = node-dagHdr-tracerec;
RF_Etimer_t timer;
 
-   bzero((char *) node-results[0], rf_RaidAddressToByte(raidPtr, 
failedPDA-numSector));
+   bzero(node-results[0], rf_RaidAddressToByte(raidPtr, 
failedPDA-numSector));
if (node-dagHdr-status == rf_enable) {
RF_ETIMER_START(timer);
for (i = 0; i  node-numParams - 2; i += 2)
@@ -538,8 +538,8 @@
 #endif
RF_ASSERT(*((long *) dest[0]) == 0);
RF_ASSERT(*((long *) dest[1]) == 0);
-   bzero((char *) P, bytesPerEU);
-   bzero((char *) temp, bytesPerEU);
+   bzero(P, 

dev/ic bzero casts

2011-06-20 Thread Ted Unangst
there's no need to cast to char *.

Index: dc.c
===
RCS file: /home/tedu/cvs/src/sys/dev/ic/dc.c,v
retrieving revision 1.122
diff -u -r1.122 dc.c
--- dc.c5 Mar 2011 13:39:26 -   1.122
+++ dc.c20 Jun 2011 23:22:22 -
@@ -749,7 +749,7 @@
struct dc_mii_frame frame;
int i, phy_reg;
 
-   bzero((char *)frame, sizeof(frame));
+   bzero(frame, sizeof(frame));
 
if (DC_IS_ADMTEK(sc)  phy != DC_ADMTEK_PHYADDR)
return;
@@ -903,7 +903,7 @@
sc-dc_cdata.dc_tx_cnt++;
sframe = sc-dc_ldata-dc_tx_list[i];
sp = sc-dc_ldata-dc_sbuf[0];
-   bzero((char *)sp, DC_SFRAME_LEN);
+   bzero(sp, DC_SFRAME_LEN);
 
sframe-dc_data = htole32(sc-sc_listmap-dm_segs[0].ds_addr +
offsetof(struct dc_list_data, dc_sbuf));
@@ -1126,7 +1126,7 @@
sc-dc_cdata.dc_tx_cnt++;
sframe = sc-dc_ldata-dc_tx_list[i];
sp = sc-dc_ldata-dc_sbuf[0];
-   bzero((char *)sp, DC_SFRAME_LEN);
+   bzero(sp, DC_SFRAME_LEN);
 
sframe-dc_data = htole32(sc-sc_listmap-dm_segs[0].ds_addr +
offsetof(struct dc_list_data, dc_sbuf));
@@ -1934,7 +1934,7 @@
 * 82c169 chips.
 */
if (sc-dc_flags  DC_PNIC_RX_BUG_WAR)
-   bzero((char *)mtod(m_new, char *), m_new-m_len);
+   bzero(mtod(m_new, char *), m_new-m_len);
 
bus_dmamap_sync(sc-sc_dmat, sc-dc_cdata.dc_rx_chain[i].sd_map, 0,
sc-dc_cdata.dc_rx_chain[i].sd_map-dm_mapsize,
@@ -3112,7 +3112,7 @@
sc-dc_cdata.dc_rx_chain[i].sd_mbuf = NULL;
}
}
-   bzero((char *)sc-dc_ldata-dc_rx_list,
+   bzero(sc-dc_ldata-dc_rx_list,
sizeof(sc-dc_ldata-dc_rx_list));
 
/*
@@ -3136,7 +3136,7 @@
sc-dc_cdata.dc_tx_chain[i].sd_mbuf = NULL;
}
}
-   bzero((char *)sc-dc_ldata-dc_tx_list,
+   bzero(sc-dc_ldata-dc_tx_list,
sizeof(sc-dc_ldata-dc_tx_list));
 
bus_dmamap_sync(sc-sc_dmat, sc-sc_listmap,
Index: if_wi.c
===
RCS file: /home/tedu/cvs/src/sys/dev/ic/if_wi.c,v
retrieving revision 1.149
diff -u -r1.149 if_wi.c
--- if_wi.c 30 Aug 2010 20:42:27 -  1.149
+++ if_wi.c 20 Jun 2011 23:25:38 -
@@ -226,7 +226,7 @@
printf(: unable to read station address\n);
return (error);
}
-   bcopy((char *)mac.wi_mac_addr, (char *)ic-ic_myaddr,
+   bcopy(mac.wi_mac_addr, ic-ic_myaddr,
IEEE80211_ADDR_LEN);
 
wi_get_id(sc);
@@ -332,7 +332,7 @@
sc-wi_flags |= WI_FLAGS_HAS_WEP;
timeout_set(sc-sc_timo, funcs-f_inquire, sc);
 
-   bzero((char *)sc-wi_stats, sizeof(sc-wi_stats));
+   bzero(sc-wi_stats, sizeof(sc-wi_stats));
 
/* Find supported rates. */
rates.wi_type = WI_RID_DATA_RATES;
@@ -730,12 +730,12 @@
m-m_pkthdr.len = m-m_len =
letoh16(rx_frame.wi_dat_len) + WI_SNAPHDR_LEN;
 
-   bcopy((char *)rx_frame.wi_dst_addr,
-   (char *)eh-ether_dhost, ETHER_ADDR_LEN);
-   bcopy((char *)rx_frame.wi_src_addr,
-   (char *)eh-ether_shost, ETHER_ADDR_LEN);
-   bcopy((char *)rx_frame.wi_type,
-   (char *)eh-ether_type, ETHER_TYPE_LEN);
+   bcopy(rx_frame.wi_dst_addr,
+   eh-ether_dhost, ETHER_ADDR_LEN);
+   bcopy(rx_frame.wi_src_addr,
+   eh-ether_shost, ETHER_ADDR_LEN);
+   bcopy(rx_frame.wi_type,
+   eh-ether_type, ETHER_TYPE_LEN);
 
if (wi_read_data(sc, id, WI_802_11_OFFSET,
mtod(m, caddr_t) + sizeof(struct ether_header),
@@ -1402,7 +1402,7 @@
 
ifp = sc-sc_ic.ic_if;
 
-   bzero((char *)mcast, sizeof(mcast));
+   bzero(mcast, sizeof(mcast));
 
mcast.wi_type = WI_RID_MCAST_LIST;
mcast.wi_len = ((ETHER_ADDR_LEN / 2) * 16) + 1;
@@ -1416,7 +1416,7 @@
ETHER_FIRST_MULTI(step, sc-sc_ic.ic_ac, enm);
while (enm != NULL) {
if (i = 16) {
-   bzero((char *)mcast, sizeof(mcast));
+   bzero(mcast, sizeof(mcast));
break;
}
 
@@ -1424,7 +1424,7 @@
ifp-if_flags |= IFF_ALLMULTI;
goto allmulti;
}
-   bcopy(enm-enm_addrlo, (char *)mcast.wi_mcast[i],
+   bcopy(enm-enm_addrlo, mcast.wi_mcast[i],
ETHER_ADDR_LEN);
i++;
ETHER_NEXT_MULTI(step, enm);
@@ -1446,9 +1446,9 @@
 
switch(wreq-wi_type) {

4096 byte sector devices (a.k.a. disks 3TB)

2011-06-20 Thread Kenneth R Westerback
I committed a fix to fdisk(8) today to un-break the -i and -e options
on 4096-byte devices. To make a long story short, it had been working
accidentally until I committed a 4.9 change to fdisk(8) to make
it pay attention to the errors returned from MBR_read().

However this has raised once more concerns about what is going to
happen when 4096-byte sector devices become common, then the norm,
and then the smallest disks available.

There has been a lot of work done in the last few years to de-couple
the internal kernel view of a disk (a series of 512 byte blocks)
and the 'real world' view of potentially different sector size
devices. With seemless translation being done behind the scenes.

However, as today has shown, there may well be further unreconstructed
code making invalid assumptions or currently silently working
accidentally and waiting for the day when it can blow up your
machine.

So if you have such a device (disks 3TB are your best bet) I would
be very interested in hearing how hard you have to work to break
something. Of course the clever can also create vnd's with such
large sectors but actual hardware is more convincing.

Various filesystems (supported ones only please!), utilities such as
fdisk, disklabel, newfs, fsck, dump, restore, etc. Anything which
may do any serious disk i/o or is suspected of attempting raw, low
level i/o.

 Ken



Re: 4096 byte sector devices (a.k.a. disks 3TB)

2011-06-20 Thread Marco Peereboom
On Mon, Jun 20, 2011 at 08:30:40PM -0400, Kenneth R Westerback wrote:
 I committed a fix to fdisk(8) today to un-break the -i and -e options
 on 4096-byte devices. To make a long story short, it had been working
 accidentally until I committed a 4.9 change to fdisk(8) to make
 it pay attention to the errors returned from MBR_read().
 
 However this has raised once more concerns about what is going to
 happen when 4096-byte sector devices become common, then the norm,
 and then the smallest disks available.
 
 There has been a lot of work done in the last few years to de-couple
 the internal kernel view of a disk (a series of 512 byte blocks)
 and the 'real world' view of potentially different sector size
 devices. With seemless translation being done behind the scenes.
 
 However, as today has shown, there may well be further unreconstructed
 code making invalid assumptions or currently silently working
 accidentally and waiting for the day when it can blow up your
 machine.
 
 So if you have such a device (disks 3TB are your best bet) I would
 be very interested in hearing how hard you have to work to break
 something. Of course the clever can also create vnd's with such
 large sectors but actual hardware is more convincing.
 
 Various filesystems (supported ones only please!), utilities such as
 fdisk, disklabel, newfs, fsck, dump, restore, etc. Anything which
 may do any serious disk i/o or is suspected of attempting raw, low
 level i/o.

It just occurred to me that softraid crypto would benefit quite a bit
from 4096 byte sectors.  And... we can use softraid to force 4096 byte
sectors pretty trivially so it can be used a test harness as well in
lieu of 3096 byte sector disks.

 
  Ken



Re: softraid crypto: preallocate crypops and dma buffers.

2011-06-20 Thread Marco Peereboom
I am liking this diff quite a bit but it needs more testers.  So if you
are using softraid crypto please try this diff.

On Fri, Jun 17, 2011 at 07:53:05PM +0100, Owain Ainsworth wrote:
 So here's the problem: ENOMEM on io in a hba driver is bad juju.
 
 In more detail: 
 
 When preparing for each io softraid crypto does a
 sr_crypto_getcryptop(). This operation does a few things:
 
 - allocate a uio and iovec from a pool.
 - if this is a read then allocate a dma buffer with dma_alloc (up to
MAXPHYS, i.e. 64k)
 - allocate a cryptop to be used with the crypto(9) framework.
 - initialise the above for use in the io.
 
 So if you are getting very low on memory, one of these operations
 (probably the dma alloc) will fail. when this happens softraid returns
 XS_DRIVER_STUFFUP to scsi land. This returns an EIO back to callers.
 
 Now it is fairly common to use softdep in these situations, synchronous
 filesystems are slw. softdep has certain assumptions about how
 things will work. if a queued dependancy fails that invalidates these
 assumptions. softraid panics in this case. I used to hit this repeatedly
 (several times a day) before I bought more memory.
 
 in general, most disk controllers prealloc everything they need (that
 isn't passed down to them) so that this won't be a problem.
 
 This diff does the same for softraid crypto. It'll eat just over 1meg of
 kva, but it is hardly the only driver to need to do that.
 
 The only slightly scary thing here is the cryptodesc list manipulations
 (the comments explain why they are necesary).
 
 I'm typing from a machine that runs this. todd@ is also testing it and
 marco kindly did some horrible io torture on a machine running this too
 and it runs quite nicely.
 
 A side benefit is that due to missing out allocations in every disk io
 this is actually slightly faster in io too.
 
 More testing would be appreciated. Cheers,
 
 -0-
 
 diff --git dev/softraid_crypto.c dev/softraid_crypto.c
 index 3259121..a60824e 100644
 --- dev/softraid_crypto.c
 +++ dev/softraid_crypto.c
 @@ -56,9 +56,26 @@
  #include dev/softraidvar.h
  #include dev/rndvar.h
  
 -struct cryptop   *sr_crypto_getcryptop(struct sr_workunit *, int);
 +/*
 + * the per-io data that we need to preallocate. We can't afford to allow io
 + * to start failing when memory pressure kicks in.
 + * We can store this in the WU because we assert that only one
 + * ccb per WU will ever be active.
 + */
 +struct sr_crypto_wu {
 + TAILQ_ENTRY(sr_crypto_wu)cr_link;
 + struct uio   cr_uio;
 + struct iovec cr_iov;
 + struct cryptop  *cr_crp;
 + struct cryptodesc   *cr_descs;
 + struct sr_workunit  *cr_wu;
 + void*cr_dmabuf;
 +};
 +
 +
 +struct sr_crypto_wu *sr_crypto_wu_get(struct sr_workunit *, int);
 +void sr_crypto_wu_put(struct sr_crypto_wu *);
  int  sr_crypto_create_keys(struct sr_discipline *);
 -void *sr_crypto_putcryptop(struct cryptop *);
  int  sr_crypto_get_kdf(struct bioc_createraid *,
   struct sr_discipline *);
  int  sr_crypto_decrypt(u_char *, u_char *, u_char *, size_t, int);
 @@ -78,7 +95,7 @@ int sr_crypto_meta_opt_load(struct sr_discipline *,
   struct sr_meta_opt *);
  int  sr_crypto_write(struct cryptop *);
  int  sr_crypto_rw(struct sr_workunit *);
 -int  sr_crypto_rw2(struct sr_workunit *, struct cryptop *);
 +int  sr_crypto_rw2(struct sr_workunit *, struct sr_crypto_wu *);
  void sr_crypto_intr(struct buf *);
  int  sr_crypto_read(struct cryptop *);
  void sr_crypto_finish_io(struct sr_workunit *);
 @@ -230,40 +247,35 @@ done:
   return (rv);
  }
  
 -struct cryptop *
 -sr_crypto_getcryptop(struct sr_workunit *wu, int encrypt)
 +
 +struct sr_crypto_wu *
 +sr_crypto_wu_get(struct sr_workunit *wu, int encrypt)
  {
   struct scsi_xfer*xs = wu-swu_xs;
   struct sr_discipline*sd = wu-swu_dis;
 - struct cryptop  *crp = NULL;
 + struct sr_crypto_wu *crwu;
   struct cryptodesc   *crd;
 - struct uio  *uio = NULL;
 - int flags, i, n, s;
 + int flags, i, n;
   daddr64_t   blk = 0;
   u_int   keyndx;
  
 - DNPRINTF(SR_D_DIS, %s: sr_crypto_getcryptop wu: %p encrypt: %d\n,
 + DNPRINTF(SR_D_DIS, %s: sr_crypto_wu_get wu: %p encrypt: %d\n,
   DEVNAME(sd-sd_sc), wu, encrypt);
  
 - s = splbio();
 - uio = pool_get(sd-mds.mdd_crypto.sr_uiopl, PR_ZERO | PR_NOWAIT);
 - if (uio == NULL)
 - goto poolunwind;
 - uio-uio_iov = pool_get(sd-mds.mdd_crypto.sr_iovpl,
 - PR_ZERO | PR_NOWAIT);
 - if (uio-uio_iov == NULL)
 - goto poolunwind;
 - splx(s);
 + mtx_enter(sd-mds.mdd_crypto.scr_mutex);
 + if ((crwu = 

Re: softraid crypto: preallocate crypops and dma buffers.

2011-06-20 Thread roberth
On Mon, 20 Jun 2011 20:12:28 -0500
Marco Peereboom sl...@peereboom.us wrote:

 I am liking this diff quite a bit but it needs more testers.  So if
 you are using softraid crypto please try this diff.

Still working for me.



Re: softraid crypto: preallocate crypops and dma buffers.

2011-06-20 Thread Todd T. Fries
Penned by roberth on 20110620 21:05.14, we have:
| On Mon, 20 Jun 2011 20:12:28 -0500
| Marco Peereboom sl...@peereboom.us wrote:
| 
|  I am liking this diff quite a bit but it needs more testers.  So if
|  you are using softraid crypto please try this diff.
| 
| Still working for me.

And me.

Volume  Status   Size Device  
softraid0 0 Online  262939136 sd0 RAID1
  0 Online  262939136 0:0.0   noencl wd0a
  1 Online  262939136 0:1.0   noencl wd1a
softraid0 1 Online99755925504 sd1 CRYPTO
  0 Online99755925504 1:0.0   noencl wd1d
softraid0 2 Online 9228489728 sd2 CRYPTO
  0 Online 9228489728 2:0.0   noencl wd0d

-- 
Todd Fries .. t...@fries.net

 _
| \  1.636.410.0632 (voice)
| Free Daemon Consulting, LLC \  1.405.227.9094 (voice)
| http://FreeDaemonConsulting.com \  1.866.792.3418 (FAX)
| 2525 NW Expy #525, Oklahoma City, OK 73112  \  sip:freedae...@ekiga.net
| ..in support of free software solutions.  \  sip:4052279...@ekiga.net
 \\
 
  37E7 D3EB 74D0 8D66 A68D  B866 0326 204E 3F42 004A
http://todd.fries.net/pgp.txt