kernel-ark/include/linux
Jakub Jelinek 4732efbeb9 [PATCH] FUTEX_WAKE_OP: pthread_cond_signal() speedup
ATM pthread_cond_signal is unnecessarily slow, because it wakes one waiter
(which at least on UP usually means an immediate context switch to one of
the waiter threads).  This waiter wakes up and after a few instructions it
attempts to acquire the cv internal lock, but that lock is still held by
the thread calling pthread_cond_signal.  So it goes to sleep and eventually
the signalling thread is scheduled in, unlocks the internal lock and wakes
the waiter again.

Now, before 2003-09-21 NPTL was using FUTEX_REQUEUE in pthread_cond_signal
to avoid this performance issue, but it was removed when locks were
redesigned to the 3 state scheme (unlocked, locked uncontended, locked
contended).

Following scenario shows why simply using FUTEX_REQUEUE in
pthread_cond_signal together with using lll_mutex_unlock_force in place of
lll_mutex_unlock is not enough and probably why it has been disabled at
that time:

The number is value in cv->__data.__lock.
        thr1            thr2            thr3
0       pthread_cond_wait
1       lll_mutex_lock (cv->__data.__lock)
0       lll_mutex_unlock (cv->__data.__lock)
0       lll_futex_wait (&cv->__data.__futex, futexval)
0                       pthread_cond_signal
1                       lll_mutex_lock (cv->__data.__lock)
1                                       pthread_cond_signal
2                                       lll_mutex_lock (cv->__data.__lock)
2                                         lll_futex_wait (&cv->__data.__lock, 2)
2                       lll_futex_requeue (&cv->__data.__futex, 0, 1, &cv->__data.__lock)
                          # FUTEX_REQUEUE, not FUTEX_CMP_REQUEUE
2                       lll_mutex_unlock_force (cv->__data.__lock)
0                         cv->__data.__lock = 0
0                         lll_futex_wake (&cv->__data.__lock, 1)
1       lll_mutex_lock (cv->__data.__lock)
0       lll_mutex_unlock (cv->__data.__lock)
          # Here, lll_mutex_unlock doesn't know there are threads waiting
          # on the internal cv's lock

Now, I believe it is possible to use FUTEX_REQUEUE in pthread_cond_signal,
but it will cost us not one, but 2 extra syscalls and, what's worse, one of
these extra syscalls will be done for every single waiting loop in
pthread_cond_*wait.

We would need to use lll_mutex_unlock_force in pthread_cond_signal after
requeue and lll_mutex_cond_lock in pthread_cond_*wait after lll_futex_wait.

Another alternative is to do the unlocking pthread_cond_signal needs to do
(the lock can't be unlocked before lll_futex_wake, as that is racy) in the
kernel.

I have implemented both variants, futex-requeue-glibc.patch is the first
one and futex-wake_op{,-glibc}.patch is the unlocking inside of the kernel.
 The kernel interface allows userland to specify how exactly an unlocking
operation should look like (some atomic arithmetic operation with optional
constant argument and comparison of the previous futex value with another
constant).

It has been implemented just for ppc*, x86_64 and i?86, for other
architectures I'm including just a stub header which can be used as a
starting point by maintainers to write support for their arches and ATM
will just return -ENOSYS for FUTEX_WAKE_OP.  The requeue patch has been
(lightly) tested just on x86_64, the wake_op patch on ppc64 kernel running
32-bit and 64-bit NPTL and x86_64 kernel running 32-bit and 64-bit NPTL.

With the following benchmark on UP x86-64 I get:

for i in nptl-orig nptl-requeue nptl-wake_op; do echo time elf/ld.so --library-path .:$i /tmp/bench; \
for j in 1 2; do echo ( time elf/ld.so --library-path .:$i /tmp/bench ) 2>&1; done; done
time elf/ld.so --library-path .:nptl-orig /tmp/bench
real 0m0.655s user 0m0.253s sys 0m0.403s
real 0m0.657s user 0m0.269s sys 0m0.388s
time elf/ld.so --library-path .:nptl-requeue /tmp/bench
real 0m0.496s user 0m0.225s sys 0m0.271s
real 0m0.531s user 0m0.242s sys 0m0.288s
time elf/ld.so --library-path .:nptl-wake_op /tmp/bench
real 0m0.380s user 0m0.176s sys 0m0.204s
real 0m0.382s user 0m0.175s sys 0m0.207s

The benchmark is at:
http://sourceware.org/ml/libc-alpha/2005-03/txt00001.txt
Older futex-requeue-glibc.patch version is at:
http://sourceware.org/ml/libc-alpha/2005-03/txt00002.txt
Older futex-wake_op-glibc.patch version is at:
http://sourceware.org/ml/libc-alpha/2005-03/txt00003.txt
Will post a new version (just x86-64 fixes so that the patch
applies against pthread_cond_signal.S) to libc-hacker ml soon.

Attached is the kernel FUTEX_WAKE_OP patch as well as a simple-minded
testcase that will not test the atomicity of the operation, but at least
check if the threads that should have been woken up are woken up and
whether the arithmetic operation in the kernel gave the expected results.

Acked-by: Ingo Molnar <mingo@redhat.com>
Cc: Ulrich Drepper <drepper@redhat.com>
Cc: Jamie Lokier <jamie@shareable.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-09-07 16:57:17 -07:00
..
byteorder
dvb
hdlc
isdn
lockd
mmc [MMC] ios for mmc chip select 2005-09-03 16:45:02 +01:00
mtd
netfilter [NETLINK]: Convert netlink users to use group numbers instead of bitmasks 2005-08-29 16:00:54 -07:00
netfilter_arp
netfilter_bridge
netfilter_ipv4 [NETFILTER]: Add new iptables TTL target 2005-08-29 16:13:22 -07:00
netfilter_ipv6 [NETFILTER6]: Add new ip6tables HOPLIMIT target 2005-08-29 16:13:29 -07:00
nfsd
raid
sunrpc [PATCH] NFS: Ensure ACL xdr code doesn't overflow. 2005-08-16 08:52:11 -07:00
tc_act
tc_ematch
8250_pci.h
a.out.h
ac97_codec.h
acct.h
acpi.h
adb.h
adfs_fs_i.h
adfs_fs_sb.h
adfs_fs.h
affs_fs.h
affs_hardblocks.h
agp_backend.h
agpgart.h
aio_abi.h
aio.h
amifd.h
amifdreg.h
amigaffs.h
apm_bios.h
arcdevice.h
arcfb.h
ata.h Merge /spare/repo/linux-2.6/ 2005-08-29 15:59:42 -04:00
atalk.h
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_suni.h
atm_tcp.h
atm_zatm.h
atm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmioc.h
atmlec.h
atmmpc.h
atmppp.h
atmsap.h
atmsvc.h
attribute_container.h
audit.h
auto_fs4.h
auto_fs.h
awe_voice.h
ax25.h
b1lli.h
b1pcmcia.h
backing-dev.h
backlight.h
baycom.h
bcd.h
bfs_fs.h
binfmts.h
bio.h
bitmap.h
bitops.h
blkdev.h
blkpg.h
blockgroup_lock.h
bootmem.h
bpqether.h
buffer_head.h
cache.h
capability.h [PATCH] VM: add capabilites check to set_zone_reclaim 2005-09-05 00:05:44 -07:00
capi.h
cciss_ioctl.h
cd1400.h
cdev.h
cdk.h
cdrom.h
chio.h
circ_buf.h
cobalt-nvram.h
coda_cache.h
coda_fs_i.h
coda_linux.h
coda_proc.h
coda_psdev.h
coda.h
coff.h
com20020.h
compat_ioctl.h
compat.h
compiler-gcc2.h
compiler-gcc3.h
compiler-gcc4.h
compiler-gcc.h
compiler-intel.h
compiler.h
completion.h
comstats.h
concap.h
config.h
console_struct.h
console.h
consolemap.h
cpu.h [PATCH] remove driverfs references from include/linux/cpu.h and net/sunrpc/rpc_pipe.c 2005-09-02 00:57:31 -07:00
cpufreq.h
cpumask.h
cpuset.h
cramfs_fs_sb.h
cramfs_fs.h
crash_dump.h
crc32.h
crc32c.h
crc-ccitt.h
crypto.h [CRYPTO]: Added CRYPTO_TFM_REQ_MAY_SLEEP flag 2005-09-01 17:43:05 -07:00
cryptohash.h
ctype.h
cuda.h
cyclades.h
cyclomx.h
cycx_cfm.h
cycx_drv.h
cycx_x25.h
dcache.h
dccp.h [DCCP]: Introduce DCCP_SOCKOPT_PACKET_SIZE 2005-08-29 16:13:37 -07:00
dcookies.h
debugfs.h
delay.h
devfs_fs_kernel.h
devfs_fs.h
device-mapper.h
device.h
devpts_fs.h
dio.h
dirent.h
divert.h
dm9000.h
dm-ioctl.h
dma-mapping.h
dmapool.h
dmi.h
dn.h
dnotify.h
dqblk_v1.h
dqblk_v2.h
dqblk_xfs.h
ds1286.h
dtlk.h
edd.h
eeprom.h
efi.h [PATCH] x86: fix EFI memory map parsing 2005-09-05 00:06:09 -07:00
efs_dir.h
efs_fs_i.h
efs_fs_sb.h
efs_fs.h
efs_vh.h
eisa.h
elevator.h
elf-fdpic.h
elf.h
elfcore.h
err.h
errno.h
errqueue.h
etherdevice.h
ethtool.h [NET]: Add support for getting the permanent hardware address. 2005-08-29 16:02:44 -07:00
eventpoll.h
ext2_fs_sb.h
ext2_fs.h
ext3_fs_i.h
ext3_fs_sb.h
ext3_fs.h
ext3_jbd.h
fadvise.h
fb.h
fcdevice.h
fcntl.h
fd1772.h
fd.h
fddidevice.h
fdreg.h
file.h
filter.h
firmware.h
flat.h
font.h
fs_struct.h
fs.h Fix nasty ncpfs symlink handling bug. 2005-08-19 18:02:56 -07:00
fsl_devices.h
fsnotify.h [PATCH] inotify: add MOVE_SELF event 2005-08-15 09:50:31 -07:00
ftape-header-segment.h
ftape-vendors.h
ftape.h
futex.h [PATCH] FUTEX_WAKE_OP: pthread_cond_signal() speedup 2005-09-07 16:57:17 -07:00
gameport.h
gen_stats.h
genalloc.h
generic_serial.h
genhd.h
gfp.h
hardirq.h
harrier_defs.h
hash.h
hayesesp.h
hdlc.h
hdlcdrv.h
hdpu_features.h
hdreg.h
hdsmart.h
hiddev.h
highmem.h
highuid.h
hippidevice.h [NET]: net/802: more endian annotations 2005-08-29 16:10:54 -07:00
hpet.h
hpfs_fs.h
hugetlb.h [PATCH] remove hugetlb_clean_stale_pgtable() and fix huge_pte_alloc() 2005-09-05 00:05:46 -07:00
hwmon-sysfs.h [PATCH] I2C: W83792D driver 1/3 2005-09-05 09:14:13 -07:00
hwmon-vid.h [PATCH] hwmon: hwmon vs i2c, second round (10/11) 2005-09-05 09:14:23 -07:00
hwmon.h [PATCH] hwmon: move SENSORS_LIMIT to hwmon.h 2005-09-05 09:14:17 -07:00
hysdn_if.h
i2c-algo-bit.h
i2c-algo-ite.h
i2c-algo-pca.h
i2c-algo-pcf.h
i2c-algo-sgi.h
i2c-algo-sibyte.h
i2c-dev.h
i2c-id.h [PATCH] I2C: Kill i2c_algorithm.id (7/7) 2005-09-05 09:14:33 -07:00
i2c-isa.h [PATCH] I2C: Kill i2c_algorithm.id (5/7) 2005-09-05 09:14:31 -07:00
i2c.h [PATCH] I2C: Drop the I2C_ACK_TEST ioctl 2005-09-05 09:26:56 -07:00
i2o-dev.h
i2o.h
i8k.h
ibmtr.h
icmp.h
icmpv6.h
ide.h
idr.h
if_arcnet.h
if_arp.h
if_bonding.h
if_bridge.h
if_cablemodem.h
if_ec.h
if_eql.h
if_ether.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
if_fc.h [NET]: net/802: more endian annotations 2005-08-29 16:10:54 -07:00
if_fddi.h [NET]: net/802: more endian annotations 2005-08-29 16:10:54 -07:00
if_frad.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
if_hippi.h [NET]: net/802: more endian annotations 2005-08-29 16:10:54 -07:00
if_infiniband.h
if_ltalk.h
if_packet.h
if_plip.h
if_ppp.h
if_pppox.h
if_shaper.h
if_slip.h
if_strip.h
if_tr.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
if_tun.h [TUNTAP]: Allow setting the linktype of the tap device from userspace 2005-09-01 17:40:05 -07:00
if_tunnel.h
if_vlan.h [NET]: Kill skb->real_dev 2005-08-29 15:32:25 -07:00
if_wanpipe_common.h
if_wanpipe.h
if.h
igmp.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
in6.h
in_route.h
in.h [DCCP]: Initial implementation 2005-08-29 15:49:46 -07:00
inet_diag.h [INET_DIAG]: Rename tcp_diag.[ch] to inet_diag.[ch] 2005-08-29 15:57:48 -07:00
inet.h
inetdevice.h
init_task.h
init.h
initrd.h
inotify.h [PATCH] inotify: add MOVE_SELF event 2005-08-15 09:50:31 -07:00
input.h
interrupt.h
ioc4.h
ioctl32.h
ioctl.h
ioport.h
ioprio.h
ip6_tunnel.h
ip_mp_alg.h
ip.h [NET]: Introduce inet_connection_sock 2005-08-29 15:43:19 -07:00
ipc.h
ipmi_msgdefs.h
ipmi_smi.h
ipmi.h
ipsec.h
ipv6_route.h
ipv6.h [IPV6]: Generalise the tcp_v6_lookup routines 2005-08-29 15:57:24 -07:00
ipx.h
irda.h
irq_cpustat.h
irq.h [PATCH] x86/x86_64: deferred handling of writes to /proc/irqxx/smp_affinity 2005-09-07 16:57:15 -07:00
isapnp.h
isdn_divertif.h
isdn_ppp.h
isdn.h
isdnif.h
isicom.h
iso_fs.h
istallion.h
ite_gpio.h
ixjuser.h
jbd.h
jffs2_fs_i.h
jffs2_fs_sb.h
jffs2.h
jffs.h
jhash.h
jiffies.h
journal-head.h
joystick.h
kallsyms.h
kbd_diacr.h
kbd_kern.h
kd.h
kdev_t.h
kernel_stat.h
kernel.h
kernelcapi.h
kexec.h
key-ui.h
key.h
keyboard.h
keyctl.h
kfifo.h
klist.h [PATCH] klist: fix klist to have the same klist_add semantics as list_head 2005-09-05 16:03:13 -07:00
kmalloc_sizes.h
kmod.h
kobj_map.h
kobject_uevent.h
kobject.h
kprobes.h
kref.h
kthread.h
lapb.h
lcd.h
libata.h /spare/repo/libata-dev branch 'iomap-try3' 2005-09-05 05:20:33 -04:00
libps2.h
limits.h
linkage.h
linux_logo.h
list.h [LIST]: Add docbook header comments for hlist_add_{before,after}_rcu() 2005-08-29 16:11:00 -07:00
llc.h
loop.h
lp.h
major.h
matroxfb.h
mbcache.h
mc6821.h
mc146818rtc.h
mca-legacy.h
mca.h
mempolicy.h [PATCH] /proc/<pid>/numa_maps to show on which nodes pages reside 2005-09-05 00:05:43 -07:00
mempool.h
meye.h
mii.h
minix_fs.h
miscdevice.h
mm_inline.h
mm.h
mman.h
mmtimer.h
mmzone.h [PATCH] sparsemem extreme: hotplug preparation 2005-09-05 00:05:38 -07:00
mod_devicetable.h [PATCH] Make MODULE_DEVICE_TABLE work for vio devices 2005-08-30 13:31:56 +10:00
module.h
moduleloader.h
moduleparam.h
mount.h
mpage.h
mqueue.h
mroute.h
msdos_fs.h
msg.h
mtio.h
mv643xx.h [PATCH] ppc32: mv64x60 updates & enhancements 2005-09-05 00:06:00 -07:00
n_r3964.h
namei.h
namespace.h
nbd.h
ncp_fs_i.h
ncp_fs_sb.h
ncp_fs.h
ncp_mount.h
ncp_no.h
ncp.h
net.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
netdevice.h [NET]: Add support for getting the permanent hardware address. 2005-08-29 16:02:44 -07:00
netfilter_arp.h
netfilter_bridge.h
netfilter_decnet.h [NETLINK]: Convert netlink users to use group numbers instead of bitmasks 2005-08-29 16:00:54 -07:00
netfilter_ipv4.h [NETFILTER]: Rename skb_ip_make_writable() to skb_make_writable() 2005-08-29 15:34:40 -07:00
netfilter_ipv6.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
netfilter_logging.h
netfilter.h [NETFILTER]: Fix gcc-3.4.x warning about iplicit operator precedence 2005-08-29 15:57:14 -07:00
netlink.h [NETLINK]: Fix sparse warnings 2005-08-29 16:01:35 -07:00
netpoll.h [NETPOLL]: fix initialization/NAPI race 2005-08-11 19:27:43 -07:00
netrom.h
nfs2.h
nfs3.h
nfs4_acl.h
nfs4_mount.h
nfs4.h
nfs_fs_i.h
nfs_fs_sb.h
nfs_fs.h [PATCH] NFS: Introduce the use of inode->i_lock to protect fields in nfsi 2005-08-18 12:53:57 -07:00
nfs_idmap.h
nfs_mount.h
nfs_page.h
nfs_xdr.h
nfs.h
nfsacl.h
nfsd_idmap.h
nls.h
nmi.h
node.h
nodemask.h
notifier.h
nubus.h
numa.h
nvram.h
openprom_fs.h
oprofile.h
page-flags.h [PATCH] VM: add page_state info to per-node meminfo 2005-09-05 00:05:49 -07:00
pagemap.h
pagevec.h
param.h
parport_pc.h
parport.h
parser.h
patchkey.h
pci_ids.h [PATCH] MIPS Technologies PCI ID bits 2005-09-05 00:06:04 -07:00
pci-acpi.h
pci.h [PATCH] PCI: 6700/6702PXH quirk 2005-08-16 21:06:24 -07:00
pcieport_if.h
percpu_counter.h
percpu.h
personality.h
pfkeyv2.h
pg.h
phonedev.h
phy.h [PATCH] PHY Layer fixup 2005-08-28 20:28:25 -04:00
pid.h
pipe_fs_i.h
pkt_cls.h
pkt_sched.h
pktcdvd.h
platform.h
pm.h [PATCH] swsusp: switch pm_message_t to struct 2005-09-05 00:06:16 -07:00
pmu.h
pnp.h
pnpbios.h
poll.h
posix_acl_xattr.h
posix_acl.h
posix_types.h
posix-timers.h
ppdev.h
ppp_channel.h
ppp_defs.h
ppp-comp.h
prctl.h
preempt.h
prefetch.h
prio_tree.h
proc_fs.h
profile.h
ps2esdi.h
ptrace.h [PATCH] Uml support: add PTRACE_SYSEMU_SINGLESTEP option to i386 2005-09-05 00:06:20 -07:00
qic117.h
qnx4_fs.h
qnxtypes.h
quota.h
quotaio_v1.h
quotaio_v2.h
quotaops.h
radeonfb.h
radix-tree.h
ramfs.h
random.h [RANDOM]: Introduce secure_dccp_sequence_number 2005-08-29 15:49:40 -07:00
raw.h
rbtree.h
rcupdate.h
reboot_fixups.h
reboot.h
reiserfs_acl.h
reiserfs_fs_i.h
reiserfs_fs_sb.h
reiserfs_fs.h
reiserfs_xattr.h
resource.h
rmap.h
romfs_fs.h
root_dev.h
rose.h
route.h
rslib.h
rtc.h
rtnetlink.h [NETLINK]: Convert netlink users to use group numbers instead of bitmasks 2005-08-29 16:00:54 -07:00
rwsem-spinlock.h
rwsem.h
sc26198.h
scatterlist.h
scc.h
sched.h
sctp.h
scx200_gpio.h
scx200.h
sdla_asy.h
sdla_chdlc.h
sdla_fr.h
sdla_ppp.h
sdla_x25.h
sdla.h
sdladrv.h
sdlapci.h
sdlasfm.h
seccomp.h
securebits.h
security.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
selection.h
selinux_netlink.h [NETLINK]: Convert netlink users to use group numbers instead of bitmasks 2005-08-29 16:00:54 -07:00
sem.h
seq_file.h
seqlock.h
serial167.h
serial_8250.h [SERIAL] Move serial8250_*_port prototypes to linux/serial_8250.h 2005-09-01 15:56:26 +01:00
serial_core.h [ARM] 2866/1: add i.MX set_mctrl / get_mctrl functions 2005-08-31 21:48:47 +01:00
serial_reg.h
serial.h [ARM] 2866/1: add i.MX set_mctrl / get_mctrl functions 2005-08-31 21:48:47 +01:00
serialP.h
serio.h
shm.h
shmem_fs.h
signal.h
skbuff.h [NET]: Implement SKB fast cloning. 2005-08-29 16:01:54 -07:00
slab.h
smb_fs_i.h
smb_fs_sb.h
smb_fs.h
smb_mount.h
smb.h
smbno.h
smp_lock.h
smp.h
snmp.h
socket.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
sockios.h
som.h
sonet.h
sonypi.h
sort.h
sound.h [PATCH] Assign device pointer to OSS devices 2005-08-30 08:58:37 +02:00
soundcard.h
spinlock.h
stallion.h
stat.h
statfs.h
stddef.h
stop_machine.h
string.h
stringify.h
superhyway.h
suspend.h
swap.h [PATCH] swap: swap_lock replace list+device 2005-09-05 00:05:42 -07:00
swapops.h [PATCH] comment typo fix 2005-09-05 00:05:45 -07:00
synclink.h
sys.h
syscalls.h
sysctl.h
sysdev.h
sysfs.h
sysrq.h
sysv_fs.h
tcp.h [ICSK]: Move TCP congestion avoidance members to icsk 2005-08-29 15:56:18 -07:00
telephony.h
termios.h
textsearch_fsm.h
textsearch.h
thread_info.h
threads.h
ticable.h
time.h
timer.h
times.h
timex.h
tiocl.h
topology.h
toshiba.h
transport_class.h
trdevice.h
tty_driver.h
tty_flip.h
tty_ldisc.h
tty.h
types.h [NETFILTER]: introduce and use aligned_u64 data type 2005-08-29 15:57:59 -07:00
udf_fs_i.h
udf_fs_sb.h
udf_fs.h
udp.h
ufs_fs_i.h
ufs_fs_sb.h
ufs_fs.h
uinput.h
uio.h
ultrasound.h
umem.h
un.h
unistd.h
usb_cdc.h
usb_ch9.h
usb_gadget.h
usb_gadgetfs.h
usb_input.h
usb_isp116x.h
usb_otg.h
usb_sl811.h
usb.h
usbdevice_fs.h
user.h
utime.h
uts.h
utsname.h
vermagic.h
vfs.h
via.h
video_decoder.h
video_encoder.h
videodev2.h
videodev.h
videotext.h
vmalloc.h [PATCH] arm: allow for arch-specific IOREMAP_MAX_ORDER 2005-09-05 00:05:46 -07:00
vt_buffer.h
vt_kern.h
vt.h
wait.h
wanpipe.h
wanrouter.h
watchdog.h
wavefront.h
wireless.h
workqueue.h
writeback.h
x25.h
xattr.h
xfrm.h [NETLINK]: Convert netlink users to use group numbers instead of bitmasks 2005-08-29 16:00:54 -07:00
yam.h
zconf.h
zftape.h
zlib.h
zorro_ids.h
zorro.h
zutil.h