Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 4 Aug 2009 22:38:10 +0000 (15:38 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 4 Aug 2009 22:38:10 +0000 (15:38 -0700)
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: (23 commits)
  [SCSI] sd: Avoid sending extended inquiry to legacy devices
  [SCSI] libsas: fix wide port hotplug issues
  [SCSI] libfc: fix a circular locking warning during sending RRQ
  [SCSI] qla4xxx: Remove hiwat code so scsi eh does not get escalated when we can make progress
  [SCSI] qla4xxx: Fix srb lookup in qla4xxx_eh_device_reset
  [SCSI] qla4xxx: Fix Driver Fault Recovery Completion
  [SCSI] qla4xxx: add timeout handler
  [SCSI] qla4xxx: Correct Extended Sense Data Errors
  [SCSI] libiscsi: disable bh in and abort handler.
  [SCSI] zfcp: Fix tracing of request id for abort requests
  [SCSI] zfcp: Fix wka port processing
  [SCSI] zfcp: avoid double notify in lowmem scenario
  [SCSI] zfcp: Add port only once to FC transport class
  [SCSI] zfcp: Recover from stalled outbound queue
  [SCSI] zfcp: Fix erp escalation procedure
  [SCSI] zfcp: Fix logic for physical port close
  [SCSI] zfcp: Use -EIO for SBAL allocation failures
  [SCSI] zfcp: Use unchained mode for small ct and els requests
  [SCSI] zfcp: Use correct flags for zfcp_erp_notify
  [SCSI] zfcp: Return -ENOMEM for allocation failures in zfcp_fsf
  ...

747 files changed:
CREDITS
Documentation/RCU/rculist_nulls.txt
Documentation/connector/cn_test.c
Documentation/connector/ucon.c
Documentation/filesystems/sysfs.txt
Documentation/laptops/thinkpad-acpi.txt
Documentation/lguest/lguest.c
Documentation/networking/6pack.txt
Documentation/scheduler/sched-rt-group.txt
Documentation/sound/alsa/Procfile.txt
Documentation/sysrq.txt
Documentation/video4linux/CARDLIST.em28xx
Documentation/video4linux/gspca.txt
MAINTAINERS
Makefile
arch/alpha/include/asm/tlb.h
arch/arm/configs/u300_defconfig
arch/arm/include/asm/tlb.h
arch/arm/mach-at91/include/mach/at_hdmac.h [new file with mode: 0644]
arch/arm/mach-ep93xx/dma-m2p.c
arch/arm/mach-kirkwood/mpp.h
arch/arm/mach-mx3/Kconfig
arch/arm/mach-mx3/Makefile
arch/arm/mach-mx3/armadillo5x0.c
arch/arm/mach-mx3/devices.c
arch/arm/mach-mx3/pcm037.c
arch/arm/mach-mx3/pcm037.h [new file with mode: 0644]
arch/arm/mach-mx3/pcm037_eet.c [new file with mode: 0644]
arch/arm/mach-pxa/include/mach/mfp-pxa300.h
arch/arm/mach-pxa/pxa3xx.c
arch/arm/mach-realview/core.c
arch/arm/mach-u300/core.c
arch/arm/mach-versatile/core.c
arch/arm/plat-mxc/include/mach/iomux-mx3.h
arch/arm/plat-pxa/gpio.c
arch/avr32/include/asm/pgalloc.h
arch/blackfin/include/asm/context.S
arch/blackfin/include/asm/cpu.h
arch/blackfin/include/asm/hardirq.h
arch/blackfin/include/asm/processor.h
arch/blackfin/kernel/bfin_dma_5xx.c
arch/blackfin/kernel/bfin_gpio.c
arch/blackfin/kernel/cplb-nompu/cplbinit.c
arch/blackfin/kernel/process.c
arch/blackfin/kernel/setup.c
arch/blackfin/kernel/traps.c
arch/blackfin/lib/lshrdi3.c
arch/blackfin/mach-bf518/boards/ezbrd.c
arch/blackfin/mach-bf518/include/mach/anomaly.h
arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf527/boards/cm_bf527.c
arch/blackfin/mach-bf527/boards/ezbrd.c
arch/blackfin/mach-bf527/boards/ezkit.c
arch/blackfin/mach-bf527/include/mach/anomaly.h
arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf533/boards/stamp.c
arch/blackfin/mach-bf533/include/mach/anomaly.h
arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf537/boards/stamp.c
arch/blackfin/mach-bf537/include/mach/anomaly.h
arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf538/include/mach/anomaly.h
arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf548/boards/ezkit.c
arch/blackfin/mach-bf548/include/mach/anomaly.h
arch/blackfin/mach-bf561/include/mach/anomaly.h
arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf561/include/mach/mem_map.h
arch/blackfin/mach-common/entry.S
arch/blackfin/mach-common/smp.c
arch/cris/include/asm/pgalloc.h
arch/frv/include/asm/pgalloc.h
arch/frv/include/asm/pgtable.h
arch/ia64/include/asm/fpu.h
arch/ia64/include/asm/pgalloc.h
arch/ia64/include/asm/tlb.h
arch/ia64/include/asm/xen/hypervisor.h
arch/ia64/kernel/dma-mapping.c
arch/m32r/include/asm/pgalloc.h
arch/m68k/include/asm/motorola_pgalloc.h
arch/m68k/include/asm/sun3_pgalloc.h
arch/microblaze/Makefile
arch/microblaze/include/asm/io.h
arch/microblaze/include/asm/pgalloc.h
arch/microblaze/include/asm/pgtable.h
arch/microblaze/include/asm/prom.h
arch/microblaze/include/asm/tlb.h
arch/microblaze/include/asm/uaccess.h
arch/microblaze/kernel/Makefile
arch/microblaze/kernel/cpu/cpuinfo-pvr-full.c
arch/microblaze/kernel/cpu/cpuinfo-static.c
arch/microblaze/kernel/cpu/cpuinfo.c
arch/microblaze/kernel/head.S
arch/microblaze/kernel/hw_exception_handler.S
arch/microblaze/kernel/module.c
arch/microblaze/kernel/setup.c
arch/microblaze/kernel/sys_microblaze.c
arch/microblaze/kernel/syscall_table.S
arch/microblaze/mm/fault.c
arch/mips/include/asm/pgalloc.h
arch/mn10300/include/asm/pgalloc.h
arch/mn10300/kernel/vmlinux.lds.S
arch/parisc/include/asm/tlb.h
arch/parisc/kernel/entry.S
arch/parisc/kernel/module.c
arch/powerpc/boot/dts/mpc8377_rdb.dts
arch/powerpc/boot/dts/mpc8378_rdb.dts
arch/powerpc/boot/dts/mpc8379_rdb.dts
arch/powerpc/boot/dts/mpc8569mds.dts
arch/powerpc/configs/83xx/asp8347_defconfig
arch/powerpc/configs/83xx/kmeter1_defconfig
arch/powerpc/configs/83xx/mpc8313_rdb_defconfig
arch/powerpc/configs/83xx/mpc8315_rdb_defconfig
arch/powerpc/configs/83xx/mpc832x_mds_defconfig
arch/powerpc/configs/83xx/mpc832x_rdb_defconfig
arch/powerpc/configs/83xx/mpc834x_itx_defconfig
arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig
arch/powerpc/configs/83xx/mpc834x_mds_defconfig
arch/powerpc/configs/83xx/mpc836x_mds_defconfig
arch/powerpc/configs/83xx/mpc836x_rdk_defconfig
arch/powerpc/configs/83xx/mpc837x_mds_defconfig
arch/powerpc/configs/83xx/mpc837x_rdb_defconfig
arch/powerpc/configs/83xx/sbc834x_defconfig
arch/powerpc/configs/85xx/ksi8560_defconfig
arch/powerpc/configs/85xx/mpc8540_ads_defconfig
arch/powerpc/configs/85xx/mpc8560_ads_defconfig
arch/powerpc/configs/85xx/mpc85xx_cds_defconfig
arch/powerpc/configs/85xx/sbc8548_defconfig
arch/powerpc/configs/85xx/sbc8560_defconfig
arch/powerpc/configs/85xx/socrates_defconfig
arch/powerpc/configs/85xx/stx_gp3_defconfig
arch/powerpc/configs/85xx/tqm8540_defconfig
arch/powerpc/configs/85xx/tqm8541_defconfig
arch/powerpc/configs/85xx/tqm8548_defconfig
arch/powerpc/configs/85xx/tqm8555_defconfig
arch/powerpc/configs/85xx/tqm8560_defconfig
arch/powerpc/configs/85xx/xes_mpc85xx_defconfig
arch/powerpc/configs/86xx/gef_ppc9a_defconfig
arch/powerpc/configs/86xx/gef_sbc310_defconfig
arch/powerpc/configs/86xx/gef_sbc610_defconfig
arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig
arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig
arch/powerpc/configs/86xx/sbc8641d_defconfig
arch/powerpc/configs/adder875_defconfig
arch/powerpc/configs/c2k_defconfig
arch/powerpc/configs/ep8248e_defconfig
arch/powerpc/configs/ep88xc_defconfig
arch/powerpc/configs/linkstation_defconfig
arch/powerpc/configs/mgcoge_defconfig
arch/powerpc/configs/mgsuvd_defconfig
arch/powerpc/configs/mpc7448_hpc2_defconfig
arch/powerpc/configs/mpc8272_ads_defconfig
arch/powerpc/configs/mpc83xx_defconfig
arch/powerpc/configs/mpc85xx_defconfig
arch/powerpc/configs/mpc85xx_smp_defconfig
arch/powerpc/configs/mpc866_ads_defconfig
arch/powerpc/configs/mpc86xx_defconfig
arch/powerpc/configs/mpc885_ads_defconfig
arch/powerpc/configs/pq2fads_defconfig
arch/powerpc/configs/prpmc2800_defconfig
arch/powerpc/configs/storcenter_defconfig
arch/powerpc/include/asm/pgalloc-32.h
arch/powerpc/include/asm/pgalloc-64.h
arch/powerpc/include/asm/pgalloc.h
arch/powerpc/kernel/ptrace.c
arch/powerpc/kernel/vector.S
arch/powerpc/mm/hugetlbpage.c
arch/powerpc/mm/mmu_context_nohash.c
arch/powerpc/platforms/85xx/mpc85xx_mds.c
arch/s390/include/asm/tlb.h
arch/s390/kernel/early.c
arch/s390/kernel/smp.c
arch/s390/kernel/vdso64/clock_gettime.S
arch/s390/power/swsusp.c
arch/s390/power/swsusp_asm64.S
arch/sh/include/asm/pgalloc.h
arch/sh/include/asm/tlb.h
arch/sparc/include/asm/pgalloc_32.h
arch/sparc/include/asm/tlb_64.h
arch/um/include/asm/pgalloc.h
arch/um/include/asm/tlb.h
arch/x86/include/asm/efi.h
arch/x86/include/asm/io_apic.h
arch/x86/include/asm/irqflags.h
arch/x86/include/asm/lguest.h
arch/x86/include/asm/lguest_hcall.h
arch/x86/include/asm/pgalloc.h
arch/x86/include/asm/uaccess.h
arch/x86/include/asm/uaccess_64.h
arch/x86/include/asm/uv/uv_hub.h
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/apic/x2apic_cluster.c
arch/x86/kernel/apic/x2apic_phys.c
arch/x86/kernel/apic/x2apic_uv_x.c
arch/x86/kernel/apm_32.c
arch/x86/kernel/cpu/amd.c
arch/x86/kernel/cpu/mcheck/mce.c
arch/x86/kernel/cpu/perf_counter.c
arch/x86/kernel/efi.c
arch/x86/kernel/efi_64.c
arch/x86/kernel/head_32.S
arch/x86/kernel/irqinit.c
arch/x86/kernel/mfgpt_32.c
arch/x86/kernel/reboot.c
arch/x86/kernel/setup.c
arch/x86/kernel/vmlinux.lds.S
arch/x86/lguest/boot.c
arch/x86/lguest/i386_head.S
arch/x86/lib/msr.c
arch/x86/mm/highmem_32.c
arch/x86/mm/pageattr.c
arch/x86/mm/pgtable.c
arch/x86/mm/srat_64.c
arch/x86/pci/i386.c
arch/xtensa/include/asm/tlb.h
block/blk-core.c
block/blk-integrity.c
block/blk-settings.c
block/blk-sysfs.c
block/elevator.c
crypto/async_tx/async_xor.c
drivers/acpi/acpi_memhotplug.c
drivers/acpi/acpica/acobject.h
drivers/acpi/acpica/dsopcode.c
drivers/acpi/acpica/exfldio.c
drivers/acpi/osl.c
drivers/acpi/sleep.c
drivers/acpi/system.c
drivers/ata/ahci.c
drivers/ata/ata_piix.c
drivers/ata/libata-core.c
drivers/ata/libata-eh.c
drivers/ata/pata_at91.c
drivers/ata/pata_octeon_cf.c
drivers/ata/pata_pcmcia.c
drivers/ata/sata_mv.c
drivers/ata/sata_sil.c
drivers/base/firmware_class.c
drivers/base/sys.c
drivers/block/ataflop.c
drivers/block/mg_disk.c
drivers/block/virtio_blk.c
drivers/block/z2ram.c
drivers/char/agp/parisc-agp.c
drivers/char/hvc_console.c
drivers/char/n_tty.c
drivers/char/nozomi.c
drivers/char/pcmcia/ipwireless/tty.c
drivers/char/specialix.c
drivers/char/sysrq.c
drivers/char/tty_buffer.c
drivers/char/tty_ldisc.c
drivers/char/tty_port.c
drivers/char/vc_screen.c
drivers/char/vr41xx_giu.c [deleted file]
drivers/char/vt.c
drivers/connector/cn_queue.c
drivers/connector/connector.c
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq_conservative.c
drivers/dma/Kconfig
drivers/dma/Makefile
drivers/dma/at_hdmac.c [new file with mode: 0644]
drivers/dma/at_hdmac_regs.h [new file with mode: 0644]
drivers/dma/dmatest.c
drivers/dma/fsldma.c
drivers/dma/fsldma.h
drivers/dma/mv_xor.c
drivers/edac/amd64_edac.c
drivers/edac/x38_edac.c
drivers/gpu/drm/drm_crtc.c
drivers/gpu/drm/drm_crtc_helper.c
drivers/gpu/drm/drm_debugfs.c
drivers/gpu/drm/drm_gem.c
drivers/gpu/drm/drm_stub.c
drivers/gpu/drm/radeon/Makefile
drivers/gpu/drm/radeon/atombios_crtc.c
drivers/gpu/drm/radeon/r100.c
drivers/gpu/drm/radeon/r300.c
drivers/gpu/drm/radeon/r300_reg.h
drivers/gpu/drm/radeon/r500_reg.h
drivers/gpu/drm/radeon/r520.c
drivers/gpu/drm/radeon/r600.c
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_asic.h
drivers/gpu/drm/radeon/radeon_atombios.c
drivers/gpu/drm/radeon/radeon_benchmark.c
drivers/gpu/drm/radeon/radeon_cs.c
drivers/gpu/drm/radeon/radeon_cursor.c
drivers/gpu/drm/radeon/radeon_device.c
drivers/gpu/drm/radeon/radeon_display.c
drivers/gpu/drm/radeon/radeon_drv.c
drivers/gpu/drm/radeon/radeon_encoders.c
drivers/gpu/drm/radeon/radeon_fb.c
drivers/gpu/drm/radeon/radeon_fence.c
drivers/gpu/drm/radeon/radeon_gart.c
drivers/gpu/drm/radeon/radeon_gem.c
drivers/gpu/drm/radeon/radeon_kms.c
drivers/gpu/drm/radeon/radeon_legacy_crtc.c
drivers/gpu/drm/radeon/radeon_legacy_encoders.c
drivers/gpu/drm/radeon/radeon_mode.h
drivers/gpu/drm/radeon/radeon_object.c
drivers/gpu/drm/radeon/radeon_ring.c
drivers/gpu/drm/radeon/radeon_share.h [new file with mode: 0644]
drivers/gpu/drm/radeon/radeon_test.c [new file with mode: 0644]
drivers/gpu/drm/radeon/radeon_ttm.c
drivers/gpu/drm/radeon/rs400.c
drivers/gpu/drm/radeon/rs600.c
drivers/gpu/drm/radeon/rs690.c
drivers/gpu/drm/radeon/rs690r.h [new file with mode: 0644]
drivers/gpu/drm/radeon/rv515.c
drivers/gpu/drm/radeon/rv515r.h [new file with mode: 0644]
drivers/gpu/drm/radeon/rv770.c
drivers/gpu/drm/ttm/ttm_bo.c
drivers/gpu/drm/ttm/ttm_bo_util.c
drivers/gpu/drm/ttm/ttm_bo_vm.c
drivers/gpu/drm/ttm/ttm_tt.c
drivers/gpu/drm/via/via_irq.c
drivers/hid/hid-core.c
drivers/hid/usbhid/hiddev.c
drivers/hwmon/asus_atk0110.c
drivers/hwmon/smsc47m1.c
drivers/i2c/busses/i2c-omap.c
drivers/i2c/busses/i2c-s3c2410.c
drivers/i2c/busses/i2c-sh_mobile.c
drivers/i2c/chips/tsl2550.c
drivers/ide/ide-disk.c
drivers/ide/ide-tape.c
drivers/input/evdev.c
drivers/input/joydev.c
drivers/input/joystick/xpad.c
drivers/input/keyboard/atkbd.c
drivers/input/misc/pcspkr.c
drivers/input/misc/wistron_btns.c
drivers/input/serio/hp_sdc_mlc.c
drivers/isdn/gigaset/interface.c
drivers/isdn/mISDN/l1oip_core.c
drivers/lguest/core.c
drivers/lguest/hypercalls.c
drivers/lguest/interrupts_and_traps.c
drivers/lguest/lg.h
drivers/lguest/lguest_device.c
drivers/lguest/lguest_user.c
drivers/lguest/page_tables.c
drivers/lguest/segments.c
drivers/lguest/x86/core.c
drivers/lguest/x86/switcher_32.S
drivers/md/dm-crypt.c
drivers/md/dm-delay.c
drivers/md/dm-linear.c
drivers/md/dm-mpath.c
drivers/md/dm-raid1.c
drivers/md/dm-stripe.c
drivers/md/dm-table.c
drivers/md/dm.c
drivers/md/dm.h
drivers/md/linear.c
drivers/md/md.c
drivers/md/md.h
drivers/md/multipath.c
drivers/md/raid0.c
drivers/md/raid1.c
drivers/md/raid10.c
drivers/md/raid5.c
drivers/media/dvb/b2c2/flexcop-fe-tuner.c
drivers/media/dvb/frontends/af9013.c
drivers/media/video/bt8xx/bttv-cards.c
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/bt8xx/bttv.h
drivers/media/video/cx23885/cx23885-417.c
drivers/media/video/em28xx/em28xx-cards.c
drivers/media/video/em28xx/em28xx-core.c
drivers/media/video/em28xx/em28xx-dvb.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/em28xx/em28xx.h
drivers/media/video/gspca/Kconfig
drivers/media/video/gspca/Makefile
drivers/media/video/gspca/conex.c
drivers/media/video/gspca/gspca.c
drivers/media/video/gspca/gspca.h
drivers/media/video/gspca/m5602/m5602_s5k4aa.c
drivers/media/video/gspca/mars.c
drivers/media/video/gspca/sn9c20x.c [new file with mode: 0644]
drivers/media/video/gspca/sonixj.c
drivers/media/video/gspca/spca500.c
drivers/media/video/gspca/stk014.c
drivers/media/video/gspca/stv06xx/stv06xx_hdcs.c
drivers/media/video/gspca/sunplus.c
drivers/media/video/gspca/zc3xx.c
drivers/media/video/mt9v011.c
drivers/mfd/twl4030-irq.c
drivers/misc/cb710/sgbuf2.c
drivers/misc/eeprom/at25.c
drivers/mmc/host/cb710-mmc.c
drivers/mmc/host/imxmmc.c
drivers/mmc/host/mvsdio.c
drivers/mmc/host/pxamci.c
drivers/mmc/host/sdhci-of.c
drivers/mmc/host/sdhci.c
drivers/mmc/host/sdhci.h
drivers/mtd/ubi/gluebi.c
drivers/mtd/ubi/scan.c
drivers/net/Kconfig
drivers/net/Makefile
drivers/net/arm/Kconfig
drivers/net/arm/Makefile
drivers/net/arm/at91_ether.c
drivers/net/arm/w90p910_ether.c [new file with mode: 0644]
drivers/net/at1700.c
drivers/net/atl1c/atl1c.h
drivers/net/atl1c/atl1c_main.c
drivers/net/benet/be_main.c
drivers/net/bnx2x_link.c
drivers/net/bonding/bond_main.c
drivers/net/can/dev.c
drivers/net/can/sja1000/sja1000.c
drivers/net/cnic.c
drivers/net/e100.c
drivers/net/eepro.c
drivers/net/fealnx.c
drivers/net/fs_enet/fs_enet-main.c
drivers/net/gianfar.c
drivers/net/hamradio/6pack.c
drivers/net/ibm_newemac/rgmii.c
drivers/net/ixgbe/ixgbe.h
drivers/net/ixgbe/ixgbe_dcb_nl.c
drivers/net/ixgbe/ixgbe_main.c
drivers/net/jazzsonic.c
drivers/net/ks8851.c [new file with mode: 0644]
drivers/net/ks8851.h [new file with mode: 0644]
drivers/net/macsonic.c
drivers/net/mlx4/en_ethtool.c
drivers/net/netxen/netxen_nic.h
drivers/net/netxen/netxen_nic_ctx.c
drivers/net/netxen/netxen_nic_hw.c
drivers/net/netxen/netxen_nic_init.c
drivers/net/netxen/netxen_nic_main.c
drivers/net/pcmcia/3c589_cs.c
drivers/net/phy/mdio-gpio.c
drivers/net/ppp_async.c
drivers/net/ppp_synctty.c
drivers/net/r8169.c
drivers/net/sc92031.c
drivers/net/skge.c
drivers/net/sky2.c
drivers/net/smc91x.h
drivers/net/tokenring/ibmtr.c
drivers/net/ucc_geth.c
drivers/net/usb/Kconfig
drivers/net/usb/Makefile
drivers/net/usb/cdc-phonet.c [new file with mode: 0644]
drivers/net/usb/cdc_eem.c
drivers/net/wireless/ath/ath5k/base.c
drivers/net/wireless/ath/ath9k/ani.c
drivers/net/wireless/ath/regd.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-tx.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/iwmc3200wifi/netdev.c
drivers/net/wireless/libertas/cmd.c
drivers/net/wireless/libertas/defs.h
drivers/net/wireless/mac80211_hwsim.c
drivers/net/wireless/p54/p54spi.c
drivers/net/wireless/rt2x00/rt2500usb.c
drivers/net/wireless/rtl818x/rtl8187_leds.c
drivers/of/of_mdio.c
drivers/parisc/ccio-dma.c
drivers/parisc/dino.c
drivers/parisc/eisa_eeprom.c
drivers/parisc/hppb.c
drivers/parisc/lba_pci.c
drivers/parisc/pdc_stable.c
drivers/pci/setup-res.c
drivers/platform/x86/Kconfig
drivers/platform/x86/acer-wmi.c
drivers/platform/x86/eeepc-laptop.c
drivers/platform/x86/hp-wmi.c
drivers/platform/x86/thinkpad_acpi.c
drivers/power/Kconfig
drivers/power/Makefile
drivers/power/ds2782_battery.c [new file with mode: 0644]
drivers/power/olpc_battery.c
drivers/rtc/rtc-cmos.c
drivers/s390/crypto/ap_bus.c
drivers/serial/atmel_serial.c
drivers/serial/bfin_sport_uart.c
drivers/serial/cpm_uart/cpm_uart_cpm2.c
drivers/serial/msm_serial.c
drivers/spi/omap2_mcspi.c
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/android/lowmemorykiller.c
drivers/staging/serqt_usb2/serqt_usb2.c
drivers/staging/uc2322/Kconfig [deleted file]
drivers/staging/uc2322/Makefile [deleted file]
drivers/staging/uc2322/TODO [deleted file]
drivers/staging/uc2322/aten2011.c [deleted file]
drivers/staging/udlfb/udlfb.c
drivers/usb/class/cdc-acm.c
drivers/usb/core/config.c
drivers/usb/host/ehci-orion.c
drivers/usb/host/ohci-omap.c
drivers/usb/host/xhci-dbg.c
drivers/usb/host/xhci-hcd.c
drivers/usb/host/xhci-mem.c
drivers/usb/host/xhci-pci.c
drivers/usb/host/xhci-ring.c
drivers/usb/host/xhci.h
drivers/usb/misc/Kconfig
drivers/usb/musb/musb_core.c
drivers/usb/musb/musb_gadget_ep0.c
drivers/usb/musb/musb_regs.h
drivers/usb/serial/cp210x.c
drivers/usb/serial/ftdi_sio.c
drivers/usb/serial/ftdi_sio.h
drivers/usb/serial/mos7720.c
drivers/usb/serial/mos7840.c
drivers/usb/serial/option.c
drivers/usb/serial/ti_usb_3410_5052.c
drivers/usb/serial/usb-serial.c
drivers/usb/storage/transport.c
drivers/video/Kconfig
drivers/video/backlight/jornada720_bl.c
drivers/video/backlight/pwm_bl.c
drivers/video/console/sticore.c
drivers/video/fbmon.c
drivers/video/s3c-fb.c
drivers/virtio/virtio_pci.c
drivers/watchdog/coh901327_wdt.c
drivers/watchdog/ep93xx_wdt.c
fs/9p/vfs_addr.c
fs/Kconfig
fs/block_dev.c
fs/btrfs/async-thread.c
fs/btrfs/ctree.c
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/extent-tree.c
fs/btrfs/free-space-cache.c
fs/btrfs/free-space-cache.h
fs/btrfs/inode.c
fs/btrfs/print-tree.c
fs/btrfs/relocation.c
fs/btrfs/transaction.c
fs/btrfs/transaction.h
fs/btrfs/tree-log.c
fs/btrfs/volumes.c
fs/cifs/CHANGES
fs/cifs/README
fs/cifs/cifs_debug.c
fs/cifs/cifs_dfs_ref.c
fs/cifs/cifs_unicode.c
fs/cifs/cifsfs.c
fs/cifs/cifsglob.h
fs/cifs/cifssmb.c
fs/cifs/connect.c
fs/cifs/inode.c
fs/ecryptfs/keystore.c
fs/ext3/dir.c
fs/ext3/inode.c
fs/gfs2/aops.c
fs/gfs2/glock.c
fs/gfs2/glock.h
fs/gfs2/glops.c
fs/gfs2/incore.h
fs/gfs2/rgrp.c
fs/gfs2/super.c
fs/gfs2/super.h
fs/jbd/journal.c
fs/jbd/transaction.c
fs/jfs/acl.c
fs/nfs/client.c
fs/nfs/dir.c
fs/nfs/nfs4_fs.h
fs/nfs/nfs4proc.c
fs/nfs/nfs4state.c
fs/nilfs2/Kconfig [new file with mode: 0644]
fs/nilfs2/mdt.c
fs/nilfs2/segment.c
fs/notify/Kconfig
fs/notify/dnotify/Kconfig
fs/notify/fsnotify.c
fs/notify/inotify/Kconfig
fs/notify/inotify/inotify_user.c
fs/notify/notification.c
fs/pipe.c
fs/quota/dquot.c
fs/ramfs/file-nommu.c
fs/sysfs/dir.c
fs/udf/super.c
fs/xfs/linux-2.6/xfs_aops.c
fs/xfs/linux-2.6/xfs_iops.c
include/acpi/acpiosxf.h
include/asm-generic/4level-fixup.h
include/asm-generic/pgtable-nopmd.h
include/asm-generic/pgtable-nopud.h
include/asm-generic/tlb.h
include/asm-generic/vmlinux.lds.h
include/drm/drm_pciids.h
include/drm/radeon_drm.h
include/drm/ttm/ttm_bo_driver.h
include/drm/ttm/ttm_module.h
include/linux/cb710.h
include/linux/cgroup.h
include/linux/clocksource.h
include/linux/console_struct.h
include/linux/device-mapper.h
include/linux/ext3_fs.h
include/linux/flex_array.h [new file with mode: 0644]
include/linux/fs.h
include/linux/fsnotify_backend.h
include/linux/hrtimer.h
include/linux/interrupt.h
include/linux/iocontext.h
include/linux/lguest.h
include/linux/lguest_launcher.h
include/linux/libata.h
include/linux/of_mdio.h
include/linux/perf_counter.h
include/linux/pps.h
include/linux/rfkill.h
include/linux/scatterlist.h
include/linux/sched.h
include/linux/tty.h
include/linux/uio.h
include/linux/videodev2.h
include/linux/virtio_blk.h
include/linux/virtio_config.h
include/linux/virtio_net.h
include/linux/virtio_ring.h
include/media/v4l2-chip-ident.h
include/net/rose.h
include/net/sock.h
include/net/tcp.h
init/Kconfig
kernel/cgroup.c
kernel/fork.c
kernel/freezer.c
kernel/irq/internals.h
kernel/irq/manage.c
kernel/irq/migration.c
kernel/kexec.c
kernel/kprobes.c
kernel/kthread.c
kernel/module.c
kernel/panic.c
kernel/perf_counter.c
kernel/posix-timers.c
kernel/profile.c
kernel/sched.c
kernel/sched_cpupri.c
kernel/sched_fair.c
kernel/sched_rt.c
kernel/signal.c
kernel/softirq.c
kernel/time/clocksource.c
kernel/timer.c
kernel/trace/ftrace.c
kernel/trace/trace.c
kernel/trace/trace_events.c
kernel/trace/trace_functions.c
kernel/trace/trace_functions_graph.c
kernel/trace/trace_printk.c
kernel/trace/trace_stack.c
kernel/trace/trace_stat.c
lib/Makefile
lib/atomic64.c
lib/dynamic_debug.c
lib/flex_array.c [new file with mode: 0644]
lib/scatterlist.c
mm/hugetlb.c
mm/kmemleak.c
mm/memcontrol.c
mm/memory.c
mm/page_alloc.c
mm/swapfile.c
net/9p/client.c
net/bridge/br_if.c
net/can/bcm.c
net/can/raw.c
net/core/sock.c
net/dccp/proto.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_output.c
net/ipv6/tcp_ipv6.c
net/irda/irttp.c
net/mac80211/Kconfig
net/mac80211/mesh_pathtbl.c
net/mac80211/tx.c
net/netfilter/nf_conntrack_core.c
net/netfilter/xt_osf.c
net/rfkill/core.c
net/rose/af_rose.c
net/rose/rose_route.c
net/wireless/nl80211.c
net/wireless/scan.c
scripts/get_maintainer.pl
scripts/kconfig/lxdialog/util.c
scripts/kconfig/mconf.c
scripts/markup_oops.pl
scripts/package/builddeb
scripts/recordmcount.pl
sound/aoa/core/gpio-pmf.c
sound/arm/pxa2xx-pcm-lib.c
sound/core/pcm_lib.c
sound/core/seq/Makefile
sound/isa/gus/gus_pcm.c
sound/oss/aedsp16.c
sound/oss/mpu401.c
sound/pci/ca0106/ca0106_main.c
sound/pci/ctxfi/ctamixer.c
sound/pci/ctxfi/ctdaio.c
sound/pci/ctxfi/ctsrc.c
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_eld.c
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_sigmatel.c
sound/pci/riptide/riptide.c
sound/soc/codecs/tlv320aic3x.c
sound/usb/Kconfig
sound/usb/caiaq/audio.c
sound/usb/caiaq/device.c
sound/usb/caiaq/device.h
sound/usb/usbaudio.c
sound/usb/usbmixer.c
tools/perf/Documentation/perf-report.txt
tools/perf/Makefile
tools/perf/builtin-annotate.c
tools/perf/builtin-record.c
tools/perf/builtin-report.c
tools/perf/builtin-stat.c
tools/perf/builtin-top.c
tools/perf/perf.c
tools/perf/perf.h
tools/perf/util/cache.h
tools/perf/util/header.h
tools/perf/util/include/linux/kernel.h
tools/perf/util/parse-events.c
tools/perf/util/parse-events.h
tools/perf/util/quote.c
tools/perf/util/string.h
tools/perf/util/strlist.c
tools/perf/util/strlist.h
tools/perf/util/symbol.c
tools/perf/util/symbol.h
tools/perf/util/util.h

diff --git a/CREDITS b/CREDITS
index 2b88fb37ad503e12ed271aa26b1068b7c5d93aea..1a41bf4addd0689c9bd7243c80712ee409da9310 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1856,7 +1856,7 @@ E: rfkoenig@immd4.informatik.uni-erlangen.de
 D: The Linux Support Team Erlangen
 
 N: Andreas Koensgen
-E: ajk@iehk.rwth-aachen.de
+E: ajk@comnets.uni-bremen.de
 D: 6pack driver for AX.25
 
 N: Harald Koerfgen
@@ -2006,6 +2006,9 @@ E: paul@laufernet.com
 D: Soundblaster driver fixes, ISAPnP quirk
 S: California, USA
 
+N: Jonathan Layes
+D: ARPD support
+
 N: Tom Lees
 E: tom@lpsg.demon.co.uk
 W: http://www.lpsg.demon.co.uk/
@@ -3802,6 +3805,9 @@ S: van Bronckhorststraat 12
 S: 2612 XV Delft
 S: The Netherlands
 
+N: Thomas Woller
+D: CS461x Cirrus Logic sound driver
+
 N: David Woodhouse
 E: dwmw2@infradead.org
 D: JFFS2 file system, Memory Technology Device subsystem,
index 93cb28d05dcd92da30dde47ec58205e2b0851022..18f9651ff23d411e96737ec070d4fc6bc29c50fe 100644 (file)
@@ -83,11 +83,12 @@ not detect it missed following items in original chain.
 obj = kmem_cache_alloc(...);
 lock_chain(); // typically a spin_lock()
 obj->key = key;
-atomic_inc(&obj->refcnt);
 /*
  * we need to make sure obj->key is updated before obj->next
+ * or obj->refcnt
  */
 smp_wmb();
+atomic_set(&obj->refcnt, 1);
 hlist_add_head_rcu(&obj->obj_node, list);
 unlock_chain(); // typically a spin_unlock()
 
@@ -159,6 +160,10 @@ out:
 obj = kmem_cache_alloc(cachep);
 lock_chain(); // typically a spin_lock()
 obj->key = key;
+/*
+ * changes to obj->key must be visible before refcnt one
+ */
+smp_wmb();
 atomic_set(&obj->refcnt, 1);
 /*
  * insert obj in RCU way (readers might be traversing chain)
index f688eba8770488e4ebf4fa147e5f6b643be10634..6a5be5d5c8e4895c9f30c8494066eca302ffa056 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     cn_test.c
  * 
- * 2004-2005 Copyright (c) Evgeniy Polyakov <johnpol@2ka.mipt.ru>
+ * 2004+ Copyright (c) Evgeniy Polyakov <zbr@ioremap.net>
  * All rights reserved.
  * 
  * This program is free software; you can redistribute it and/or modify
@@ -194,5 +194,5 @@ module_init(cn_test_init);
 module_exit(cn_test_fini);
 
 MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>");
+MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
 MODULE_DESCRIPTION("Connector's test module");
index d738cde2a8d51603e7faa207d7aea014ebb80d48..c5092ad0ce4b24912dc361a59dc596ed9ccda011 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     ucon.c
  *
- * Copyright (c) 2004+ Evgeniy Polyakov <johnpol@2ka.mipt.ru>
+ * Copyright (c) 2004+ Evgeniy Polyakov <zbr@ioremap.net>
  *
  *
  * This program is free software; you can redistribute it and/or modify
index 7e81e37c0b1ec0ccbea30a92ffbf70f495ffdbd0..b245d524d5682afe30a194821ab62e619092ff3c 100644 (file)
@@ -23,7 +23,8 @@ interface.
 Using sysfs
 ~~~~~~~~~~~
 
-sysfs is always compiled in. You can access it by doing:
+sysfs is always compiled in if CONFIG_SYSFS is defined. You can access
+it by doing:
 
     mount -t sysfs sysfs /sys 
 
index f2296ecedb89d41e6afec1d3ea239256cb4fe768..e2ddcdeb61b6f5caffa1f80f901ebf5619f93dd7 100644 (file)
@@ -36,8 +36,6 @@ detailed description):
        - Bluetooth enable and disable
        - video output switching, expansion control
        - ThinkLight on and off
-       - limited docking and undocking
-       - UltraBay eject
        - CMOS/UCMS control
        - LED control
        - ACPI sounds
@@ -729,131 +727,6 @@ cannot be read or if it is unknown, thinkpad-acpi will report it as "off".
 It is impossible to know if the status returned through sysfs is valid.
 
 
-Docking / undocking -- /proc/acpi/ibm/dock
-------------------------------------------
-
-Docking and undocking (e.g. with the X4 UltraBase) requires some
-actions to be taken by the operating system to safely make or break
-the electrical connections with the dock.
-
-The docking feature of this driver generates the following ACPI events:
-
-       ibm/dock GDCK 00000003 00000001 -- eject request
-       ibm/dock GDCK 00000003 00000002 -- undocked
-       ibm/dock GDCK 00000000 00000003 -- docked
-
-NOTE: These events will only be generated if the laptop was docked
-when originally booted. This is due to the current lack of support for
-hot plugging of devices in the Linux ACPI framework. If the laptop was
-booted while not in the dock, the following message is shown in the
-logs:
-
-       Mar 17 01:42:34 aero kernel: thinkpad_acpi: dock device not present
-
-In this case, no dock-related events are generated but the dock and
-undock commands described below still work. They can be executed
-manually or triggered by Fn key combinations (see the example acpid
-configuration files included in the driver tarball package available
-on the web site).
-
-When the eject request button on the dock is pressed, the first event
-above is generated. The handler for this event should issue the
-following command:
-
-       echo undock > /proc/acpi/ibm/dock
-
-After the LED on the dock goes off, it is safe to eject the laptop.
-Note: if you pressed this key by mistake, go ahead and eject the
-laptop, then dock it back in. Otherwise, the dock may not function as
-expected.
-
-When the laptop is docked, the third event above is generated. The
-handler for this event should issue the following command to fully
-enable the dock:
-
-       echo dock > /proc/acpi/ibm/dock
-
-The contents of the /proc/acpi/ibm/dock file shows the current status
-of the dock, as provided by the ACPI framework.
-
-The docking support in this driver does not take care of enabling or
-disabling any other devices you may have attached to the dock. For
-example, a CD drive plugged into the UltraBase needs to be disabled or
-enabled separately. See the provided example acpid configuration files
-for how this can be accomplished.
-
-There is no support yet for PCI devices that may be attached to a
-docking station, e.g. in the ThinkPad Dock II. The driver currently
-does not recognize, enable or disable such devices. This means that
-the only docking stations currently supported are the X-series
-UltraBase docks and "dumb" port replicators like the Mini Dock (the
-latter don't need any ACPI support, actually).
-
-
-UltraBay eject -- /proc/acpi/ibm/bay
-------------------------------------
-
-Inserting or ejecting an UltraBay device requires some actions to be
-taken by the operating system to safely make or break the electrical
-connections with the device.
-
-This feature generates the following ACPI events:
-
-       ibm/bay MSTR 00000003 00000000 -- eject request
-       ibm/bay MSTR 00000001 00000000 -- eject lever inserted
-
-NOTE: These events will only be generated if the UltraBay was present
-when the laptop was originally booted (on the X series, the UltraBay
-is in the dock, so it may not be present if the laptop was undocked).
-This is due to the current lack of support for hot plugging of devices
-in the Linux ACPI framework. If the laptop was booted without the
-UltraBay, the following message is shown in the logs:
-
-       Mar 17 01:42:34 aero kernel: thinkpad_acpi: bay device not present
-
-In this case, no bay-related events are generated but the eject
-command described below still works. It can be executed manually or
-triggered by a hot key combination.
-
-Sliding the eject lever generates the first event shown above. The
-handler for this event should take whatever actions are necessary to
-shut down the device in the UltraBay (e.g. call idectl), then issue
-the following command:
-
-       echo eject > /proc/acpi/ibm/bay
-
-After the LED on the UltraBay goes off, it is safe to pull out the
-device.
-
-When the eject lever is inserted, the second event above is
-generated. The handler for this event should take whatever actions are
-necessary to enable the UltraBay device (e.g. call idectl).
-
-The contents of the /proc/acpi/ibm/bay file shows the current status
-of the UltraBay, as provided by the ACPI framework.
-
-EXPERIMENTAL warm eject support on the 600e/x, A22p and A3x (To use
-this feature, you need to supply the experimental=1 parameter when
-loading the module):
-
-These models do not have a button near the UltraBay device to request
-a hot eject but rather require the laptop to be put to sleep
-(suspend-to-ram) before the bay device is ejected or inserted).
-The sequence of steps to eject the device is as follows:
-
-       echo eject > /proc/acpi/ibm/bay
-       put the ThinkPad to sleep
-       remove the drive
-       resume from sleep
-       cat /proc/acpi/ibm/bay should show that the drive was removed
-
-On the A3x, both the UltraBay 2000 and UltraBay Plus devices are
-supported. Use "eject2" instead of "eject" for the second bay.
-
-Note: the UltraBay eject support on the 600e/x, A22p and A3x is
-EXPERIMENTAL and may not work as expected. USE WITH CAUTION!
-
-
 CMOS/UCMS control
 -----------------
 
index 9ebcd6ef361b565fc331bd09c202866f403fcf99..950cde6d6e58384083202b40af0921ef31e0e0ca 100644 (file)
@@ -1,7 +1,9 @@
-/*P:100 This is the Launcher code, a simple program which lays out the
- * "physical" memory for the new Guest by mapping the kernel image and
- * the virtual devices, then opens /dev/lguest to tell the kernel
- * about the Guest and control it. :*/
+/*P:100
+ * This is the Launcher code, a simple program which lays out the "physical"
+ * memory for the new Guest by mapping the kernel image and the virtual
+ * devices, then opens /dev/lguest to tell the kernel about the Guest and
+ * control it.
+:*/
 #define _LARGEFILE64_SOURCE
 #define _GNU_SOURCE
 #include <stdio.h>
 #include "linux/virtio_rng.h"
 #include "linux/virtio_ring.h"
 #include "asm/bootparam.h"
-/*L:110 We can ignore the 39 include files we need for this program, but I do
- * want to draw attention to the use of kernel-style types.
+/*L:110
+ * We can ignore the 42 include files we need for this program, but I do want
+ * to draw attention to the use of kernel-style types.
  *
  * As Linus said, "C is a Spartan language, and so should your naming be."  I
  * like these abbreviations, so we define them here.  Note that u64 is always
  * unsigned long long, which works on all Linux systems: this means that we can
- * use %llu in printf for any u64. */
+ * use %llu in printf for any u64.
+ */
 typedef unsigned long long u64;
 typedef uint32_t u32;
 typedef uint16_t u16;
@@ -69,8 +73,10 @@ typedef uint8_t u8;
 /* This will occupy 3 pages: it must be a power of 2. */
 #define VIRTQUEUE_NUM 256
 
-/*L:120 verbose is both a global flag and a macro.  The C preprocessor allows
- * this, and although I wouldn't recommend it, it works quite nicely here. */
+/*L:120
+ * verbose is both a global flag and a macro.  The C preprocessor allows
+ * this, and although I wouldn't recommend it, it works quite nicely here.
+ */
 static bool verbose;
 #define verbose(args...) \
        do { if (verbose) printf(args); } while(0)
@@ -87,8 +93,7 @@ static int lguest_fd;
 static unsigned int __thread cpu_id;
 
 /* This is our list of devices. */
-struct device_list
-{
+struct device_list {
        /* Counter to assign interrupt numbers. */
        unsigned int next_irq;
 
@@ -100,8 +105,7 @@ struct device_list
 
        /* A single linked list of devices. */
        struct device *dev;
-       /* And a pointer to the last device for easy append and also for
-        * configuration appending. */
+       /* And a pointer to the last device for easy append. */
        struct device *lastdev;
 };
 
@@ -109,8 +113,7 @@ struct device_list
 static struct device_list devices;
 
 /* The device structure describes a single device. */
-struct device
-{
+struct device {
        /* The linked-list pointer. */
        struct device *next;
 
@@ -135,8 +138,7 @@ struct device
 };
 
 /* The virtqueue structure describes a queue attached to a device. */
-struct virtqueue
-{
+struct virtqueue {
        struct virtqueue *next;
 
        /* Which device owns me. */
@@ -168,20 +170,24 @@ static char **main_args;
 /* The original tty settings to restore on exit. */
 static struct termios orig_term;
 
-/* We have to be careful with barriers: our devices are all run in separate
+/*
+ * We have to be careful with barriers: our devices are all run in separate
  * threads and so we need to make sure that changes visible to the Guest happen
- * in precise order. */
+ * in precise order.
+ */
 #define wmb() __asm__ __volatile__("" : : : "memory")
 #define mb() __asm__ __volatile__("" : : : "memory")
 
-/* Convert an iovec element to the given type.
+/*
+ * Convert an iovec element to the given type.
  *
  * This is a fairly ugly trick: we need to know the size of the type and
  * alignment requirement to check the pointer is kosher.  It's also nice to
  * have the name of the type in case we report failure.
  *
  * Typing those three things all the time is cumbersome and error prone, so we
- * have a macro which sets them all up and passes to the real function. */
+ * have a macro which sets them all up and passes to the real function.
+ */
 #define convert(iov, type) \
        ((type *)_convert((iov), sizeof(type), __alignof__(type), #type))
 
@@ -198,8 +204,10 @@ static void *_convert(struct iovec *iov, size_t size, size_t align,
 /* Wrapper for the last available index.  Makes it easier to change. */
 #define lg_last_avail(vq)      ((vq)->last_avail_idx)
 
-/* The virtio configuration space is defined to be little-endian.  x86 is
- * little-endian too, but it's nice to be explicit so we have these helpers. */
+/*
+ * The virtio configuration space is defined to be little-endian.  x86 is
+ * little-endian too, but it's nice to be explicit so we have these helpers.
+ */
 #define cpu_to_le16(v16) (v16)
 #define cpu_to_le32(v32) (v32)
 #define cpu_to_le64(v64) (v64)
@@ -241,11 +249,12 @@ static u8 *get_feature_bits(struct device *dev)
                + dev->num_vq * sizeof(struct lguest_vqconfig);
 }
 
-/*L:100 The Launcher code itself takes us out into userspace, that scary place
- * where pointers run wild and free!  Unfortunately, like most userspace
- * programs, it's quite boring (which is why everyone likes to hack on the
- * kernel!).  Perhaps if you make up an Lguest Drinking Game at this point, it
- * will get you through this section.  Or, maybe not.
+/*L:100
+ * The Launcher code itself takes us out into userspace, that scary place where
+ * pointers run wild and free!  Unfortunately, like most userspace programs,
+ * it's quite boring (which is why everyone likes to hack on the kernel!).
+ * Perhaps if you make up an Lguest Drinking Game at this point, it will get
+ * you through this section.  Or, maybe not.
  *
  * The Launcher sets up a big chunk of memory to be the Guest's "physical"
  * memory and stores it in "guest_base".  In other words, Guest physical ==
@@ -253,7 +262,8 @@ static u8 *get_feature_bits(struct device *dev)
  *
  * This can be tough to get your head around, but usually it just means that we
  * use these trivial conversion functions when the Guest gives us it's
- * "physical" addresses: */
+ * "physical" addresses:
+ */
 static void *from_guest_phys(unsigned long addr)
 {
        return guest_base + addr;
@@ -268,7 +278,8 @@ static unsigned long to_guest_phys(const void *addr)
  * Loading the Kernel.
  *
  * We start with couple of simple helper routines.  open_or_die() avoids
- * error-checking code cluttering the callers: */
+ * error-checking code cluttering the callers:
+ */
 static int open_or_die(const char *name, int flags)
 {
        int fd = open(name, flags);
@@ -283,12 +294,19 @@ static void *map_zeroed_pages(unsigned int num)
        int fd = open_or_die("/dev/zero", O_RDONLY);
        void *addr;
 
-       /* We use a private mapping (ie. if we write to the page, it will be
-        * copied). */
+       /*
+        * We use a private mapping (ie. if we write to the page, it will be
+        * copied).
+        */
        addr = mmap(NULL, getpagesize() * num,
                    PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, fd, 0);
        if (addr == MAP_FAILED)
                err(1, "Mmaping %u pages of /dev/zero", num);
+
+       /*
+        * One neat mmap feature is that you can close the fd, and it
+        * stays mapped.
+        */
        close(fd);
 
        return addr;
@@ -305,20 +323,24 @@ static void *get_pages(unsigned int num)
        return addr;
 }
 
-/* This routine is used to load the kernel or initrd.  It tries mmap, but if
+/*
+ * This routine is used to load the kernel or initrd.  It tries mmap, but if
  * that fails (Plan 9's kernel file isn't nicely aligned on page boundaries),
- * it falls back to reading the memory in. */
+ * it falls back to reading the memory in.
+ */
 static void map_at(int fd, void *addr, unsigned long offset, unsigned long len)
 {
        ssize_t r;
 
-       /* We map writable even though for some segments are marked read-only.
+       /*
+        * We map writable even though for some segments are marked read-only.
         * The kernel really wants to be writable: it patches its own
         * instructions.
         *
         * MAP_PRIVATE means that the page won't be copied until a write is
         * done to it.  This allows us to share untouched memory between
-        * Guests. */
+        * Guests.
+        */
        if (mmap(addr, len, PROT_READ|PROT_WRITE|PROT_EXEC,
                 MAP_FIXED|MAP_PRIVATE, fd, offset) != MAP_FAILED)
                return;
@@ -329,7 +351,8 @@ static void map_at(int fd, void *addr, unsigned long offset, unsigned long len)
                err(1, "Reading offset %lu len %lu gave %zi", offset, len, r);
 }
 
-/* This routine takes an open vmlinux image, which is in ELF, and maps it into
+/*
+ * This routine takes an open vmlinux image, which is in ELF, and maps it into
  * the Guest memory.  ELF = Embedded Linking Format, which is the format used
  * by all modern binaries on Linux including the kernel.
  *
@@ -337,23 +360,28 @@ static void map_at(int fd, void *addr, unsigned long offset, unsigned long len)
  * address.  We use the physical address; the Guest will map itself to the
  * virtual address.
  *
- * We return the starting address. */
+ * We return the starting address.
+ */
 static unsigned long map_elf(int elf_fd, const Elf32_Ehdr *ehdr)
 {
        Elf32_Phdr phdr[ehdr->e_phnum];
        unsigned int i;
 
-       /* Sanity checks on the main ELF header: an x86 executable with a
-        * reasonable number of correctly-sized program headers. */
+       /*
+        * Sanity checks on the main ELF header: an x86 executable with a
+        * reasonable number of correctly-sized program headers.
+        */
        if (ehdr->e_type != ET_EXEC
            || ehdr->e_machine != EM_386
            || ehdr->e_phentsize != sizeof(Elf32_Phdr)
            || ehdr->e_phnum < 1 || ehdr->e_phnum > 65536U/sizeof(Elf32_Phdr))
                errx(1, "Malformed elf header");
 
-       /* An ELF executable contains an ELF header and a number of "program"
+       /*
+        * An ELF executable contains an ELF header and a number of "program"
         * headers which indicate which parts ("segments") of the program to
-        * load where. */
+        * load where.
+        */
 
        /* We read in all the program headers at once: */
        if (lseek(elf_fd, ehdr->e_phoff, SEEK_SET) < 0)
@@ -361,8 +389,10 @@ static unsigned long map_elf(int elf_fd, const Elf32_Ehdr *ehdr)
        if (read(elf_fd, phdr, sizeof(phdr)) != sizeof(phdr))
                err(1, "Reading program headers");
 
-       /* Try all the headers: there are usually only three.  A read-only one,
-        * a read-write one, and a "note" section which we don't load. */
+       /*
+        * Try all the headers: there are usually only three.  A read-only one,
+        * a read-write one, and a "note" section which we don't load.
+        */
        for (i = 0; i < ehdr->e_phnum; i++) {
                /* If this isn't a loadable segment, we ignore it */
                if (phdr[i].p_type != PT_LOAD)
@@ -380,13 +410,15 @@ static unsigned long map_elf(int elf_fd, const Elf32_Ehdr *ehdr)
        return ehdr->e_entry;
 }
 
-/*L:150 A bzImage, unlike an ELF file, is not meant to be loaded.  You're
- * supposed to jump into it and it will unpack itself.  We used to have to
- * perform some hairy magic because the unpacking code scared me.
+/*L:150
+ * A bzImage, unlike an ELF file, is not meant to be loaded.  You're supposed
+ * to jump into it and it will unpack itself.  We used to have to perform some
+ * hairy magic because the unpacking code scared me.
  *
  * Fortunately, Jeremy Fitzhardinge convinced me it wasn't that hard and wrote
  * a small patch to jump over the tricky bits in the Guest, so now we just read
- * the funky header so we know where in the file to load, and away we go! */
+ * the funky header so we know where in the file to load, and away we go!
+ */
 static unsigned long load_bzimage(int fd)
 {
        struct boot_params boot;
@@ -394,8 +426,10 @@ static unsigned long load_bzimage(int fd)
        /* Modern bzImages get loaded at 1M. */
        void *p = from_guest_phys(0x100000);
 
-       /* Go back to the start of the file and read the header.  It should be
-        * a Linux boot header (see Documentation/x86/i386/boot.txt) */
+       /*
+        * Go back to the start of the file and read the header.  It should be
+        * a Linux boot header (see Documentation/x86/i386/boot.txt)
+        */
        lseek(fd, 0, SEEK_SET);
        read(fd, &boot, sizeof(boot));
 
@@ -414,9 +448,11 @@ static unsigned long load_bzimage(int fd)
        return boot.hdr.code32_start;
 }
 
-/*L:140 Loading the kernel is easy when it's a "vmlinux", but most kernels
+/*L:140
+ * Loading the kernel is easy when it's a "vmlinux", but most kernels
  * come wrapped up in the self-decompressing "bzImage" format.  With a little
- * work, we can load those, too. */
+ * work, we can load those, too.
+ */
 static unsigned long load_kernel(int fd)
 {
        Elf32_Ehdr hdr;
@@ -433,24 +469,28 @@ static unsigned long load_kernel(int fd)
        return load_bzimage(fd);
 }
 
-/* This is a trivial little helper to align pages.  Andi Kleen hated it because
+/*
+ * This is a trivial little helper to align pages.  Andi Kleen hated it because
  * it calls getpagesize() twice: "it's dumb code."
  *
  * Kernel guys get really het up about optimization, even when it's not
- * necessary.  I leave this code as a reaction against that. */
+ * necessary.  I leave this code as a reaction against that.
+ */
 static inline unsigned long page_align(unsigned long addr)
 {
        /* Add upwards and truncate downwards. */
        return ((addr + getpagesize()-1) & ~(getpagesize()-1));
 }
 
-/*L:180 An "initial ram disk" is a disk image loaded into memory along with
- * the kernel which the kernel can use to boot from without needing any
- * drivers.  Most distributions now use this as standard: the initrd contains
- * the code to load the appropriate driver modules for the current machine.
+/*L:180
+ * An "initial ram disk" is a disk image loaded into memory along with the
+ * kernel which the kernel can use to boot from without needing any drivers.
+ * Most distributions now use this as standard: the initrd contains the code to
+ * load the appropriate driver modules for the current machine.
  *
  * Importantly, James Morris works for RedHat, and Fedora uses initrds for its
- * kernels.  He sent me this (and tells me when I break it). */
+ * kernels.  He sent me this (and tells me when I break it).
+ */
 static unsigned long load_initrd(const char *name, unsigned long mem)
 {
        int ifd;
@@ -462,12 +502,16 @@ static unsigned long load_initrd(const char *name, unsigned long mem)
        if (fstat(ifd, &st) < 0)
                err(1, "fstat() on initrd '%s'", name);
 
-       /* We map the initrd at the top of memory, but mmap wants it to be
-        * page-aligned, so we round the size up for that. */
+       /*
+        * We map the initrd at the top of memory, but mmap wants it to be
+        * page-aligned, so we round the size up for that.
+        */
        len = page_align(st.st_size);
        map_at(ifd, from_guest_phys(mem - len), 0, st.st_size);
-       /* Once a file is mapped, you can close the file descriptor.  It's a
-        * little odd, but quite useful. */
+       /*
+        * Once a file is mapped, you can close the file descriptor.  It's a
+        * little odd, but quite useful.
+        */
        close(ifd);
        verbose("mapped initrd %s size=%lu @ %p\n", name, len, (void*)mem-len);
 
@@ -476,8 +520,10 @@ static unsigned long load_initrd(const char *name, unsigned long mem)
 }
 /*:*/
 
-/* Simple routine to roll all the commandline arguments together with spaces
- * between them. */
+/*
+ * Simple routine to roll all the commandline arguments together with spaces
+ * between them.
+ */
 static void concat(char *dst, char *args[])
 {
        unsigned int i, len = 0;
@@ -494,10 +540,12 @@ static void concat(char *dst, char *args[])
        dst[len] = '\0';
 }
 
-/*L:185 This is where we actually tell the kernel to initialize the Guest.  We
+/*L:185
+ * This is where we actually tell the kernel to initialize the Guest.  We
  * saw the arguments it expects when we looked at initialize() in lguest_user.c:
  * the base of Guest "physical" memory, the top physical page to allow and the
- * entry point for the Guest. */
+ * entry point for the Guest.
+ */
 static void tell_kernel(unsigned long start)
 {
        unsigned long args[] = { LHREQ_INITIALIZE,
@@ -511,7 +559,7 @@ static void tell_kernel(unsigned long start)
 }
 /*:*/
 
-/*
+/*L:200
  * Device Handling.
  *
  * When the Guest gives us a buffer, it sends an array of addresses and sizes.
@@ -522,20 +570,26 @@ static void tell_kernel(unsigned long start)
 static void *_check_pointer(unsigned long addr, unsigned int size,
                            unsigned int line)
 {
-       /* We have to separately check addr and addr+size, because size could
-        * be huge and addr + size might wrap around. */
+       /*
+        * We have to separately check addr and addr+size, because size could
+        * be huge and addr + size might wrap around.
+        */
        if (addr >= guest_limit || addr + size >= guest_limit)
                errx(1, "%s:%i: Invalid address %#lx", __FILE__, line, addr);
-       /* We return a pointer for the caller's convenience, now we know it's
-        * safe to use. */
+       /*
+        * We return a pointer for the caller's convenience, now we know it's
+        * safe to use.
+        */
        return from_guest_phys(addr);
 }
 /* A macro which transparently hands the line number to the real function. */
 #define check_pointer(addr,size) _check_pointer(addr, size, __LINE__)
 
-/* Each buffer in the virtqueues is actually a chain of descriptors.  This
+/*
+ * Each buffer in the virtqueues is actually a chain of descriptors.  This
  * function returns the next descriptor in the chain, or vq->vring.num if we're
- * at the end. */
+ * at the end.
+ */
 static unsigned next_desc(struct vring_desc *desc,
                          unsigned int i, unsigned int max)
 {
@@ -556,7 +610,10 @@ static unsigned next_desc(struct vring_desc *desc,
        return next;
 }
 
-/* This actually sends the interrupt for this virtqueue */
+/*
+ * This actually sends the interrupt for this virtqueue, if we've used a
+ * buffer.
+ */
 static void trigger_irq(struct virtqueue *vq)
 {
        unsigned long buf[] = { LHREQ_IRQ, vq->config.irq };
@@ -576,12 +633,14 @@ static void trigger_irq(struct virtqueue *vq)
                err(1, "Triggering irq %i", vq->config.irq);
 }
 
-/* This looks in the virtqueue and for the first available buffer, and converts
+/*
+ * This looks in the virtqueue for the first available buffer, and converts
  * it to an iovec for convenient access.  Since descriptors consist of some
  * number of output then some number of input descriptors, it's actually two
  * iovecs, but we pack them into one and note how many of each there were.
  *
- * This function returns the descriptor number found. */
+ * This function waits if necessary, and returns the descriptor number found.
+ */
 static unsigned wait_for_vq_desc(struct virtqueue *vq,
                                 struct iovec iov[],
                                 unsigned int *out_num, unsigned int *in_num)
@@ -590,17 +649,23 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
        struct vring_desc *desc;
        u16 last_avail = lg_last_avail(vq);
 
+       /* There's nothing available? */
        while (last_avail == vq->vring.avail->idx) {
                u64 event;
 
-               /* OK, tell Guest about progress up to now. */
+               /*
+                * Since we're about to sleep, now is a good time to tell the
+                * Guest about what we've used up to now.
+                */
                trigger_irq(vq);
 
                /* OK, now we need to know about added descriptors. */
                vq->vring.used->flags &= ~VRING_USED_F_NO_NOTIFY;
 
-               /* They could have slipped one in as we were doing that: make
-                * sure it's written, then check again. */
+               /*
+                * They could have slipped one in as we were doing that: make
+                * sure it's written, then check again.
+                */
                mb();
                if (last_avail != vq->vring.avail->idx) {
                        vq->vring.used->flags |= VRING_USED_F_NO_NOTIFY;
@@ -620,8 +685,10 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
                errx(1, "Guest moved used index from %u to %u",
                     last_avail, vq->vring.avail->idx);
 
-       /* Grab the next descriptor number they're advertising, and increment
-        * the index we've seen. */
+       /*
+        * Grab the next descriptor number they're advertising, and increment
+        * the index we've seen.
+        */
        head = vq->vring.avail->ring[last_avail % vq->vring.num];
        lg_last_avail(vq)++;
 
@@ -636,8 +703,10 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
        desc = vq->vring.desc;
        i = head;
 
-       /* If this is an indirect entry, then this buffer contains a descriptor
-        * table which we handle as if it's any normal descriptor chain. */
+       /*
+        * If this is an indirect entry, then this buffer contains a descriptor
+        * table which we handle as if it's any normal descriptor chain.
+        */
        if (desc[i].flags & VRING_DESC_F_INDIRECT) {
                if (desc[i].len % sizeof(struct vring_desc))
                        errx(1, "Invalid size for indirect buffer table");
@@ -656,8 +725,10 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
                if (desc[i].flags & VRING_DESC_F_WRITE)
                        (*in_num)++;
                else {
-                       /* If it's an output descriptor, they're all supposed
-                        * to come before any input descriptors. */
+                       /*
+                        * If it's an output descriptor, they're all supposed
+                        * to come before any input descriptors.
+                        */
                        if (*in_num)
                                errx(1, "Descriptor has out after in");
                        (*out_num)++;
@@ -671,14 +742,19 @@ static unsigned wait_for_vq_desc(struct virtqueue *vq,
        return head;
 }
 
-/* After we've used one of their buffers, we tell them about it.  We'll then
- * want to send them an interrupt, using trigger_irq(). */
+/*
+ * After we've used one of their buffers, we tell the Guest about it.  Sometime
+ * later we'll want to send them an interrupt using trigger_irq(); note that
+ * wait_for_vq_desc() does that for us if it has to wait.
+ */
 static void add_used(struct virtqueue *vq, unsigned int head, int len)
 {
        struct vring_used_elem *used;
 
-       /* The virtqueue contains a ring of used buffers.  Get a pointer to the
-        * next entry in that used ring. */
+       /*
+        * The virtqueue contains a ring of used buffers.  Get a pointer to the
+        * next entry in that used ring.
+        */
        used = &vq->vring.used->ring[vq->vring.used->idx % vq->vring.num];
        used->id = head;
        used->len = len;
@@ -698,9 +774,9 @@ static void add_used_and_trigger(struct virtqueue *vq, unsigned head, int len)
 /*
  * The Console
  *
- * We associate some data with the console for our exit hack. */
-struct console_abort
-{
+ * We associate some data with the console for our exit hack.
+ */
+struct console_abort {
        /* How many times have they hit ^C? */
        int count;
        /* When did they start? */
@@ -715,30 +791,35 @@ static void console_input(struct virtqueue *vq)
        struct console_abort *abort = vq->dev->priv;
        struct iovec iov[vq->vring.num];
 
-       /* Make sure there's a descriptor waiting. */
+       /* Make sure there's a descriptor available. */
        head = wait_for_vq_desc(vq, iov, &out_num, &in_num);
        if (out_num)
                errx(1, "Output buffers in console in queue?");
 
-       /* Read it in. */
+       /* Read into it.  This is where we usually wait. */
        len = readv(STDIN_FILENO, iov, in_num);
        if (len <= 0) {
                /* Ran out of input? */
                warnx("Failed to get console input, ignoring console.");
-               /* For simplicity, dying threads kill the whole Launcher.  So
-                * just nap here. */
+               /*
+                * For simplicity, dying threads kill the whole Launcher.  So
+                * just nap here.
+                */
                for (;;)
                        pause();
        }
 
+       /* Tell the Guest we used a buffer. */
        add_used_and_trigger(vq, head, len);
 
-       /* Three ^C within one second?  Exit.
+       /*
+        * Three ^C within one second?  Exit.
         *
         * This is such a hack, but works surprisingly well.  Each ^C has to
         * be in a buffer by itself, so they can't be too fast.  But we check
         * that we get three within about a second, so they can't be too
-        * slow. */
+        * slow.
+        */
        if (len != 1 || ((char *)iov[0].iov_base)[0] != 3) {
                abort->count = 0;
                return;
@@ -763,15 +844,23 @@ static void console_output(struct virtqueue *vq)
        unsigned int head, out, in;
        struct iovec iov[vq->vring.num];
 
+       /* We usually wait in here, for the Guest to give us something. */
        head = wait_for_vq_desc(vq, iov, &out, &in);
        if (in)
                errx(1, "Input buffers in console output queue?");
+
+       /* writev can return a partial write, so we loop here. */
        while (!iov_empty(iov, out)) {
                int len = writev(STDOUT_FILENO, iov, out);
                if (len <= 0)
                        err(1, "Write to stdout gave %i", len);
                iov_consume(iov, out, len);
        }
+
+       /*
+        * We're finished with that buffer: if we're going to sleep,
+        * wait_for_vq_desc() will prod the Guest with an interrupt.
+        */
        add_used(vq, head, 0);
 }
 
@@ -791,15 +880,30 @@ static void net_output(struct virtqueue *vq)
        unsigned int head, out, in;
        struct iovec iov[vq->vring.num];
 
+       /* We usually wait in here for the Guest to give us a packet. */
        head = wait_for_vq_desc(vq, iov, &out, &in);
        if (in)
                errx(1, "Input buffers in net output queue?");
+       /*
+        * Send the whole thing through to /dev/net/tun.  It expects the exact
+        * same format: what a coincidence!
+        */
        if (writev(net_info->tunfd, iov, out) < 0)
                errx(1, "Write to tun failed?");
+
+       /*
+        * Done with that one; wait_for_vq_desc() will send the interrupt if
+        * all packets are processed.
+        */
        add_used(vq, head, 0);
 }
 
-/* Will reading from this file descriptor block? */
+/*
+ * Handling network input is a bit trickier, because I've tried to optimize it.
+ *
+ * First we have a helper routine which tells is if from this file descriptor
+ * (ie. the /dev/net/tun device) will block:
+ */
 static bool will_block(int fd)
 {
        fd_set fdset;
@@ -809,8 +913,11 @@ static bool will_block(int fd)
        return select(fd+1, &fdset, NULL, NULL, &zero) != 1;
 }
 
-/* This is where we handle packets coming in from the tun device to our
- * Guest. */
+/*
+ * This handles packets coming in from the tun device to our Guest.  Like all
+ * service routines, it gets called again as soon as it returns, so you don't
+ * see a while(1) loop here.
+ */
 static void net_input(struct virtqueue *vq)
 {
        int len;
@@ -818,21 +925,38 @@ static void net_input(struct virtqueue *vq)
        struct iovec iov[vq->vring.num];
        struct net_info *net_info = vq->dev->priv;
 
+       /*
+        * Get a descriptor to write an incoming packet into.  This will also
+        * send an interrupt if they're out of descriptors.
+        */
        head = wait_for_vq_desc(vq, iov, &out, &in);
        if (out)
                errx(1, "Output buffers in net input queue?");
 
-       /* Deliver interrupt now, since we're about to sleep. */
+       /*
+        * If it looks like we'll block reading from the tun device, send them
+        * an interrupt.
+        */
        if (vq->pending_used && will_block(net_info->tunfd))
                trigger_irq(vq);
 
+       /*
+        * Read in the packet.  This is where we normally wait (when there's no
+        * incoming network traffic).
+        */
        len = readv(net_info->tunfd, iov, in);
        if (len <= 0)
                err(1, "Failed to read from tun.");
+
+       /*
+        * Mark that packet buffer as used, but don't interrupt here.  We want
+        * to wait until we've done as much work as we can.
+        */
        add_used(vq, head, len);
 }
+/*:*/
 
-/* This is the helper to create threads. */
+/* This is the helper to create threads: run the service routine in a loop. */
 static int do_thread(void *_vq)
 {
        struct virtqueue *vq = _vq;
@@ -842,8 +966,10 @@ static int do_thread(void *_vq)
        return 0;
 }
 
-/* When a child dies, we kill our entire process group with SIGTERM.  This
- * also has the side effect that the shell restores the console for us! */
+/*
+ * When a child dies, we kill our entire process group with SIGTERM.  This
+ * also has the side effect that the shell restores the console for us!
+ */
 static void kill_launcher(int signal)
 {
        kill(0, SIGTERM);
@@ -878,11 +1004,15 @@ static void reset_device(struct device *dev)
        signal(SIGCHLD, (void *)kill_launcher);
 }
 
+/*L:216
+ * This actually creates the thread which services the virtqueue for a device.
+ */
 static void create_thread(struct virtqueue *vq)
 {
-       /* Create stack for thread and run it.  Since stack grows
-        * upwards, we point the stack pointer to the end of this
-        * region. */
+       /*
+        * Create stack for thread.  Since the stack grows upwards, we point
+        * the stack pointer to the end of this region.
+        */
        char *stack = malloc(32768);
        unsigned long args[] = { LHREQ_EVENTFD,
                                 vq->config.pfn*getpagesize(), 0 };
@@ -893,17 +1023,22 @@ static void create_thread(struct virtqueue *vq)
                err(1, "Creating eventfd");
        args[2] = vq->eventfd;
 
-       /* Attach an eventfd to this virtqueue: it will go off
-        * when the Guest does an LHCALL_NOTIFY for this vq. */
+       /*
+        * Attach an eventfd to this virtqueue: it will go off when the Guest
+        * does an LHCALL_NOTIFY for this vq.
+        */
        if (write(lguest_fd, &args, sizeof(args)) != 0)
                err(1, "Attaching eventfd");
 
-       /* CLONE_VM: because it has to access the Guest memory, and
-        * SIGCHLD so we get a signal if it dies. */
+       /*
+        * CLONE_VM: because it has to access the Guest memory, and SIGCHLD so
+        * we get a signal if it dies.
+        */
        vq->thread = clone(do_thread, stack + 32768, CLONE_VM | SIGCHLD, vq);
        if (vq->thread == (pid_t)-1)
                err(1, "Creating clone");
-       /* We close our local copy, now the child has it. */
+
+       /* We close our local copy now the child has it. */
        close(vq->eventfd);
 }
 
@@ -955,7 +1090,10 @@ static void update_device_status(struct device *dev)
        }
 }
 
-/* This is the generic routine we call when the Guest uses LHCALL_NOTIFY. */
+/*L:215
+ * This is the generic routine we call when the Guest uses LHCALL_NOTIFY.  In
+ * particular, it's used to notify us of device status changes during boot.
+ */
 static void handle_output(unsigned long addr)
 {
        struct device *i;
@@ -964,25 +1102,42 @@ static void handle_output(unsigned long addr)
        for (i = devices.dev; i; i = i->next) {
                struct virtqueue *vq;
 
-               /* Notifications to device descriptors update device status. */
+               /*
+                * Notifications to device descriptors mean they updated the
+                * device status.
+                */
                if (from_guest_phys(addr) == i->desc) {
                        update_device_status(i);
                        return;
                }
 
-               /* Devices *can* be used before status is set to DRIVER_OK. */
+               /*
+                * Devices *can* be used before status is set to DRIVER_OK.
+                * The original plan was that they would never do this: they
+                * would always finish setting up their status bits before
+                * actually touching the virtqueues.  In practice, we allowed
+                * them to, and they do (eg. the disk probes for partition
+                * tables as part of initialization).
+                *
+                * If we see this, we start the device: once it's running, we
+                * expect the device to catch all the notifications.
+                */
                for (vq = i->vq; vq; vq = vq->next) {
                        if (addr != vq->config.pfn*getpagesize())
                                continue;
                        if (i->running)
                                errx(1, "Notification on running %s", i->name);
+                       /* This just calls create_thread() for each virtqueue */
                        start_device(i);
                        return;
                }
        }
 
-       /* Early console write is done using notify on a nul-terminated string
-        * in Guest memory. */
+       /*
+        * Early console write is done using notify on a nul-terminated string
+        * in Guest memory.  It's also great for hacking debugging messages
+        * into a Guest.
+        */
        if (addr >= guest_limit)
                errx(1, "Bad NOTIFY %#lx", addr);
 
@@ -998,10 +1153,12 @@ static void handle_output(unsigned long addr)
  * routines to allocate and manage them.
  */
 
-/* The layout of the device page is a "struct lguest_device_desc" followed by a
+/*
+ * The layout of the device page is a "struct lguest_device_desc" followed by a
  * number of virtqueue descriptors, then two sets of feature bits, then an
  * array of configuration bytes.  This routine returns the configuration
- * pointer. */
+ * pointer.
+ */
 static u8 *device_config(const struct device *dev)
 {
        return (void *)(dev->desc + 1)
@@ -1009,9 +1166,11 @@ static u8 *device_config(const struct device *dev)
                + dev->feature_len * 2;
 }
 
-/* This routine allocates a new "struct lguest_device_desc" from descriptor
+/*
+ * This routine allocates a new "struct lguest_device_desc" from descriptor
  * table page just above the Guest's normal memory.  It returns a pointer to
- * that descriptor. */
+ * that descriptor.
+ */
 static struct lguest_device_desc *new_dev_desc(u16 type)
 {
        struct lguest_device_desc d = { .type = type };
@@ -1032,8 +1191,10 @@ static struct lguest_device_desc *new_dev_desc(u16 type)
        return memcpy(p, &d, sizeof(d));
 }
 
-/* Each device descriptor is followed by the description of its virtqueues.  We
- * specify how many descriptors the virtqueue is to have. */
+/*
+ * Each device descriptor is followed by the description of its virtqueues.  We
+ * specify how many descriptors the virtqueue is to have.
+ */
 static void add_virtqueue(struct device *dev, unsigned int num_descs,
                          void (*service)(struct virtqueue *))
 {
@@ -1050,6 +1211,11 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
        vq->next = NULL;
        vq->last_avail_idx = 0;
        vq->dev = dev;
+
+       /*
+        * This is the routine the service thread will run, and its Process ID
+        * once it's running.
+        */
        vq->service = service;
        vq->thread = (pid_t)-1;
 
@@ -1061,10 +1227,12 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
        /* Initialize the vring. */
        vring_init(&vq->vring, num_descs, p, LGUEST_VRING_ALIGN);
 
-       /* Append virtqueue to this device's descriptor.  We use
+       /*
+        * Append virtqueue to this device's descriptor.  We use
         * device_config() to get the end of the device's current virtqueues;
         * we check that we haven't added any config or feature information
-        * yet, otherwise we'd be overwriting them. */
+        * yet, otherwise we'd be overwriting them.
+        */
        assert(dev->desc->config_len == 0 && dev->desc->feature_len == 0);
        memcpy(device_config(dev), &vq->config, sizeof(vq->config));
        dev->num_vq++;
@@ -1072,14 +1240,18 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
 
        verbose("Virtqueue page %#lx\n", to_guest_phys(p));
 
-       /* Add to tail of list, so dev->vq is first vq, dev->vq->next is
-        * second.  */
+       /*
+        * Add to tail of list, so dev->vq is first vq, dev->vq->next is
+        * second.
+        */
        for (i = &dev->vq; *i; i = &(*i)->next);
        *i = vq;
 }
 
-/* The first half of the feature bitmask is for us to advertise features.  The
- * second half is for the Guest to accept features. */
+/*
+ * The first half of the feature bitmask is for us to advertise features.  The
+ * second half is for the Guest to accept features.
+ */
 static void add_feature(struct device *dev, unsigned bit)
 {
        u8 *features = get_feature_bits(dev);
@@ -1093,9 +1265,11 @@ static void add_feature(struct device *dev, unsigned bit)
        features[bit / CHAR_BIT] |= (1 << (bit % CHAR_BIT));
 }
 
-/* This routine sets the configuration fields for an existing device's
+/*
+ * This routine sets the configuration fields for an existing device's
  * descriptor.  It only works for the last device, but that's OK because that's
- * how we use it. */
+ * how we use it.
+ */
 static void set_config(struct device *dev, unsigned len, const void *conf)
 {
        /* Check we haven't overflowed our single page. */
@@ -1105,12 +1279,18 @@ static void set_config(struct device *dev, unsigned len, const void *conf)
        /* Copy in the config information, and store the length. */
        memcpy(device_config(dev), conf, len);
        dev->desc->config_len = len;
+
+       /* Size must fit in config_len field (8 bits)! */
+       assert(dev->desc->config_len == len);
 }
 
-/* This routine does all the creation and setup of a new device, including
- * calling new_dev_desc() to allocate the descriptor and device memory.
+/*
+ * This routine does all the creation and setup of a new device, including
+ * calling new_dev_desc() to allocate the descriptor and device memory.  We
+ * don't actually start the service threads until later.
  *
- * See what I mean about userspace being boring? */
+ * See what I mean about userspace being boring?
+ */
 static struct device *new_device(const char *name, u16 type)
 {
        struct device *dev = malloc(sizeof(*dev));
@@ -1123,10 +1303,12 @@ static struct device *new_device(const char *name, u16 type)
        dev->num_vq = 0;
        dev->running = false;
 
-       /* Append to device list.  Prepending to a single-linked list is
+       /*
+        * Append to device list.  Prepending to a single-linked list is
         * easier, but the user expects the devices to be arranged on the bus
         * in command-line order.  The first network device on the command line
-        * is eth0, the first block device /dev/vda, etc. */
+        * is eth0, the first block device /dev/vda, etc.
+        */
        if (devices.lastdev)
                devices.lastdev->next = dev;
        else
@@ -1136,8 +1318,10 @@ static struct device *new_device(const char *name, u16 type)
        return dev;
 }
 
-/* Our first setup routine is the console.  It's a fairly simple device, but
- * UNIX tty handling makes it uglier than it could be. */
+/*
+ * Our first setup routine is the console.  It's a fairly simple device, but
+ * UNIX tty handling makes it uglier than it could be.
+ */
 static void setup_console(void)
 {
        struct device *dev;
@@ -1145,8 +1329,10 @@ static void setup_console(void)
        /* If we can save the initial standard input settings... */
        if (tcgetattr(STDIN_FILENO, &orig_term) == 0) {
                struct termios term = orig_term;
-               /* Then we turn off echo, line buffering and ^C etc.  We want a
-                * raw input stream to the Guest. */
+               /*
+                * Then we turn off echo, line buffering and ^C etc: We want a
+                * raw input stream to the Guest.
+                */
                term.c_lflag &= ~(ISIG|ICANON|ECHO);
                tcsetattr(STDIN_FILENO, TCSANOW, &term);
        }
@@ -1157,10 +1343,12 @@ static void setup_console(void)
        dev->priv = malloc(sizeof(struct console_abort));
        ((struct console_abort *)dev->priv)->count = 0;
 
-       /* The console needs two virtqueues: the input then the output.  When
+       /*
+        * The console needs two virtqueues: the input then the output.  When
         * they put something the input queue, we make sure we're listening to
         * stdin.  When they put something in the output queue, we write it to
-        * stdout. */
+        * stdout.
+        */
        add_virtqueue(dev, VIRTQUEUE_NUM, console_input);
        add_virtqueue(dev, VIRTQUEUE_NUM, console_output);
 
@@ -1168,7 +1356,8 @@ static void setup_console(void)
 }
 /*:*/
 
-/*M:010 Inter-guest networking is an interesting area.  Simplest is to have a
+/*M:010
+ * Inter-guest networking is an interesting area.  Simplest is to have a
  * --sharenet=<name> option which opens or creates a named pipe.  This can be
  * used to send packets to another guest in a 1:1 manner.
  *
@@ -1182,7 +1371,8 @@ static void setup_console(void)
  * multiple inter-guest channels behind one interface, although it would
  * require some manner of hotplugging new virtio channels.
  *
- * Finally, we could implement a virtio network switch in the kernel. :*/
+ * Finally, we could implement a virtio network switch in the kernel.
+:*/
 
 static u32 str2ip(const char *ipaddr)
 {
@@ -1207,11 +1397,13 @@ static void str2mac(const char *macaddr, unsigned char mac[6])
        mac[5] = m[5];
 }
 
-/* This code is "adapted" from libbridge: it attaches the Host end of the
+/*
+ * This code is "adapted" from libbridge: it attaches the Host end of the
  * network device to the bridge device specified by the command line.
  *
  * This is yet another James Morris contribution (I'm an IP-level guy, so I
- * dislike bridging), and I just try not to break it. */
+ * dislike bridging), and I just try not to break it.
+ */
 static void add_to_bridge(int fd, const char *if_name, const char *br_name)
 {
        int ifidx;
@@ -1231,9 +1423,11 @@ static void add_to_bridge(int fd, const char *if_name, const char *br_name)
                err(1, "can't add %s to bridge %s", if_name, br_name);
 }
 
-/* This sets up the Host end of the network device with an IP address, brings
+/*
+ * This sets up the Host end of the network device with an IP address, brings
  * it up so packets will flow, the copies the MAC address into the hwaddr
- * pointer. */
+ * pointer.
+ */
 static void configure_device(int fd, const char *tapif, u32 ipaddr)
 {
        struct ifreq ifr;
@@ -1260,10 +1454,12 @@ static int get_tun_device(char tapif[IFNAMSIZ])
        /* Start with this zeroed.  Messy but sure. */
        memset(&ifr, 0, sizeof(ifr));
 
-       /* We open the /dev/net/tun device and tell it we want a tap device.  A
+       /*
+        * We open the /dev/net/tun device and tell it we want a tap device.  A
         * tap device is like a tun device, only somehow different.  To tell
         * the truth, I completely blundered my way through this code, but it
-        * works now! */
+        * works now!
+        */
        netfd = open_or_die("/dev/net/tun", O_RDWR);
        ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_VNET_HDR;
        strcpy(ifr.ifr_name, "tap%d");
@@ -1274,18 +1470,22 @@ static int get_tun_device(char tapif[IFNAMSIZ])
                  TUN_F_CSUM|TUN_F_TSO4|TUN_F_TSO6|TUN_F_TSO_ECN) != 0)
                err(1, "Could not set features for tun device");
 
-       /* We don't need checksums calculated for packets coming in this
-        * device: trust us! */
+       /*
+        * We don't need checksums calculated for packets coming in this
+        * device: trust us!
+        */
        ioctl(netfd, TUNSETNOCSUM, 1);
 
        memcpy(tapif, ifr.ifr_name, IFNAMSIZ);
        return netfd;
 }
 
-/*L:195 Our network is a Host<->Guest network.  This can either use bridging or
+/*L:195
+ * Our network is a Host<->Guest network.  This can either use bridging or
  * routing, but the principle is the same: it uses the "tun" device to inject
  * packets into the Host as if they came in from a normal network card.  We
- * just shunt packets between the Guest and the tun device. */
+ * just shunt packets between the Guest and the tun device.
+ */
 static void setup_tun_net(char *arg)
 {
        struct device *dev;
@@ -1302,13 +1502,14 @@ static void setup_tun_net(char *arg)
        dev = new_device("net", VIRTIO_ID_NET);
        dev->priv = net_info;
 
-       /* Network devices need a receive and a send queue, just like
-        * console. */
+       /* Network devices need a recv and a send queue, just like console. */
        add_virtqueue(dev, VIRTQUEUE_NUM, net_input);
        add_virtqueue(dev, VIRTQUEUE_NUM, net_output);
 
-       /* We need a socket to perform the magic network ioctls to bring up the
-        * tap interface, connect to the bridge etc.  Any socket will do! */
+       /*
+        * We need a socket to perform the magic network ioctls to bring up the
+        * tap interface, connect to the bridge etc.  Any socket will do!
+        */
        ipfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
        if (ipfd < 0)
                err(1, "opening IP socket");
@@ -1362,39 +1563,31 @@ static void setup_tun_net(char *arg)
                verbose("device %u: tun %s: %s\n",
                        devices.device_num, tapif, arg);
 }
-
-/* Our block (disk) device should be really simple: the Guest asks for a block
- * number and we read or write that position in the file.  Unfortunately, that
- * was amazingly slow: the Guest waits until the read is finished before
- * running anything else, even if it could have been doing useful work.
- *
- * We could use async I/O, except it's reputed to suck so hard that characters
- * actually go missing from your code when you try to use it.
- *
- * So we farm the I/O out to thread, and communicate with it via a pipe. */
+/*:*/
 
 /* This hangs off device->priv. */
-struct vblk_info
-{
+struct vblk_info {
        /* The size of the file. */
        off64_t len;
 
        /* The file descriptor for the file. */
        int fd;
 
-       /* IO thread listens on this file descriptor [0]. */
-       int workpipe[2];
-
-       /* IO thread writes to this file descriptor to mark it done, then
-        * Launcher triggers interrupt to Guest. */
-       int done_fd;
 };
 
 /*L:210
  * The Disk
  *
- * Remember that the block device is handled by a separate I/O thread.  We head
- * straight into the core of that thread here:
+ * The disk only has one virtqueue, so it only has one thread.  It is really
+ * simple: the Guest asks for a block number and we read or write that position
+ * in the file.
+ *
+ * Before we serviced each virtqueue in a separate thread, that was unacceptably
+ * slow: the Guest waits until the read is finished before running anything
+ * else, even if it could have been doing useful work.
+ *
+ * We could have used async I/O, except it's reputed to suck so hard that
+ * characters actually go missing from your code when you try to use it.
  */
 static void blk_request(struct virtqueue *vq)
 {
@@ -1406,47 +1599,64 @@ static void blk_request(struct virtqueue *vq)
        struct iovec iov[vq->vring.num];
        off64_t off;
 
-       /* Get the next request. */
+       /*
+        * Get the next request, where we normally wait.  It triggers the
+        * interrupt to acknowledge previously serviced requests (if any).
+        */
        head = wait_for_vq_desc(vq, iov, &out_num, &in_num);
 
-       /* Every block request should contain at least one output buffer
+       /*
+        * Every block request should contain at least one output buffer
         * (detailing the location on disk and the type of request) and one
-        * input buffer (to hold the result). */
+        * input buffer (to hold the result).
+        */
        if (out_num == 0 || in_num == 0)
                errx(1, "Bad virtblk cmd %u out=%u in=%u",
                     head, out_num, in_num);
 
        out = convert(&iov[0], struct virtio_blk_outhdr);
        in = convert(&iov[out_num+in_num-1], u8);
+       /*
+        * For historical reasons, block operations are expressed in 512 byte
+        * "sectors".
+        */
        off = out->sector * 512;
 
-       /* The block device implements "barriers", where the Guest indicates
+       /*
+        * The block device implements "barriers", where the Guest indicates
         * that it wants all previous writes to occur before this write.  We
         * don't have a way of asking our kernel to do a barrier, so we just
-        * synchronize all the data in the file.  Pretty poor, no? */
+        * synchronize all the data in the file.  Pretty poor, no?
+        */
        if (out->type & VIRTIO_BLK_T_BARRIER)
                fdatasync(vblk->fd);
 
-       /* In general the virtio block driver is allowed to try SCSI commands.
-        * It'd be nice if we supported eject, for example, but we don't. */
+       /*
+        * In general the virtio block driver is allowed to try SCSI commands.
+        * It'd be nice if we supported eject, for example, but we don't.
+        */
        if (out->type & VIRTIO_BLK_T_SCSI_CMD) {
                fprintf(stderr, "Scsi commands unsupported\n");
                *in = VIRTIO_BLK_S_UNSUPP;
                wlen = sizeof(*in);
        } else if (out->type & VIRTIO_BLK_T_OUT) {
-               /* Write */
-
-               /* Move to the right location in the block file.  This can fail
-                * if they try to write past end. */
+               /*
+                * Write
+                *
+                * Move to the right location in the block file.  This can fail
+                * if they try to write past end.
+                */
                if (lseek64(vblk->fd, off, SEEK_SET) != off)
                        err(1, "Bad seek to sector %llu", out->sector);
 
                ret = writev(vblk->fd, iov+1, out_num-1);
                verbose("WRITE to sector %llu: %i\n", out->sector, ret);
 
-               /* Grr... Now we know how long the descriptor they sent was, we
+               /*
+                * Grr... Now we know how long the descriptor they sent was, we
                 * make sure they didn't try to write over the end of the block
-                * file (possibly extending it). */
+                * file (possibly extending it).
+                */
                if (ret > 0 && off + ret > vblk->len) {
                        /* Trim it back to the correct length */
                        ftruncate64(vblk->fd, vblk->len);
@@ -1456,10 +1666,12 @@ static void blk_request(struct virtqueue *vq)
                wlen = sizeof(*in);
                *in = (ret >= 0 ? VIRTIO_BLK_S_OK : VIRTIO_BLK_S_IOERR);
        } else {
-               /* Read */
-
-               /* Move to the right location in the block file.  This can fail
-                * if they try to read past end. */
+               /*
+                * Read
+                *
+                * Move to the right location in the block file.  This can fail
+                * if they try to read past end.
+                */
                if (lseek64(vblk->fd, off, SEEK_SET) != off)
                        err(1, "Bad seek to sector %llu", out->sector);
 
@@ -1474,13 +1686,16 @@ static void blk_request(struct virtqueue *vq)
                }
        }
 
-       /* OK, so we noted that it was pretty poor to use an fdatasync as a
+       /*
+        * OK, so we noted that it was pretty poor to use an fdatasync as a
         * barrier.  But Christoph Hellwig points out that we need a sync
         * *afterwards* as well: "Barriers specify no reordering to the front
-        * or the back."  And Jens Axboe confirmed it, so here we are: */
+        * or the back."  And Jens Axboe confirmed it, so here we are:
+        */
        if (out->type & VIRTIO_BLK_T_BARRIER)
                fdatasync(vblk->fd);
 
+       /* Finished that request. */
        add_used(vq, head, wlen);
 }
 
@@ -1491,7 +1706,7 @@ static void setup_block_file(const char *filename)
        struct vblk_info *vblk;
        struct virtio_blk_config conf;
 
-       /* The device responds to return from I/O thread. */
+       /* Creat the device. */
        dev = new_device("block", VIRTIO_ID_BLOCK);
 
        /* The device has one virtqueue, where the Guest places requests. */
@@ -1510,27 +1725,32 @@ static void setup_block_file(const char *filename)
        /* Tell Guest how many sectors this device has. */
        conf.capacity = cpu_to_le64(vblk->len / 512);
 
-       /* Tell Guest not to put in too many descriptors at once: two are used
-        * for the in and out elements. */
+       /*
+        * Tell Guest not to put in too many descriptors at once: two are used
+        * for the in and out elements.
+        */
        add_feature(dev, VIRTIO_BLK_F_SEG_MAX);
        conf.seg_max = cpu_to_le32(VIRTQUEUE_NUM - 2);
 
-       set_config(dev, sizeof(conf), &conf);
+       /* Don't try to put whole struct: we have 8 bit limit. */
+       set_config(dev, offsetof(struct virtio_blk_config, geometry), &conf);
 
        verbose("device %u: virtblock %llu sectors\n",
                ++devices.device_num, le64_to_cpu(conf.capacity));
 }
 
-struct rng_info {
-       int rfd;
-};
-
-/* Our random number generator device reads from /dev/random into the Guest's
+/*L:211
+ * Our random number generator device reads from /dev/random into the Guest's
  * input buffers.  The usual case is that the Guest doesn't want random numbers
  * and so has no buffers although /dev/random is still readable, whereas
  * console is the reverse.
  *
- * The same logic applies, however. */
+ * The same logic applies, however.
+ */
+struct rng_info {
+       int rfd;
+};
+
 static void rng_input(struct virtqueue *vq)
 {
        int len;
@@ -1543,9 +1763,10 @@ static void rng_input(struct virtqueue *vq)
        if (out_num)
                errx(1, "Output buffers in rng?");
 
-       /* This is why we convert to iovecs: the readv() call uses them, and so
-        * it reads straight into the Guest's buffer.  We loop to make sure we
-        * fill it. */
+       /*
+        * Just like the console write, we loop to cover the whole iovec.
+        * In this case, short reads actually happen quite a bit.
+        */
        while (!iov_empty(iov, in_num)) {
                len = readv(rng_info->rfd, iov, in_num);
                if (len <= 0)
@@ -1558,15 +1779,18 @@ static void rng_input(struct virtqueue *vq)
        add_used(vq, head, totlen);
 }
 
-/* And this creates a "hardware" random number device for the Guest. */
+/*L:199
+ * This creates a "hardware" random number device for the Guest.
+ */
 static void setup_rng(void)
 {
        struct device *dev;
        struct rng_info *rng_info = malloc(sizeof(*rng_info));
 
+       /* Our device's privat info simply contains the /dev/random fd. */
        rng_info->rfd = open_or_die("/dev/random", O_RDONLY);
 
-       /* The device responds to return from I/O thread. */
+       /* Create the new device. */
        dev = new_device("rng", VIRTIO_ID_RNG);
        dev->priv = rng_info;
 
@@ -1582,8 +1806,10 @@ static void __attribute__((noreturn)) restart_guest(void)
 {
        unsigned int i;
 
-       /* Since we don't track all open fds, we simply close everything beyond
-        * stderr. */
+       /*
+        * Since we don't track all open fds, we simply close everything beyond
+        * stderr.
+        */
        for (i = 3; i < FD_SETSIZE; i++)
                close(i);
 
@@ -1594,8 +1820,10 @@ static void __attribute__((noreturn)) restart_guest(void)
        err(1, "Could not exec %s", main_args[0]);
 }
 
-/*L:220 Finally we reach the core of the Launcher which runs the Guest, serves
- * its input and output, and finally, lays it to rest. */
+/*L:220
+ * Finally we reach the core of the Launcher which runs the Guest, serves
+ * its input and output, and finally, lays it to rest.
+ */
 static void __attribute__((noreturn)) run_guest(void)
 {
        for (;;) {
@@ -1630,7 +1858,7 @@ static void __attribute__((noreturn)) run_guest(void)
  *
  * Are you ready?  Take a deep breath and join me in the core of the Host, in
  * "make Host".
- :*/
+:*/
 
 static struct option opts[] = {
        { "verbose", 0, NULL, 'v' },
@@ -1651,8 +1879,7 @@ static void usage(void)
 /*L:105 The main routine is where the real work begins: */
 int main(int argc, char *argv[])
 {
-       /* Memory, top-level pagetable, code startpoint and size of the
-        * (optional) initrd. */
+       /* Memory, code startpoint and size of the (optional) initrd. */
        unsigned long mem = 0, start, initrd_size = 0;
        /* Two temporaries. */
        int i, c;
@@ -1664,24 +1891,32 @@ int main(int argc, char *argv[])
        /* Save the args: we "reboot" by execing ourselves again. */
        main_args = argv;
 
-       /* First we initialize the device list.  We keep a pointer to the last
+       /*
+        * First we initialize the device list.  We keep a pointer to the last
         * device, and the next interrupt number to use for devices (1:
-        * remember that 0 is used by the timer). */
+        * remember that 0 is used by the timer).
+        */
        devices.lastdev = NULL;
        devices.next_irq = 1;
 
+       /* We're CPU 0.  In fact, that's the only CPU possible right now. */
        cpu_id = 0;
-       /* We need to know how much memory so we can set up the device
+
+       /*
+        * We need to know how much memory so we can set up the device
         * descriptor and memory pages for the devices as we parse the command
         * line.  So we quickly look through the arguments to find the amount
-        * of memory now. */
+        * of memory now.
+        */
        for (i = 1; i < argc; i++) {
                if (argv[i][0] != '-') {
                        mem = atoi(argv[i]) * 1024 * 1024;
-                       /* We start by mapping anonymous pages over all of
+                       /*
+                        * We start by mapping anonymous pages over all of
                         * guest-physical memory range.  This fills it with 0,
                         * and ensures that the Guest won't be killed when it
-                        * tries to access it. */
+                        * tries to access it.
+                        */
                        guest_base = map_zeroed_pages(mem / getpagesize()
                                                      + DEVICE_PAGES);
                        guest_limit = mem;
@@ -1714,8 +1949,10 @@ int main(int argc, char *argv[])
                        usage();
                }
        }
-       /* After the other arguments we expect memory and kernel image name,
-        * followed by command line arguments for the kernel. */
+       /*
+        * After the other arguments we expect memory and kernel image name,
+        * followed by command line arguments for the kernel.
+        */
        if (optind + 2 > argc)
                usage();
 
@@ -1733,20 +1970,26 @@ int main(int argc, char *argv[])
        /* Map the initrd image if requested (at top of physical memory) */
        if (initrd_name) {
                initrd_size = load_initrd(initrd_name, mem);
-               /* These are the location in the Linux boot header where the
-                * start and size of the initrd are expected to be found. */
+               /*
+                * These are the location in the Linux boot header where the
+                * start and size of the initrd are expected to be found.
+                */
                boot->hdr.ramdisk_image = mem - initrd_size;
                boot->hdr.ramdisk_size = initrd_size;
                /* The bootloader type 0xFF means "unknown"; that's OK. */
                boot->hdr.type_of_loader = 0xFF;
        }
 
-       /* The Linux boot header contains an "E820" memory map: ours is a
-        * simple, single region. */
+       /*
+        * The Linux boot header contains an "E820" memory map: ours is a
+        * simple, single region.
+        */
        boot->e820_entries = 1;
        boot->e820_map[0] = ((struct e820entry) { 0, mem, E820_RAM });
-       /* The boot header contains a command line pointer: we put the command
-        * line after the boot header. */
+       /*
+        * The boot header contains a command line pointer: we put the command
+        * line after the boot header.
+        */
        boot->hdr.cmd_line_ptr = to_guest_phys(boot + 1);
        /* We use a simple helper to copy the arguments separated by spaces. */
        concat((char *)(boot + 1), argv+optind+2);
@@ -1760,11 +2003,13 @@ int main(int argc, char *argv[])
        /* Tell the entry path not to try to reload segment registers. */
        boot->hdr.loadflags |= KEEP_SEGMENTS;
 
-       /* We tell the kernel to initialize the Guest: this returns the open
-        * /dev/lguest file descriptor. */
+       /*
+        * We tell the kernel to initialize the Guest: this returns the open
+        * /dev/lguest file descriptor.
+        */
        tell_kernel(start);
 
-       /* Ensure that we terminate if a child dies. */
+       /* Ensure that we terminate if a device-servicing child dies. */
        signal(SIGCHLD, kill_launcher);
 
        /* If we exit via err(), this kills all the threads, restores tty. */
index d0777a1200e1a3a3c224db65cac7fe0d866ea44f..8f339428fdf441d40bb653a226dc12fe9baea928 100644 (file)
@@ -1,7 +1,7 @@
 This is the 6pack-mini-HOWTO, written by
 
 Andreas Könsgen DG3KQ
-Internet: ajk@iehk.rwth-aachen.de
+Internet: ajk@comnets.uni-bremen.de
 AMPR-net: dg3kq@db0pra.ampr.org
 AX.25:    dg3kq@db0ach.#nrw.deu.eu
 
index 1df7f9cdab0576227671703c6fec1fc780ec596b..86eabe6c3419fd4f26aba47a090ecc1caff9a1fd 100644 (file)
@@ -73,7 +73,7 @@ The remaining CPU time will be used for user input and other tasks. Because
 realtime tasks have explicitly allocated the CPU time they need to perform
 their tasks, buffer underruns in the graphics or audio can be eliminated.
 
-NOTE: the above example is not fully implemented as of yet (2.6.25). We still
+NOTE: the above example is not fully implemented yet. We still
 lack an EDF scheduler to make non-uniform periods usable.
 
 
@@ -140,14 +140,15 @@ The other option is:
 
 .o CONFIG_CGROUP_SCHED (aka "Basis for grouping tasks" = "Control groups")
 
-This uses the /cgroup virtual file system and "/cgroup/<cgroup>/cpu.rt_runtime_us"
-to control the CPU time reserved for each control group instead.
+This uses the /cgroup virtual file system and
+"/cgroup/<cgroup>/cpu.rt_runtime_us" to control the CPU time reserved for each
+control group instead.
 
 For more information on working with control groups, you should read
 Documentation/cgroups/cgroups.txt as well.
 
-Group settings are checked against the following limits in order to keep the configuration
-schedulable:
+Group settings are checked against the following limits in order to keep the
+configuration schedulable:
 
    \Sum_{i} runtime_{i} / global_period <= global_runtime / global_period
 
@@ -189,7 +190,7 @@ Implementing SCHED_EDF might take a while to complete. Priority Inheritance is
 the biggest challenge as the current linux PI infrastructure is geared towards
 the limited static priority levels 0-99. With deadline scheduling you need to
 do deadline inheritance (since priority is inversely proportional to the
-deadline delta (deadline - now).
+deadline delta (deadline - now)).
 
 This means the whole PI machinery will have to be reworked - and that is one of
 the most complex pieces of code we have.
index 381908d8ca4231dde74f5c138b200782036760c1..719a819f8cc2c0e597e27b2b8bcd7caa17638ea2 100644 (file)
@@ -101,6 +101,8 @@ card*/pcm*/xrun_debug
          bit 0 = Enable XRUN/jiffies debug messages
          bit 1 = Show stack trace at XRUN / jiffies check
          bit 2 = Enable additional jiffies check
+         bit 3 = Log hwptr update at each period interrupt
+         bit 4 = Log hwptr update at each snd_pcm_update_hw_ptr()
 
        When the bit 0 is set, the driver will show the messages to
        kernel log when an xrun is detected.  The debug message is
@@ -117,6 +119,9 @@ card*/pcm*/xrun_debug
        buggy) hardware that doesn't give smooth pointer updates.
        This feature is enabled via the bit 2.
 
+       Bits 3 and 4 are for logging the hwptr records.  Note that
+       these will give flood of kernel messages.
+
 card*/pcm*/sub*/info
        The general information of this PCM sub-stream.
 
index cf42b820ff9d5002fdf8a9cd280731a593544957..d56a017754239137bc875950a1461a76f8994003 100644 (file)
@@ -66,7 +66,8 @@ On all -  write a character to /proc/sysrq-trigger.  e.g.:
 'b'     - Will immediately reboot the system without syncing or unmounting
           your disks.
 
-'c'    - Will perform a kexec reboot in order to take a crashdump.
+'c'    - Will perform a system crash by a NULL pointer dereference.
+          A crashdump will be taken if configured.
 
 'd'    - Shows all locks that are held.
 
@@ -141,8 +142,8 @@ useful when you want to exit a program that will not let you switch consoles.
 re'B'oot is good when you're unable to shut down. But you should also 'S'ync
 and 'U'mount first.
 
-'C'rashdump can be used to manually trigger a crashdump when the system is hung.
-The kernel needs to have been built with CONFIG_KEXEC enabled.
+'C'rash can be used to manually trigger a crashdump when the system is hung.
+Note that this just triggers a crash if there is no dump mechanism available.
 
 'S'ync is great when your system is locked up, it allows you to sync your
 disks and will certainly lessen the chance of data loss and fscking. Note
index 014d255231fc7cea3eb73378788e0ddae551eb88..68c236c018462e2e3d687e4a078c44815786db0d 100644 (file)
@@ -20,7 +20,7 @@
  19 -> EM2860/SAA711X Reference Design          (em2860)
  20 -> AMD ATI TV Wonder HD 600                 (em2880)        [0438:b002]
  21 -> eMPIA Technology, Inc. GrabBeeX+ Video Encoder (em2800)        [eb1a:2801]
- 22 -> Unknown EM2750/EM2751 webcam grabber     (em2750)        [eb1a:2750,eb1a:2751]
+ 22 -> EM2710/EM2750/EM2751 webcam grabber      (em2750)        [eb1a:2750,eb1a:2751]
  23 -> Huaqi DLCW-130                           (em2750)
  24 -> D-Link DUB-T210 TV Tuner                 (em2820/em2840) [2001:f112]
  25 -> Gadmei UTV310                            (em2820/em2840)
index 2bcf78896e225a191cc58c23d8636ad92365ecd7..573f95b588079b6ae1ede70f479cf539e397e2eb 100644 (file)
@@ -44,7 +44,9 @@ zc3xx         0458:7007       Genius VideoCam V2
 zc3xx          0458:700c       Genius VideoCam V3
 zc3xx          0458:700f       Genius VideoCam Web V2
 sonixj         0458:7025       Genius Eye 311Q
+sn9c20x                0458:7029       Genius Look 320s
 sonixj         0458:702e       Genius Slim 310 NB
+sn9c20x                045e:00f4       LifeCam VX-6000 (SN9C20x + OV9650)
 sonixj         045e:00f5       MicroSoft VX3000
 sonixj         045e:00f7       MicroSoft VX1000
 ov519          045e:028c       Micro$oft xbox cam
@@ -282,6 +284,28 @@ sonixj             0c45:613a       Microdia Sonix PC Camera
 sonixj         0c45:613b       Surfer SN-206
 sonixj         0c45:613c       Sonix Pccam168
 sonixj         0c45:6143       Sonix Pccam168
+sn9c20x                0c45:6240       PC Camera (SN9C201 + MT9M001)
+sn9c20x                0c45:6242       PC Camera (SN9C201 + MT9M111)
+sn9c20x                0c45:6248       PC Camera (SN9C201 + OV9655)
+sn9c20x                0c45:624e       PC Camera (SN9C201 + SOI968)
+sn9c20x                0c45:624f       PC Camera (SN9C201 + OV9650)
+sn9c20x                0c45:6251       PC Camera (SN9C201 + OV9650)
+sn9c20x                0c45:6253       PC Camera (SN9C201 + OV9650)
+sn9c20x                0c45:6260       PC Camera (SN9C201 + OV7670)
+sn9c20x                0c45:6270       PC Camera (SN9C201 + MT9V011/MT9V111/MT9V112)
+sn9c20x                0c45:627b       PC Camera (SN9C201 + OV7660)
+sn9c20x                0c45:627c       PC Camera (SN9C201 + HV7131R)
+sn9c20x                0c45:627f       PC Camera (SN9C201 + OV9650)
+sn9c20x                0c45:6280       PC Camera (SN9C202 + MT9M001)
+sn9c20x                0c45:6282       PC Camera (SN9C202 + MT9M111)
+sn9c20x                0c45:6288       PC Camera (SN9C202 + OV9655)
+sn9c20x                0c45:628e       PC Camera (SN9C202 + SOI968)
+sn9c20x                0c45:628f       PC Camera (SN9C202 + OV9650)
+sn9c20x                0c45:62a0       PC Camera (SN9C202 + OV7670)
+sn9c20x                0c45:62b0       PC Camera (SN9C202 + MT9V011/MT9V111/MT9V112)
+sn9c20x                0c45:62b3       PC Camera (SN9C202 + OV9655)
+sn9c20x                0c45:62bb       PC Camera (SN9C202 + OV7660)
+sn9c20x                0c45:62bc       PC Camera (SN9C202 + HV7131R)
 sunplus                0d64:0303       Sunplus FashionCam DXG
 etoms          102c:6151       Qcam Sangha CIF
 etoms          102c:6251       Qcam xxxxxx VGA
@@ -290,6 +314,7 @@ spca561             10fd:7e50       FlyCam Usb 100
 zc3xx          10fd:8050       Typhoon Webshot II USB 300k
 ov534          1415:2000       Sony HD Eye for PS3 (SLEH 00201)
 pac207         145f:013a       Trust WB-1300N
+sn9c20x                145f:013d       Trust WB-3600R
 vc032x         15b8:6001       HP 2.0 Megapixel
 vc032x         15b8:6002       HP 2.0 Megapixel rz406aa
 spca501                1776:501c       Arowana 300K CMOS Camera
@@ -300,4 +325,11 @@ spca500            2899:012c       Toptro Industrial
 spca508                8086:0110       Intel Easy PC Camera
 spca500                8086:0630       Intel Pocket PC Camera
 spca506                99fa:8988       Grandtec V.cap
+sn9c20x                a168:0610       Dino-Lite Digital Microscope (SN9C201 + HV7131R)
+sn9c20x                a168:0611       Dino-Lite Digital Microscope (SN9C201 + HV7131R)
+sn9c20x                a168:0613       Dino-Lite Digital Microscope (SN9C201 + HV7131R)
+sn9c20x                a168:0618       Dino-Lite Digital Microscope (SN9C201 + HV7131R)
+sn9c20x                a168:0614       Dino-Lite Digital Microscope (SN9C201 + MT9M111)
+sn9c20x                a168:0615       Dino-Lite Digital Microscope (SN9C201 + MT9M111)
+sn9c20x                a168:0617       Dino-Lite Digital Microscope (SN9C201 + MT9M111)
 spca561                abcd:cdee       Petcam
index 18c3f0c41c95a034d98efda6cc4f7db905325a4a..b1114cfac6bf22b9d7fc015af9cad2e628b0bbcb 100644 (file)
@@ -73,8 +73,8 @@ Note: For the hard of thinking, this list is meant to remain in alphabetical
 order. If you could add yourselves to it in alphabetical order that would be
 so much easier [Ed]
 
-P: Person
-M: Mail patches to
+P: Person (obsolete)
+M: Mail patches to: FullName <address@domain>
 L: Mailing list that is relevant to this area
 W: Web-page with status/info
 T: SCM tree type and location.  Type is one of: git, hg, quilt, stgit.
@@ -104,88 +104,74 @@ X: Files and directories that are NOT maintained, same rules as F:
    matches all files in and below net excluding net/ipv6/
 
 3C505 NETWORK DRIVER
-P:     Philip Blundell
-M:     philb@gnu.org
+M:     Philip Blundell <philb@gnu.org>
 L:     netdev@vger.kernel.org
 S:     Maintained
 F:     drivers/net/3c505*
 
 3C59X NETWORK DRIVER
-P:     Steffen Klassert
-M:     klassert@mathematik.tu-chemnitz.de
+M:     Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
 L:     netdev@vger.kernel.org
 S:     Maintained
 F:     Documentation/networking/vortex.txt
 F:     drivers/net/3c59x.c
 
 3CR990 NETWORK DRIVER
-P:     David Dillow
-M:     dave@thedillows.org
+M:     David Dillow <dave@thedillows.org>
 L:     netdev@vger.kernel.org
 S:     Maintained
 F:     drivers/net/typhoon*
 
 3W-9XXX SATA-RAID CONTROLLER DRIVER
-P:     Adam Radford
-M:     linuxraid@amcc.com
+M:     Adam Radford <linuxraid@amcc.com>
 L:     linux-scsi@vger.kernel.org
 W:     http://www.amcc.com
 S:     Supported
 F:     drivers/scsi/3w-9xxx*
 
 3W-XXXX ATA-RAID CONTROLLER DRIVER
-P:     Adam Radford
-M:     linuxraid@amcc.com
+M:     Adam Radford <linuxraid@amcc.com>
 L:     linux-scsi@vger.kernel.org
 W:     http://www.amcc.com
 S:     Supported
 F:     drivers/scsi/3w-xxxx*
 
 53C700 AND 53C700-66 SCSI DRIVER
-P:     James E.J. Bottomley
-M:     James.Bottomley@HansenPartnership.com
+M:     "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
 L:     linux-scsi@vger.kernel.org
 S:     Maintained
 F:     drivers/scsi/53c700*
 
 6PACK NETWORK DRIVER FOR AX.25
-P:     Andreas Koensgen
-M:     ajk@iehk.rwth-aachen.de
+M:     Andreas Koensgen <ajk@comnets.uni-bremen.de>
 L:     linux-hams@vger.kernel.org
 S:     Maintained
 F:     drivers/net/hamradio/6pack.c
 
 8169 10/100/1000 GIGABIT ETHERNET DRIVER
-P:     Francois Romieu
-M:     romieu@fr.zoreil.com
+M:     Francois Romieu <romieu@fr.zoreil.com>
 L:     netdev@vger.kernel.org
 S:     Maintained
 F:     drivers/net/r8169.c
 
 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
-P:     Alan Cox
-M:     alan@lxorguk.ukuu.org.uk
 L:     linux-serial@vger.kernel.org
 W:     http://serial.sourceforge.net
-S:     Odd Fixes
+S:     Orphan
 F:     drivers/serial/8250*
 F:     include/linux/serial_8250.h
 
 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
-P:     Paul Gortmaker
-M:     p_gortmaker@yahoo.com
+M:     Paul Gortmaker <p_gortmaker@yahoo.com>
 L:     netdev@vger.kernel.org
 S:     Maintained
 F:     drivers/net/*8390*
 F:     drivers/net/ax88796.c
 
 9P FILE SYSTEM
-P:     Eric Van Hensbergen
-M:     ericvh@gmail.com
-P:     Ron Minnich
-M:     rminnich@sandia.gov
-P:     Latchesar Ionkov
-M:     lucho@ionkov.net
+M:     Eric Van Hensbergen <ericvh@gmail.com>
+M:     Ron Minnich <rminnich@sandia.gov>
+M:     Latchesar Ionkov <lucho@ionkov.net>
 L:     v9fs-developer@lists.sourceforge.net
 W:     http://swik.net/v9fs
 T:     git git://git.kernel.org/pub/scm/linux/kernel/ericvh/v9fs.git
@@ -194,15 +180,13 @@ F:        Documentation/filesystems/9p.txt
 F:     fs/9p/
 
 A2232 SERIAL BOARD DRIVER
-P:     Enver Haase
-M:     A2232@gmx.net
+M:     Enver Haase <A2232@gmx.net>
 L:     linux-m68k@lists.linux-m68k.org
 S:     Maintained
 F:     drivers/char/ser_a2232*
 
 AACRAID SCSI RAID DRIVER
-P:     Adaptec OEM Raid Solutions
-M:     aacraid@adaptec.com
+M:     Adaptec OEM Raid Solutions <aacraid@adaptec.com>
 L:     linux-scsi@vger.kernel.org
 W:     http://www.adaptec.com/
 S:     Supported
@@ -210,44 +194,38 @@ F:        Documentation/scsi/aacraid.txt
 F:     drivers/scsi/aacraid/
 
 ABIT UGURU 1,2 HARDWARE MONITOR DRIVER
-P:     Hans de Goede
-M:     j.w.r.degoede@hhs.nl
+M:     Hans de Goede <j.w.r.degoede@hhs.nl>
 L:     lm-sensors@lm-sensors.org
 S:     Maintained
 F:     drivers/hwmon/abituguru.c
 
 ABIT UGURU 3 HARDWARE MONITOR DRIVER
-P:     Alistair John Strachan
-M:     alistair@devzero.co.uk
+M:     Alistair John Strachan <alistair@devzero.co.uk>
 L:     lm-sensors@lm-sensors.org
 S:     Maintained
 F:     drivers/hwmon/abituguru3.c
 
 ACENIC DRIVER
-P:     Jes Sorensen
-M:     jes@trained-monkey.org
+M:     Jes Sorensen <jes@trained-monkey.org>
 L:     linux-acenic@sunsite.dk
 S:     Maintained
 F:     drivers/net/acenic*
 
 ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
-P: Peter Feuerer
-M: peter@piie.net
-W: http://piie.net/?section=acerhdf
-S: Maintained
-F: drivers/platform/x86/acerhdf.c
+M:     Peter Feuerer <peter@piie.net>
+W:     http://piie.net/?section=acerhdf
+S:     Maintained
+F:     drivers/platform/x86/acerhdf.c
 
 ACER WMI LAPTOP EXTRAS
-P:     Carlos Corbacho
-M:     carlos@strangeworlds.co.uk
+M:     Carlos Corbacho <carlos@strangeworlds.co.uk>
 L:     aceracpi@googlegroups.com (subscribers-only)
 W:     http://code.google.com/p/aceracpi
 S:     Maintained
 F:     drivers/platform/x86/acer-wmi.c
 
 ACPI
-P:     Len Brown
-M:     lenb@kernel.org
+M:     Len Brown <lenb@kernel.org>
 L:     linux-acpi@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
@@ -257,8 +235,7 @@ F:  drivers/pnp/pnpacpi/
 F:     include/linux/acpi.h
 
 ACPI BATTERY DRIVERS
-P:     Alexey Starikovskiy
-M:     astarikovskiy@suse.de
+M:     Alexey Starikovskiy <astarikovskiy@suse.de>
 L:     linux-acpi@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 S:     Supported
@@ -266,80 +243,69 @@ F:        drivers/acpi/battery.c
 F:     drivers/acpi/*sbs*
 
 ACPI EC DRIVER
-P:     Alexey Starikovskiy
-M:     astarikovskiy@suse.de
+M:     Alexey Starikovskiy <astarikovskiy@suse.de>
 L:     linux-acpi@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 S:     Supported
 F:     drivers/acpi/ec.c
 
 ACPI FAN DRIVER
-P:     Zhang Rui
-M:     rui.zhang@intel.com
+M:     Zhang Rui <rui.zhang@intel.com>
 L:     linux-acpi@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 S:     Supported
 F:     drivers/acpi/fan.c
 
 ACPI PCI HOTPLUG DRIVER
-P:     Kristen Carlson Accardi
-M:     kristen.c.accardi@intel.com
+M:     Kristen Carlson Accardi <kristen.c.accardi@intel.com>
 L:     linux-pci@vger.kernel.org
 S:     Supported
 F:     drivers/pci/hotplug/acpi*
 
 ACPI THERMAL DRIVER
-P:     Zhang Rui
-M:     rui.zhang@intel.com
+M:     Zhang Rui <rui.zhang@intel.com>
 L:     linux-acpi@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 S:     Supported
 F:     drivers/acpi/*thermal*
 
 ACPI VIDEO DRIVER
-P:     Zhang Rui
-M:     rui.zhang@intel.com
+M:     Zhang Rui <rui.zhang@intel.com>
 L:     linux-acpi@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 S:     Supported
 F:     drivers/acpi/video.c
 
 ACPI WMI DRIVER
-P:     Carlos Corbacho
-M:     carlos@strangeworlds.co.uk
+M:     Carlos Corbacho <carlos@strangeworlds.co.uk>
 L:     linux-acpi@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 S:     Maintained
 F:     drivers/platform/x86/wmi.c
 
 AD1889 ALSA SOUND DRIVER
-P:     Kyle McMartin
-M:     kyle@mcmartin.ca
-P:     Thibaut Varene
-M:     T-Bone@parisc-linux.org
+M:     Kyle McMartin <kyle@mcmartin.ca>
+M:     Thibaut Varene <T-Bone@parisc-linux.org>
 W:     http://wiki.parisc-linux.org/AD1889
 L:     linux-parisc@vger.kernel.org
 S:     Maintained
 F:     sound/pci/ad1889.*
 
 ADM1025 HARDWARE MONITOR DRIVER
-P:     Jean Delvare
-M:     khali@linux-fr.org
+M:     Jean Delvare <khali@linux-fr.org>
 L:     lm-sensors@lm-sensors.org
 S:     Maintained
 F:     Documentation/hwmon/adm1025
 F:     drivers/hwmon/adm1025.c
 
 ADM1029 HARDWARE MONITOR DRIVER
-P:     Corentin Labbe
-M:     corentin.labbe@geomatys.fr
+M:     Corentin Labbe <corentin.labbe@geomatys.fr>
 L:     lm-sensors@lm-sensors.org
 S:     Maintained
 F:     drivers/hwmon/adm1029.c
 
 ADM8211 WIRELESS DRIVER
-P:     Michael Wu
-M:     flamingice@sourmilk.net
+M:     Michael Wu <flamingice@sourmilk.net>
 L:     linux-wireless@vger.kernel.org
 W:     http://linuxwireless.org/
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
@@ -347,35 +313,30 @@ S:        Maintained
 F:     drivers/net/wireless/adm8211.*
 
 ADT746X FAN DRIVER
-P:     Colin Leroy
-M:     colin@colino.net
+M:     Colin Leroy <colin@colino.net>
 S:     Maintained
 F:     drivers/macintosh/therm_adt746x.c
 
 ADVANSYS SCSI DRIVER
-P:     Matthew Wilcox
-M:     matthew@wil.cx
+M:     Matthew Wilcox <matthew@wil.cx>
 L:     linux-scsi@vger.kernel.org
 S:     Maintained
 F:     Documentation/scsi/advansys.txt
 F:     drivers/scsi/advansys.c
 
 AEDSP16 DRIVER
-P:     Riccardo Facchetti
-M:     fizban@tin.it
+M:     Riccardo Facchetti <fizban@tin.it>
 S:     Maintained
 F:     sound/oss/aedsp16.c
 
 AFFS FILE SYSTEM
-P:     Roman Zippel
-M:     zippel@linux-m68k.org
+M:     Roman Zippel <zippel@linux-m68k.org>
 S:     Maintained
 F:     Documentation/filesystems/affs.txt
 F:     fs/affs/
 
 AFS FILESYSTEM & AF_RXRPC SOCKET DOMAIN
-P:     David Howells
-M:     dhowells@redhat.com
+M:     David Howells <dhowells@redhat.com>
 L:     linux-afs@lists.infradead.org
 S:     Supported
 F:     fs/afs/
@@ -383,40 +344,35 @@ F:        include/net/af_rxrpc.h
 F:     net/rxrpc/af_rxrpc.c
 
 AGPGART DRIVER
-P:     David Airlie
-M:     airlied@linux.ie
+M:     David Airlie <airlied@linux.ie>
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
 S:     Maintained
 F:     drivers/char/agp/
 F:     include/linux/agp*
 
 AHA152X SCSI DRIVER
-P:     Juergen E. Fischer
-M:     fischer@norbit.de
+M:     "Juergen E. Fischer" <fischer@norbit.de>
 L:     linux-scsi@vger.kernel.org
 S:     Maintained
 F:     drivers/scsi/aha152x*
 F:     drivers/scsi/pcmcia/aha152x*
 
 AIC7XXX / AIC79XX SCSI DRIVER
-P:     Hannes Reinecke
-M:     hare@suse.de
+M:     Hannes Reinecke <hare@suse.de>
 L:     linux-scsi@vger.kernel.org
 S:     Maintained
 F:     drivers/scsi/aic7xxx/
 F:     drivers/scsi/aic7xxx_old/
 
 AIO
-P:     Benjamin LaHaise
-M:     bcrl@kvack.org
+M:     Benjamin LaHaise <bcrl@kvack.org>
 L:     linux-aio@kvack.org
 S:     Supported
 F:     fs/aio.c
 F:     include/linux/*aio*.h
 
 ALCATEL SPEEDTOUCH USB DRIVER
-P:     Duncan Sands
-M:     duncan.sands@free.fr
+M:     Duncan Sands <duncan.sands@free.fr>
 L:     linux-usb@vger.kernel.org
 W:     http://www.linux-usb.org/SpeedTouch/
 S:     Maintained
@@ -424,32 +380,27 @@ F:        drivers/usb/atm/speedtch.c
 F:     drivers/usb/atm/usbatm.c
 
 ALCHEMY AU1XX0 MMC DRIVER
-P:     Manuel Lauss
-M:     manuel.lauss@gmail.com
+M:     Manuel Lauss <manuel.lauss@gmail.com>
 S:     Maintained
 F:     drivers/mmc/host/au1xmmc.c
 
 ALI1563 I2C DRIVER
-P:     Rudolf Marek
-M:     r.marek@assembler.cz
+M:     Rudolf Marek <r.marek@assembler.cz>
 L:     linux-i2c@vger.kernel.org
 S:     Maintained
 F:     Documentation/i2c/busses/i2c-ali1563
 F:     drivers/i2c/busses/i2c-ali1563.c
 
 ALPHA PORT
-P:     Richard Henderson
-M:     rth@twiddle.net
+M:     Richard Henderson <rth@twiddle.net>
 S:     Odd Fixes for 2.4; Maintained for 2.6.
-P:     Ivan Kokshaysky
-M:     ink@jurassic.park.msu.ru
+M:     Ivan Kokshaysky <ink@jurassic.park.msu.ru>
 S:     Maintained for 2.4; PCI support for 2.6.
 L:     linux-alpha@vger.kernel.org
 F:     arch/alpha/
 
 AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER
-P:     Thomas Dahlmann
-M:     dahlmann.thomas@arcor.de
+M:     Thomas Dahlmann <dahlmann.thomas@arcor.de>
 L:     linux-geode@lists.infradead.org (moderated for non-subscribers)
 S:     Supported
 F:     drivers/usb/gadget/amd5536udc.*
@@ -466,8 +417,7 @@ F:  drivers/video/geode/
 F:     arch/x86/include/asm/geode.h
 
 AMD IOMMU (AMD-VI)
-P:     Joerg Roedel
-M:     joerg.roedel@amd.com
+M:     Joerg Roedel <joerg.roedel@amd.com>
 L:     iommu@lists.linux-foundation.org
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git
 S:     Supported
@@ -475,40 +425,33 @@ F:        arch/x86/kernel/amd_iommu*.c
 F:     arch/x86/include/asm/amd_iommu*.h
 
 AMD MICROCODE UPDATE SUPPORT
-P:     Andreas Herrmann
-M:     andreas.herrmann3@amd.com
+M:     Andreas Herrmann <andreas.herrmann3@amd.com>
 L:     amd64-microcode@amd64.org
 S:     Supported
 F:     arch/x86/kernel/microcode_amd.c
 
 AMS (Apple Motion Sensor) DRIVER
-P:     Stelian Pop
-M:     stelian@popies.net
-P:     Michael Hanselmann
-M:     linux-kernel@hansmi.ch
+M:     Stelian Pop <stelian@popies.net>
+M:     Michael Hanselmann <linux-kernel@hansmi.ch>
 S:     Supported
 F:     drivers/hwmon/ams/
 
 AMSO1100 RNIC DRIVER
-P:     Tom Tucker
-M:     tom@opengridcomputing.com
-P:     Steve Wise
-M:     swise@opengridcomputing.com
+M:     Tom Tucker <tom@opengridcomputing.com>
+M:     Steve Wise <swise@opengridcomputing.com>
 L:     general@lists.openfabrics.org
 S:     Maintained
 F:     drivers/infiniband/hw/amso1100/
 
 AOA (Apple Onboard Audio) ALSA DRIVER
-P:     Johannes Berg
-M:     johannes@sipsolutions.net
+M:     Johannes Berg <johannes@sipsolutions.net>
 L:     linuxppc-dev@ozlabs.org
 L:     alsa-devel@alsa-project.org (moderated for non-subscribers)
 S:     Maintained
 F:     sound/aoa/
 
 APM DRIVER
-P:     Stephen Rothwell
-M:     sfr@canb.auug.org.au
+M:     Stephen Rothwell <sfr@canb.auug.org.au>
 L:     linux-laptop@vger.kernel.org
 W:     http://www.canb.auug.org.au/~sfr/
 S:     Supported
@@ -516,51 +459,44 @@ F:        arch/x86/kernel/apm_32.c
 F:     include/linux/apm_bios.h
 
 APPLE BCM5974 MULTITOUCH DRIVER
-P:     Henrik Rydberg
-M:     rydberg@euromail.se
+M:     Henrik Rydberg <rydberg@euromail.se>
 L:     linux-input@vger.kernel.org
 S:     Maintained
 F:     drivers/input/mouse/bcm5974.c
 
 APPLE SMC DRIVER
-P:     Nicolas Boichat
-M:     nicolas@boichat.ch
+M:     Nicolas Boichat <nicolas@boichat.ch>
 L:     mactel-linux-devel@lists.sourceforge.net
 S:     Maintained
 F:     drivers/hwmon/applesmc.c
 
 APPLETALK NETWORK LAYER
-P:     Arnaldo Carvalho de Melo
-M:     acme@ghostprotocols.net
+M:     Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
 S:     Maintained
 F:     drivers/net/appletalk/
 F:     net/appletalk/
 
 APPLETOUCH TOUCHPAD DRIVER
-P:     Johannes Berg
-M:     johannes@sipsolutions.net
+M:     Johannes Berg <johannes@sipsolutions.net>
 L:     linux-input@vger.kernel.org
 S:     Maintained
 F:     Documentation/input/appletouch.txt
 F:     drivers/input/mouse/appletouch.c
 
 ARC FRAMEBUFFER DRIVER
-P:     Jaya Kumar
-M:     jayalk@intworks.biz
+M:     Jaya Kumar <jayalk@intworks.biz>
 S:     Maintained
 F:     drivers/video/arcfb.c
 F:     drivers/video/fb_defio.c
 
 ARM MFM AND FLOPPY DRIVERS
-P:     Ian Molton
-M:     spyro@f2s.com
+M:     Ian Molton <spyro@f2s.com>
 S:     Maintained
 F:     arch/arm/lib/floppydma.S
 F:     arch/arm/include/asm/floppy.h
 
 ARM PORT
-P:     Russell King
-M:     linux@arm.linux.org.uk
+M:     Russell King <linux@arm.linux.org.uk>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.arm.linux.org.uk/
 S:     Maintained
@@ -571,79 +507,67 @@ S:        Orphan
 F:     drivers/mmc/host/mmci.*
 
 ARM/ADI ROADRUNNER MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 F:     arch/arm/mach-ixp23xx/
 F:     arch/arm/mach-ixp23xx/include/mach/
 
 ARM/ADS SPHERE MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/AFEB9260 MACHINE SUPPORT
-P:     Sergey Lapin
-M:     slapin@ossfans.org
+M:     Sergey Lapin <slapin@ossfans.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/AJECO 1ARM MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/ATMEL AT91RM9200 ARM ARCHITECTURE
-P:     Andrew Victor
-M:     linux@maxim.org.za
+M:     Andrew Victor <linux@maxim.org.za>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://maxim.org.za/at91_26.html
 S:     Maintained
 
 ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/CIRRUS LOGIC EDB9315A MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/CLKDEV SUPPORT
-P:     Russell King
-M:     linux@arm.linux.org.uk
+M:     Russell King <linux@arm.linux.org.uk>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 F:     arch/arm/common/clkdev.c
 F:     arch/arm/include/asm/clkdev.h
 
 ARM/COMPULAB CM-X270/EM-X270 and CM-X300 MACHINE SUPPORT
-P:     Mike Rapoport
-M:     mike@compulab.co.il
+M:     Mike Rapoport <mike@compulab.co.il>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/CORGI MACHINE SUPPORT
-P:     Richard Purdie
-M:     rpurdie@rpsys.net
+M:     Richard Purdie <rpurdie@rpsys.net>
 S:     Maintained
 
 ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
-P:     Paulius Zaleckas
-M:     paulius.zaleckas@teltonika.lt
+M:     Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 T:     git git://gitorious.org/linux-gemini/mainline.git
 S:     Maintained
 F:     arch/arm/mach-gemini/
 
 ARM/EBSA110 MACHINE SUPPORT
-P:     Russell King
-M:     linux@arm.linux.org.uk
+M:     Russell King <linux@arm.linux.org.uk>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.arm.linux.org.uk/
 S:     Maintained
@@ -651,12 +575,9 @@ F: arch/arm/mach-ebsa110/
 F:     drivers/net/arm/am79c961a.*
 
 ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
-P:     Daniel Ribeiro
-M:     drwyrm@gmail.com
-P:     Stefan Schmidt
-M:     stefan@openezx.org
-P:     Harald Welte
-M:     laforge@openezx.org
+M:     Daniel Ribeiro <drwyrm@gmail.com>
+M:     Stefan Schmidt <stefan@openezx.org>
+M:     Harald Welte <laforge@openezx.org>
 L:     openezx-devel@lists.openezx.org (subscribers-only)
 W:     http://www.openezx.org/
 S:     Maintained
@@ -664,15 +585,13 @@ T:        topgit git://git.openezx.org/openezx.git
 F:     arch/arm/mach-pxa/ezx.c
 
 ARM/FARADAY FA526 PORT
-P:     Paulius Zaleckas
-M:     paulius.zaleckas@teltonika.lt
+M:     Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 F:     arch/arm/mm/*-fa*
 
 ARM/FOOTBRIDGE ARCHITECTURE
-P:     Russell King
-M:     linux@arm.linux.org.uk
+M:     Russell King <linux@arm.linux.org.uk>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.arm.linux.org.uk/
 S:     Maintained
@@ -680,175 +599,146 @@ F:      arch/arm/include/asm/hardware/dec21285.h
 F:     arch/arm/mach-footbridge/
 
 ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
-P:     Sascha Hauer
-M:     kernel@pengutronix.de
+M:     Sascha Hauer <kernel@pengutronix.de>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/GUMSTIX MACHINE SUPPORT
-P:     Steve Sakoman
-M:     sakoman@gmail.com
+M:     Steve Sakoman <sakoman@gmail.com>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT
-P:     Philipp Zabel
-M:     philipp.zabel@gmail.com
+M:     Philipp Zabel <philipp.zabel@gmail.com>
 S:     Maintained
 F:     arch/arm/mach-pxa/hx4700.c
 F:     arch/arm/mach-pxa/include/mach/hx4700.h
 
 ARM/HP JORNADA 7XX MACHINE SUPPORT
-P:     Kristoffer Ericson
-M:     kristoffer.ericson@gmail.com
+M:     Kristoffer Ericson <kristoffer.ericson@gmail.com>
 W:     www.jlime.com
 S:     Maintained
+T:     git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
+F:     arch/arm/mach-sa1100/jornada720.c
+F:     arch/arm/mach-sa1100/include/mach/jornada720.h
 
 ARM/INTEL IOP32X ARM ARCHITECTURE
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
-P:     Dan Williams
-M:     dan.j.williams@intel.com
+M:     Lennert Buytenhek <kernel@wantstofly.org>
+M:     Dan Williams <dan.j.williams@intel.com>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Supported
 
 ARM/INTEL IOP33X ARM ARCHITECTURE
-P:     Dan Williams
-M:     dan.j.williams@intel.com
+M:     Dan Williams <dan.j.williams@intel.com>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Supported
 
 ARM/INTEL IOP13XX ARM ARCHITECTURE
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
-P:     Dan Williams
-M:     dan.j.williams@intel.com
+M:     Lennert Buytenhek <kernel@wantstofly.org>
+M:     Dan Williams <dan.j.williams@intel.com>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Supported
 
 ARM/INTEL IQ81342EX MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
-P:     Dan Williams
-M:     dan.j.williams@intel.com
+M:     Lennert Buytenhek <kernel@wantstofly.org>
+M:     Dan Williams <dan.j.williams@intel.com>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Supported
 
 ARM/INTEL IXP2000 ARM ARCHITECTURE
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/INTEL IXDP2850 MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/INTEL IXP23XX ARM ARCHITECTURE
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/INTEL XSC3 (MANZANO) ARM CORE
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
-P:     Dan Williams
-M:     dan.j.williams@intel.com
+M:     Lennert Buytenhek <kernel@wantstofly.org>
+M:     Dan Williams <dan.j.williams@intel.com>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Supported
 
 ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/LOGICPD PXA270 MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/MAGICIAN MACHINE SUPPORT
-P:     Philipp Zabel
-M:     philipp.zabel@gmail.com
+M:     Philipp Zabel <philipp.zabel@gmail.com>
 S:     Maintained
 
 ARM/MIOA701 MACHINE SUPPORT
-P:     Robert Jarzmik
-M:     robert.jarzmik@free.fr
+M:     Robert Jarzmik <robert.jarzmik@free.fr>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 F:     arch/arm/mach-pxa/mioa701.c
 S:     Maintained
 
 ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT
-P:     Michael Petchkovsky
-M:     mkpetch@internode.on.net
+M:     Michael Petchkovsky <mkpetch@internode.on.net>
 S:     Maintained
 
 ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
-P:     Nelson Castillo
-M:     arhuaco@freaks-unidos.net
+M:     Nelson Castillo <arhuaco@freaks-unidos.net>
 L:     openmoko-kernel@lists.openmoko.org (subscribers-only)
 W:     http://wiki.openmoko.org/wiki/Neo_FreeRunner
 S:     Supported
 
 ARM/TOSA MACHINE SUPPORT
-P:     Dmitry Eremin-Solenikov
-M:     dbaryshkov@gmail.com
-P:     Dirk Opfer
-M:     dirk@opfer-online.de
+M:     Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+M:     Dirk Opfer <dirk@opfer-online.de>
 S:     Maintained
 
 ARM/PALMTX,PALMT5,PALMLD,PALMTE2 SUPPORT
-P:     Marek Vasut
-M:     marek.vasut@gmail.com
+M:     Marek Vasut <marek.vasut@gmail.com>
 W:     http://hackndev.com
 S:     Maintained
 
 ARM/PALM TREO 680 SUPPORT
-P:     Tomas Cech
-M:     sleep_walker@suse.cz
+M:     Tomas Cech <sleep_walker@suse.cz>
 W:     http://hackndev.com
 S:     Maintained
 
 ARM/PALMZ72 SUPPORT
-P:     Sergey Lapin
-M:     slapin@ossfans.org
+M:     Sergey Lapin <slapin@ossfans.org>
 W:     http://hackndev.com
 S:     Maintained
 
 ARM/PLEB SUPPORT
-P:     Peter Chubb
-M:     pleb@gelato.unsw.edu.au
+M:     Peter Chubb <pleb@gelato.unsw.edu.au>
 W:     http://www.disy.cse.unsw.edu.au/Hardware/PLEB
 S:     Maintained
 
 ARM/PT DIGITAL BOARD PORT
-P:     Stefan Eletzhofer
-M:     stefan.eletzhofer@eletztrick.de
+M:     Stefan Eletzhofer <stefan.eletzhofer@eletztrick.de>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.arm.linux.org.uk/
 S:     Maintained
 
 ARM/RADISYS ENP2611 MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/RISCPC ARCHITECTURE
-P:     Russell King
-M:     linux@arm.linux.org.uk
+M:     Russell King <linux@arm.linux.org.uk>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.arm.linux.org.uk/
 S:     Maintained
@@ -862,14 +752,12 @@ F:        drivers/net/arm/ether*
 F:     drivers/scsi/arm/
 
 ARM/SHARK MACHINE SUPPORT
-P:     Alexander Schulz
-M:     alex@shark-linux.de
+M:     Alexander Schulz <alex@shark-linux.de>
 W:     http://www.shark-linux.de/shark.html
 S:     Maintained
 
 ARM/SAMSUNG ARM ARCHITECTURES
-P:     Ben Dooks
-M:     ben-linux@fluff.org
+M:     Ben Dooks <ben-linux@fluff.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.fluff.org/ben/linux/
 S:     Maintained
@@ -877,91 +765,73 @@ F:        arch/arm/plat-s3c/
 F:     arch/arm/plat-s3c24xx/
 
 ARM/S3C2410 ARM ARCHITECTURE
-P:     Ben Dooks
-M:     ben-linux@fluff.org
+M:     Ben Dooks <ben-linux@fluff.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.fluff.org/ben/linux/
 S:     Maintained
 F:     arch/arm/mach-s3c2410/
 
 ARM/S3C2440 ARM ARCHITECTURE
-P:     Ben Dooks
-M:     ben-linux@fluff.org
+M:     Ben Dooks <ben-linux@fluff.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.fluff.org/ben/linux/
 S:     Maintained
 F:     arch/arm/mach-s3c2440/
 
 ARM/S3C2442 ARM ARCHITECTURE
-P:     Ben Dooks
-M:     ben-linux@fluff.org
+M:     Ben Dooks <ben-linux@fluff.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.fluff.org/ben/linux/
 S:     Maintained
 F:     arch/arm/mach-s3c2442/
 
 ARM/S3C2443 ARM ARCHITECTURE
-P:     Ben Dooks
-M:     ben-linux@fluff.org
+M:     Ben Dooks <ben-linux@fluff.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.fluff.org/ben/linux/
 S:     Maintained
 F:     arch/arm/mach-s3c2443/
 
 ARM/S3C6400 ARM ARCHITECTURE
-P:     Ben Dooks
-M:     ben-linux@fluff.org
+M:     Ben Dooks <ben-linux@fluff.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.fluff.org/ben/linux/
 S:     Maintained
 F:     arch/arm/mach-s3c6400/
 
 ARM/S3C6410 ARM ARCHITECTURE
-P:     Ben Dooks
-M:     ben-linux@fluff.org
+M:     Ben Dooks <ben-linux@fluff.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.fluff.org/ben/linux/
 S:     Maintained
 F:     arch/arm/mach-s3c6410/
 
 ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/THECUS N2100 MACHINE SUPPORT
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 S:     Maintained
 
 ARM/NUVOTON W90X900 ARM ARCHITECTURE
-P:     Wan ZongShun
-M:     mcuos.com@gmail.com
+M:     Wan ZongShun <mcuos.com@gmail.com>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.mcuos.com
 S:     Maintained
 
 ARM/VFP SUPPORT
-P:     Russell King
-M:     linux@arm.linux.org.uk
+M:     Russell King <linux@arm.linux.org.uk>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.arm.linux.org.uk/
 S:     Maintained
 F:     arch/arm/vfp/
 
-ARPD SUPPORT
-P:     Jonathan Layes
-L:     netdev@vger.kernel.org
-S:     Maintained
-F:     net/ipv4/arp.c
-
 ASUS ACPI EXTRAS DRIVER
-P:     Corentin Chary
-M:     corentincj@iksaif.net
-P:     Karol Kozimor
-M:     sziwan@users.sourceforge.net
+M:     Corentin Chary <corentincj@iksaif.net>
+M:     Karol Kozimor <sziwan@users.sourceforge.net>
 L:     acpi4asus-user@lists.sourceforge.net
 W:     http://acpi4asus.sf.net
 S:     Maintained
@@ -969,25 +839,21 @@ F:        arch/x86/kernel/acpi/boot.c
 F:     drivers/platform/x86/asus_acpi.c
 
 ASUS ASB100 HARDWARE MONITOR DRIVER
-P:     Mark M. Hoffman
-M:     mhoffman@lightlink.com
+M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
 L:     lm-sensors@lm-sensors.org
 S:     Maintained
 F:     drivers/hwmon/asb100.c
 
 ASUS LAPTOP EXTRAS DRIVER
-P:     Corentin Chary
-M:     corentincj@iksaif.net
+M:     Corentin Chary <corentincj@iksaif.net>
 L:     acpi4asus-user@lists.sourceforge.net
 W:     http://acpi4asus.sf.net
 S:     Maintained
 F:     drivers/platform/x86/asus-laptop.c
 
 ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API
-P:     Dan Williams
-M:     dan.j.williams@intel.com
-P:     Maciej Sosnowski
-M:     maciej.sosnowski@intel.com
+M:     Dan Williams <dan.j.williams@intel.com>
+M:     Maciej Sosnowski <maciej.sosnowski@intel.com>
 W:     http://sourceforge.net/projects/xscaleiop
 S:     Supported
 F:     Documentation/crypto/async-tx-api.txt
@@ -997,64 +863,49 @@ F:        include/linux/dmaengine.h
 F:     include/linux/async_tx.h
 
 ATA OVER ETHERNET (AOE) DRIVER
-P:     Ed L. Cashin
-M:     ecashin@coraid.com
+M:     "Ed L. Cashin" <ecashin@coraid.com>
 W:     http://www.coraid.com/support/linux
 S:     Supported
 F:     Documentation/aoe/
 F:     drivers/block/aoe/
 
 ATHEROS ATH5K WIRELESS DRIVER
-P:     Jiri Slaby
-M:     jirislaby@gmail.com
-P:     Nick Kossifidis
-M:     mickflemm@gmail.com
-P:     Luis R. Rodriguez
-M:     lrodriguez@atheros.com
-P:     Bob Copeland
-M:     me@bobcopeland.com
+M:     Jiri Slaby <jirislaby@gmail.com>
+M:     Nick Kossifidis <mickflemm@gmail.com>
+M:     "Luis R. Rodriguez" <lrodriguez@atheros.com>
+M:     Bob Copeland <me@bobcopeland.com>
 L:     linux-wireless@vger.kernel.org
 L:     ath5k-devel@lists.ath5k.org
 S:     Maintained
 F:     drivers/net/wireless/ath/ath5k/
 
 ATHEROS ATH9K WIRELESS DRIVER
-P:     Luis R. Rodriguez
-M:     lrodriguez@atheros.com
-P:     Jouni Malinen
-M:     jmalinen@atheros.com
-P:     Sujith Manoharan
-M:     Sujith.Manoharan@atheros.com
-P:     Vasanthakumar Thiagarajan
-M:     vasanth@atheros.com
-P:     Senthil Balasubramanian
-M:     senthilkumar@atheros.com
+M:     "Luis R. Rodriguez" <lrodriguez@atheros.com>
+M:     Jouni Malinen <jmalinen@atheros.com>
+M:     Sujith Manoharan <Sujith.Manoharan@atheros.com>
+M:     Vasanthakumar Thiagarajan <vasanth@atheros.com>
+M:     Senthil Balasubramanian <senthilkumar@atheros.com>
 L:     linux-wireless@vger.kernel.org
 L:     ath9k-devel@lists.ath9k.org
 S:     Supported
 F:     drivers/net/wireless/ath/ath9k/
 
 ATHEROS AR9170 WIRELESS DRIVER
-P:     Christian Lamparter
-M:     chunkeey@web.de
+M:     Christian Lamparter <chunkeey@web.de>
 L:     linux-wireless@vger.kernel.org
 W:     http://wireless.kernel.org/en/users/Drivers/ar9170
 S:     Maintained
 F:     drivers/net/wireless/ath/ar9170/
 
 ATI_REMOTE2 DRIVER
-P:     Ville Syrjala
-M:     syrjala@sci.fi
+M:     Ville Syrjala <syrjala@sci.fi>
 S:     Maintained
 F:     drivers/input/misc/ati_remote2.c
 
 ATLX ETHERNET DRIVERS
-P:     Jay Cliburn
-M:     jcliburn@gmail.com
-P:     Chris Snook
-M:     csnook@redhat.com
-P:     Jie Yang
-M:     jie.yang@atheros.com
+M:     Jay Cliburn <jcliburn@gmail.com>
+M:     Chris Snook <csnook@redhat.com>
+M:     Jie Yang <jie.yang@atheros.com>
 L:     atl1-devel@lists.sourceforge.net
 W:     http://sourceforge.net/projects/atl1
 W:     http://atl1.sourceforge.net
@@ -1062,8 +913,7 @@ S: Maintained
 F:     drivers/net/atlx/
 
 ATM
-P:     Chas Williams
-M:     chas@cmf.nrl.navy.mil
+M:     Chas Williams <chas@cmf.nrl.navy.mil>
 L:     linux-atm-general@lists.sourceforge.net (subscribers-only)
 L:     netdev@vger.kernel.org
 W:     http://linux-atm.sourceforge.net
@@ -1072,8 +922,7 @@ F: drivers/atm/
 F:     include/linux/atm*
 
 ATMEL AT91 MCI DRIVER
-P:     Nicolas Ferre
-M:     nicolas.ferre@atmel.com
+M:     Nicolas Ferre <nicolas.ferre@atmel.com>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.atmel.com/products/AT91/
 W:     http://www.at91.com/
@@ -1081,49 +930,42 @@ S:       Maintained
 F:     drivers/mmc/host/at91_mci.c
 
 ATMEL AT91 / AT32 MCI DRIVER
-P:     Nicolas Ferre
-M:     nicolas.ferre@atmel.com
+M:     Nicolas Ferre <nicolas.ferre@atmel.com>
 S:     Maintained
 F:     drivers/mmc/host/atmel-mci.c
 F:     drivers/mmc/host/atmel-mci-regs.h
 
 ATMEL AT91 / AT32 SERIAL DRIVER
-P:     Haavard Skinnemoen
-M:     hskinnemoen@atmel.com
+M:     Haavard Skinnemoen <hskinnemoen@atmel.com>
 S:     Supported
 F:     drivers/serial/atmel_serial.c
 
 ATMEL LCDFB DRIVER
-P:     Nicolas Ferre
-M:     nicolas.ferre@atmel.com
+M:     Nicolas Ferre <nicolas.ferre@atmel.com>
 L:     linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
 S:     Maintained
 F:     drivers/video/atmel_lcdfb.c
 F:     include/video/atmel_lcdc.h
 
 ATMEL MACB ETHERNET DRIVER
-P:     Haavard Skinnemoen
-M:     hskinnemoen@atmel.com
+M:     Haavard Skinnemoen <hskinnemoen@atmel.com>
 S:     Supported
 F:     drivers/net/macb.*
 
 ATMEL SPI DRIVER
-P:     Haavard Skinnemoen
-M:     hskinnemoen@atmel.com
+M:     Haavard Skinnemoen <hskinnemoen@atmel.com>
 S:     Supported
 F:     drivers/spi/atmel_spi.*
 
 ATMEL USBA UDC DRIVER
-P:     Haavard Skinnemoen
-M:     hskinnemoen@atmel.com
+M:     Haavard Skinnemoen <hskinnemoen@atmel.com>
 L:     kernel@avr32linux.org
 W:     http://avr32linux.org/twiki/bin/view/Main/AtmelUsbDeviceDriver
 S:     Supported
 F:     drivers/usb/gadget/atmel_usba_udc.*
 
 ATMEL WIRELESS DRIVER
-P:     Simon Kelley
-M:     simon@thekelleys.org.uk
+M:     Simon Kelley <simon@thekelleys.org.uk>
 L:     linux-wireless@vger.kernel.org
 W:     http://www.thekelleys.org.uk/atmel
 W:     http://atmelwlandriver.sourceforge.net/
@@ -1131,10 +973,8 @@ S:        Maintained
 F:     drivers/net/wireless/atmel*
 
 AUDIT SUBSYSTEM
-P:     Al Viro
-M:     viro@zeniv.linux.org.uk
-P:     Eric Paris
-M:     eparis@redhat.com
+M:     Al Viro <viro@zeniv.linux.org.uk>
+M:     Eric Paris <eparis@redhat.com>
 L:     linux-audit@redhat.com (subscribers-only)
 W:     http://people.redhat.com/sgrubb/audit/
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git
@@ -1143,8 +983,7 @@ F: include/linux/audit.h
 F:     kernel/audit*
 
 AUXILIARY DISPLAY DRIVERS
-P:     Miguel Ojeda Sandonis
-M:     miguel.ojeda.sandonis@gmail.com
+M:     Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
 W:     http://miguelojeda.es/auxdisplay.htm
 W:     http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
 S:     Maintained
@@ -1152,8 +991,7 @@ F: drivers/auxdisplay/
 F:     include/linux/cfag12864b.h
 
 AVR32 ARCHITECTURE
-P:     Haavard Skinnemoen
-M:     hskinnemoen@atmel.com
+M:     Haavard Skinnemoen <hskinnemoen@atmel.com>
 W:     http://www.atmel.com/products/AVR32/
 W:     http://avr32linux.org/
 W:     http://avrfreaks.net/
@@ -1161,14 +999,12 @@ S:       Supported
 F:     arch/avr32/
 
 AVR32/AT32AP MACHINE SUPPORT
-P:     Haavard Skinnemoen
-M:     hskinnemoen@atmel.com
+M:     Haavard Skinnemoen <hskinnemoen@atmel.com>
 S:     Supported
 F:     arch/avr32/mach-at32ap/
 
 AX.25 NETWORK LAYER
-P:     Ralf Baechle
-M:     ralf@linux-mips.org
+M:     Ralf Baechle <ralf@linux-mips.org>
 L:     linux-hams@vger.kernel.org
 W:     http://www.linux-ax25.org/
 S:     Maintained
@@ -1177,128 +1013,110 @@ F:    include/net/ax25.h
 F:     net/ax25/
 
 B43 WIRELESS DRIVER
-P:     Michael Buesch
-M:     mb@bu3sch.de
-P:     Stefano Brivio
-M:     stefano.brivio@polimi.it
+M:     Michael Buesch <mb@bu3sch.de>
+M:     Stefano Brivio <stefano.brivio@polimi.it>
 L:     linux-wireless@vger.kernel.org
 W:     http://linuxwireless.org/en/users/Drivers/b43
 S:     Maintained
 F:     drivers/net/wireless/b43/
 
 B43LEGACY WIRELESS DRIVER
-P:     Larry Finger
-M:     Larry.Finger@lwfinger.net
-P:     Stefano Brivio
-M:     stefano.brivio@polimi.it
+M:     Larry Finger <Larry.Finger@lwfinger.net>
+M:     Stefano Brivio <stefano.brivio@polimi.it>
 L:     linux-wireless@vger.kernel.org
 W:     http://linuxwireless.org/en/users/Drivers/b43
 S:     Maintained
 F:     drivers/net/wireless/b43legacy/
 
 BACKLIGHT CLASS/SUBSYSTEM
-P:     Richard Purdie
-M:     rpurdie@rpsys.net
+M:     Richard Purdie <rpurdie@rpsys.net>
 S:     Maintained
 F:     drivers/video/backlight/
 F:     include/linux/backlight.h
 
 BAYCOM/HDLCDRV DRIVERS FOR AX.25
-P:     Thomas Sailer
-M:     t.sailer@alumni.ethz.ch
+M:     Thomas Sailer <t.sailer@alumni.ethz.ch>
 L:     linux-hams@vger.kernel.org
 W:     http://www.baycom.org/~tom/ham/ham.html
 S:     Maintained
 F:     drivers/net/hamradio/baycom*
 
 BEFS FILE SYSTEM
-P:     Sergey S. Kostyliov
-M:     rathamahata@php4.ru
+M:     "Sergey S. Kostyliov" <rathamahata@php4.ru>
 S:     Maintained
 F:     Documentation/filesystems/befs.txt
 F:     fs/befs/
 
 BFS FILE SYSTEM
-P:     Tigran A. Aivazian
-M:     tigran@aivazian.fsnet.co.uk
+M:     "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk>
 S:     Maintained
 F:     Documentation/filesystems/bfs.txt
 F:     fs/bfs/
 F:     include/linux/bfs_fs.h
 
 BLACKFIN ARCHITECTURE
-P:     Mike Frysinger
-M:     vapier@gentoo.org
+M:     Mike Frysinger <vapier@gentoo.org>
 L:     uclinux-dist-devel@blackfin.uclinux.org
 W:     http://blackfin.uclinux.org
 S:     Supported
 F:     arch/blackfin/
 
 BLACKFIN EMAC DRIVER
-P:     Michael Hennerich
-M:     michael.hennerich@analog.com
+M:     Michael Hennerich <michael.hennerich@analog.com>
 L:     uclinux-dist-devel@blackfin.uclinux.org
 W:     http://blackfin.uclinux.org
 S:     Supported
 F:     drivers/net/bfin_mac.*
 
 BLACKFIN RTC DRIVER
-P:     Mike Frysinger
-M:     vapier.adi@gmail.com
+M:     Mike Frysinger <vapier.adi@gmail.com>
 L:     uclinux-dist-devel@blackfin.uclinux.org
 W:     http://blackfin.uclinux.org
 S:     Supported
 F:     drivers/rtc/rtc-bfin.c
 
 BLACKFIN SERIAL DRIVER
-P:     Sonic Zhang
-M:     sonic.zhang@analog.com
+M:     Sonic Zhang <sonic.zhang@analog.com>
 L:     uclinux-dist-devel@blackfin.uclinux.org
 W:     http://blackfin.uclinux.org
 S:     Supported
 F:     drivers/serial/bfin_5xx.c
 
 BLACKFIN WATCHDOG DRIVER
-P:     Mike Frysinger
-M:     vapier.adi@gmail.com
+M:     Mike Frysinger <vapier.adi@gmail.com>
 L:     uclinux-dist-devel@blackfin.uclinux.org
 W:     http://blackfin.uclinux.org
 S:     Supported
 F:     drivers/watchdog/bfin_wdt.c
 
 BLACKFIN I2C TWI DRIVER
-P:     Sonic Zhang
-M:     sonic.zhang@analog.com
+M:     Sonic Zhang <sonic.zhang@analog.com>
 L:     uclinux-dist-devel@blackfin.uclinux.org
 W:     http://blackfin.uclinux.org/
 S:     Supported
 F:     drivers/i2c/busses/i2c-bfin-twi.c
 
 BLOCK LAYER
-P:     Jens Axboe
-M:     axboe@kernel.dk
+M:     Jens Axboe <axboe@kernel.dk>
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
 S:     Maintained
 F:     block/
 
 BLOCK2MTD DRIVER
-P:     Joern Engel
-M:     joern@lazybastard.org
+M:     Joern Engel <joern@lazybastard.org>
 L:     linux-mtd@lists.infradead.org
 S:     Maintained
 F:     drivers/mtd/devices/block2mtd.c
 
 BLUETOOTH DRIVERS
-P:     Marcel Holtmann
-M:     marcel@holtmann.org
+M:     Marcel Holtmann <marcel@holtmann.org>
 L:     linux-bluetooth@vger.kernel.org
 W:     http://www.bluez.org/
 S:     Maintained
 F:     drivers/bluetooth/
 
 BLUETOOTH SUBSYSTEM
-P:     Marcel Holtmann
-M:     marcel@holtmann.org
+M:     Marcel Holtmann <marcel@holtmann.org>
 L:     linux-bluetooth@vger.kernel.org
 W:     http://www.bluez.org/
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git
@@ -1307,8 +1125,7 @@ F:        net/bluetooth/
 F:     include/net/bluetooth/
 
 BONDING DRIVER
-P:     Jay Vosburgh
-M:     fubar@us.ibm.com
+M:     Jay Vosburgh <fubar@us.ibm.com>
 L:     bonding-devel@lists.sourceforge.net
 W:     http://sourceforge.net/projects/bonding/
 S:     Supported
@@ -1316,54 +1133,46 @@ F:      drivers/net/bonding/
 F:     include/linux/if_bonding.h
 
 BROADCOM B44 10/100 ETHERNET DRIVER
-P:     Gary Zambrano
-M:     zambrano@broadcom.com
+M:     Gary Zambrano <zambrano@broadcom.com>
 L:     netdev@vger.kernel.org
 S:     Supported
 F:     drivers/net/b44.*
 
 BROADCOM BNX2 GIGABIT ETHERNET DRIVER
-P:     Michael Chan
-M:     mchan@broadcom.com
+M:     Michael Chan <mchan@broadcom.com>
 L:     netdev@vger.kernel.org
 S:     Supported
 F:     drivers/net/bnx2.*
 F:     drivers/net/bnx2_*
 
 BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
-P:     Eilon Greenstein
-M:     eilong@broadcom.com
+M:     Eilon Greenstein <eilong@broadcom.com>
 L:     netdev@vger.kernel.org
 S:     Supported
 F:     drivers/net/bnx2x*
 
 BROADCOM TG3 GIGABIT ETHERNET DRIVER
-P:     Matt Carlson
-M:     mcarlson@broadcom.com
-P:     Michael Chan
-M:     mchan@broadcom.com
+M:     Matt Carlson <mcarlson@broadcom.com>
+M:     Michael Chan <mchan@broadcom.com>
 L:     netdev@vger.kernel.org
 S:     Supported
 F:     drivers/net/tg3.*
 
 BSG (block layer generic sg v4 driver)
-P:     FUJITA Tomonori
-M:     fujita.tomonori@lab.ntt.co.jp
+M:     FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
 L:     linux-scsi@vger.kernel.org
 S:     Supported
 F:     block/bsg.c
 F:     include/linux/bsg.h
 
 BT8XXGPIO DRIVER
-P:     Michael Buesch
-M:     mb@bu3sch.de
+M:     Michael Buesch <mb@bu3sch.de>
 W:     http://bu3sch.de/btgpio.php
 S:     Maintained
 F:     drivers/gpio/bt8xxgpio.c
 
 BTRFS FILE SYSTEM
-P:     Chris Mason
-M:     chris.mason@oracle.com
+M:     Chris Mason <chris.mason@oracle.com>
 L:     linux-btrfs@vger.kernel.org
 W:     http://btrfs.wiki.kernel.org/
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable.git
@@ -1372,8 +1181,7 @@ F:        Documentation/filesystems/btrfs.txt
 F:     fs/btrfs/
 
 BTTV VIDEO4LINUX DRIVER
-P:     Mauro Carvalho Chehab
-M:     mchehab@infradead.org
+M:     Mauro Carvalho Chehab <mchehab@infradead.org>
 L:     linux-media@vger.kernel.org
 W:     http://linuxtv.org
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
@@ -1382,16 +1190,14 @@ F:      Documentation/video4linux/bttv/
 F:     drivers/media/video/bt8xx/bttv*
 
 CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
-P:     David Howells
-M:     dhowells@redhat.com
+M:     David Howells <dhowells@redhat.com>
 L:     linux-cachefs@redhat.com
 S:     Supported
 F:     Documentation/filesystems/caching/cachefiles.txt
 F:     fs/cachefiles/
 
 CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER
-P:     Jonathan Corbet
-M:     corbet@lwn.net
+M:     Jonathan Corbet <corbet@lwn.net>
 L:     linux-media@vger.kernel.org
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
 S:     Maintained
@@ -1399,10 +1205,8 @@ F:       Documentation/video4linux/cafe_ccic
 F:     drivers/media/video/cafe_ccic*
 
 CALGARY x86-64 IOMMU
-P:     Muli Ben-Yehuda
-M:     muli@il.ibm.com
-P:     Jon D. Mason
-M:     jdmason@kudzu.us
+M:     Muli Ben-Yehuda <muli@il.ibm.com>
+M:     "Jon D. Mason" <jdmason@kudzu.us>
 L:     discuss@x86-64.org
 S:     Maintained
 F:     arch/x86/kernel/pci-calgary_64.c
@@ -1411,10 +1215,8 @@ F:       arch/x86/include/asm/calgary.h
 F:     arch/x86/include/asm/tce.h
 
 CAN NETWORK LAYER
-P:     Urs Thuermann
-M:     urs.thuermann@volkswagen.de
-P:     Oliver Hartkopp
-M:     oliver.hartkopp@volkswagen.de
+M:     Urs Thuermann <urs.thuermann@volkswagen.de>
+M:     Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
 L:     socketcan-core@lists.berlios.de (subscribers-only)
 W:     http://developer.berlios.de/projects/socketcan/
 S:     Maintained
@@ -1423,15 +1225,13 @@ F:      include/linux/can/
 F:     include/linux/can.h
 
 CAN NETWORK DRIVERS
-P:     Wolfgang Grandegger
-M:     wg@grandegger.com
+M:     Wolfgang Grandegger <wg@grandegger.com>
 L:     socketcan-core@lists.berlios.de (subscribers-only)
 W:     http://developer.berlios.de/projects/socketcan/
 S:     Maintained
 
 CELL BROADBAND ENGINE ARCHITECTURE
-P:     Arnd Bergmann
-M:     arnd@arndb.de
+M:     Arnd Bergmann <arnd@arndb.de>
 L:     linuxppc-dev@ozlabs.org
 L:     cbe-oss-dev@ozlabs.org
 W:     http://www.ibm.com/developerworks/power/cell/
@@ -1442,8 +1242,7 @@ F:        arch/powerpc/oprofile/*cell*
 F:     arch/powerpc/platforms/cell/
 
 CERTIFIED WIRELESS USB (WUSB) SUBSYSTEM:
-P:     David Vrabel
-M:     david.vrabel@csr.com
+M:     David Vrabel <david.vrabel@csr.com>
 L:     linux-usb@vger.kernel.org
 S:     Supported
 F:     Documentation/usb/WUSB-Design-overview.txt
@@ -1452,8 +1251,7 @@ F:        drivers/usb/wusbcore/
 F:     include/linux/usb/wusb*
 
 CFAG12864B LCD DRIVER
-P:     Miguel Ojeda Sandonis
-M:     miguel.ojeda.sandonis@gmail.com
+M:     Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
 W:     http://miguelojeda.es/auxdisplay.htm
 W:     http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
 S:     Maintained
@@ -1461,8 +1259,7 @@ F:        drivers/auxdisplay/cfag12864b.c
 F:     include/linux/cfag12864b.h
 
 CFAG12864BFB LCD FRAMEBUFFER DRIVER
-P:     Miguel Ojeda Sandonis
-M:     miguel.ojeda.sandonis@gmail.com
+M:     Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
 W:     http://miguelojeda.es/auxdisplay.htm
 W:     http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
 S:     Maintained
@@ -1470,8 +1267,7 @@ F:        drivers/auxdisplay/cfag12864bfb.c
 F:     include/linux/cfag12864b.h
 
 CFG80211 and NL80211
-P:     Johannes Berg
-M:     johannes@sipsolutions.net
+M:     Johannes Berg <johannes@sipsolutions.net>
 L:     linux-wireless@vger.kernel.org
 S:     Maintained
 F:     include/linux/nl80211.h
@@ -1480,66 +1276,47 @@ F:      net/wireless/*
 X:     net/wireless/wext*
 
 CHECKPATCH
-P:     Andy Whitcroft
-M:     apw@canonical.com
+M:     Andy Whitcroft <apw@canonical.com>
 S:     Supported
 F:     scripts/checkpatch.pl
 
 CISCO 10G ETHERNET DRIVER
-P:     Scott Feldman
-M:     scofeldm@cisco.com
-P:     Joe Eykholt
-M:     jeykholt@cisco.com
+M:     Scott Feldman <scofeldm@cisco.com>
+M:     Joe Eykholt <jeykholt@cisco.com>
 S:     Supported
 F:     drivers/net/enic/
 
 CIRRUS LOGIC EP93XX ETHERNET DRIVER
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     netdev@vger.kernel.org
 S:     Maintained
 F:     drivers/net/arm/ep93xx_eth.c
 
 CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER
-P:     Lennert Buytenhek
-M:     kernel@wantstofly.org
+M:     Lennert Buytenhek <kernel@wantstofly.org>
 L:     linux-usb@vger.kernel.org
 S:     Maintained
 F:     drivers/usb/host/ohci-ep93xx.c
 
 CIRRUS LOGIC CS4270 SOUND DRIVER
-P:     Timur Tabi
-M:     timur@freescale.com
+M:     Timur Tabi <timur@freescale.com>
 L:     alsa-devel@alsa-project.org (moderated for non-subscribers)
 S:     Supported
 F:     sound/soc/codecs/cs4270*
 
-CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER
-P:     Cirrus Logic Corporation (kernel 2.2 driver)
-M:     Cirrus Logic Corporation, Thomas Woller <twoller@crystal.cirrus.com>
-P:     Nils Faerber (port to kernel 2.4)
-M:     Nils Faerber <nils@kernelconcepts.de>
-S:     Maintained
-F:     Documentation/input/cs461x.txt
-F:     sound/pci/cs46xx/
-
 CLK API
-P:     Russell King
-M:     linux@arm.linux.org.uk
+M:     Russell King <linux@arm.linux.org.uk>
 F:     include/linux/clk.h
 
 CISCO FCOE HBA DRIVER
-P:     Abhijeet Joglekar
-M:     abjoglek@cisco.com
-P:     Joe Eykholt
-M:     jeykholt@cisco.com
+M:     Abhijeet Joglekar <abjoglek@cisco.com>
+M:     Joe Eykholt <jeykholt@cisco.com>
 L:     linux-scsi@vger.kernel.org
 S:     Supported
 F:     drivers/scsi/fnic/
 
 CODA FILE SYSTEM
-P:     Jan Harkes
-M:     jaharkes@cs.cmu.edu
+M:     Jan Harkes <jaharkes@cs.cmu.edu>
 M:     coda@cs.cmu.edu
 L:     codalist@coda.cs.cmu.edu
 W:     http://www.coda.cs.cmu.edu/
@@ -1549,8 +1326,7 @@ F:        fs/coda/
 F:     include/linux/coda*.h
 
 COMMON INTERNET FILE SYSTEM (CIFS)
-P:     Steve French
-M:     sfrench@samba.org
+M:     Steve French <sfrench@samba.org>
 L:     linux-cifs-client@lists.samba.org
 L:     samba-technical@lists.samba.org
 W:     http://linux-cifs.samba.org/
@@ -1560,63 +1336,57 @@ F:      Documentation/filesystems/cifs.txt
 F:     fs/cifs/
 
 COMPACTPCI HOTPLUG CORE
-P:     Scott Murray
-M:     scottm@somanetworks.com
-M:     scott@spiteful.org
+M:     Scott Murray <scott@spiteful.org>
 L:     linux-pci@vger.kernel.org
-S:     Supported
+S:     Maintained
 F:     drivers/pci/hotplug/cpci_hotplug*
 
 COMPACTPCI HOTPLUG ZIATECH ZT5550 DRIVER
-P:     Scott Murray
-M:     scottm@somanetworks.com
-M:     scott@spiteful.org
+M:     Scott Murray <scott@spiteful.org>
 L:     linux-pci@vger.kernel.org
-S:     Supported
+S:     Maintained
 F:     drivers/pci/hotplug/cpcihp_zt5550.*
 
 COMPACTPCI HOTPLUG GENERIC DRIVER
-P:     Scott Murray
-M:     scottm@somanetworks.com
-M:     scott@spiteful.org
+M:     Scott Murray <scott@spiteful.org>
 L:     linux-pci@vger.kernel.org
-S:     Supported
+S:     Maintained
 F:     drivers/pci/hotplug/cpcihp_generic.c
 
 COMPAL LAPTOP SUPPORT
-P:     Cezary Jackiewicz
-M:     cezary.jackiewicz@gmail.com
+M:     Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
 S:     Maintained
 F:     drivers/platform/x86/compal-laptop.c
 
 COMPUTONE INTELLIPORT MULTIPORT CARD
-P:     Michael H. Warfield
-M:     mhw@wittsend.com
+M:     "Michael H. Warfield" <mhw@wittsend.com>
 W:     http://www.wittsend.com/computone.html
 S:     Maintained
 F:     Documentation/serial/computone.txt
 F:     drivers/char/ip2/
 
 CONEXANT ACCESSRUNNER USB DRIVER
-P:     Simon Arlott
-M:     cxacru@fire.lp0.eu
+M:     Simon Arlott <cxacru@fire.lp0.eu>
 L:     accessrunner-general@lists.sourceforge.net
 W:     http://accessrunner.sourceforge.net/
 S:     Maintained
 F:     drivers/usb/atm/cxacru.c
 
 CONFIGFS
-P:     Joel Becker
-M:     joel.becker@oracle.com
+M:     Joel Becker <joel.becker@oracle.com>
 S:     Supported
 F:     fs/configfs/
 F:     include/linux/configfs.h
 
+CONNECTOR
+M:     Evgeniy Polyakov <zbr@ioremap.net>
+L:     netdev@vger.kernel.org
+S:     Maintained
+F:     drivers/connector/
+
 CONTROL GROUPS (CGROUPS)
-P:     Paul Menage
-M:     menage@google.com
-P:     Li Zefan
-M:     lizf@cn.fujitsu.com
+M:     Paul Menage <menage@google.com>
+M:     Li Zefan <lizf@cn.fujitsu.com>
 L:     containers@lists.linux-foundation.org
 S:     Maintained
 F:     include/linux/cgroup*
@@ -1624,30 +1394,26 @@ F:      kernel/cgroup*
 F:     mm/*cgroup*
 
 CORETEMP HARDWARE MONITORING DRIVER
-P:     Rudolf Marek
-M:     r.marek@assembler.cz
+M:     Rudolf Marek <r.marek@assembler.cz>
 L:     lm-sensors@lm-sensors.org
 S:     Maintained
 F:     Documentation/hwmon/coretemp
 F:     drivers/hwmon/coretemp.c
 
 COSA/SRP SYNC SERIAL DRIVER
-P:     Jan "Yenya" Kasprzak
-M:     kas@fi.muni.cz
+M:     Jan "Yenya" Kasprzak <kas@fi.muni.cz>
 W:     http://www.fi.muni.cz/~kas/cosa/
 S:     Maintained
 F:     drivers/net/wan/cosa*
 
 CPMAC ETHERNET DRIVER
-P:     Florian Fainelli
-M:     florian@openwrt.org
+M:     Florian Fainelli <florian@openwrt.org>
 L:     netdev@vger.kernel.org
 S:     Maintained
 F:     drivers/net/cpmac.c
 
 CPU FREQUENCY DRIVERS
-P:     Dave Jones
-M:     davej@redhat.com
+M:     Dave Jones <davej@redhat.com>
 L:     cpufreq@vger.kernel.org
 W:     http://www.codemonkey.org.uk/projects/cpufreq/
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git
@@ -1657,15 +1423,13 @@ F:      drivers/cpufreq/
 F:     include/linux/cpufreq.h
 
 CPUID/MSR DRIVER
-P:     H. Peter Anvin
-M:     hpa@zytor.com
+M:     "H. Peter Anvin" <hpa@zytor.com>
 S:     Maintained
 F:     arch/x86/kernel/cpuid.c
 F:     arch/x86/kernel/msr.c
 
 CPUSETS
-P:     Paul Menage
-M:     menage@google.com
+M:     Paul Menage <menage@google.com>
 W:     http://www.bullopensource.org/cpuset/
 W:     http://oss.sgi.com/projects/cpusets/
 S:     Supported
@@ -1680,20 +1444,16 @@ F:      Documentation/filesystems/cramfs.txt
 F:     fs/cramfs/
 
 CRIS PORT
-P:     Mikael Starvik
-M:     starvik@axis.com
-P:     Jesper Nilsson
-M:     jesper.nilsson@axis.com
+M:     Mikael Starvik <starvik@axis.com>
+M:     Jesper Nilsson <jesper.nilsson@axis.com>
 L:     linux-cris-kernel@axis.com
 W:     http://developer.axis.com
 S:     Maintained
 F:     arch/cris/
 
 CRYPTO API
-P:     Herbert Xu
-M:     herbert@gondor.apana.org.au
-P:     David S. Miller
-M:     davem@davemloft.net
+M:     Herbert Xu <herbert@gondor.apana.org.au>
+M:     "David S. Miller" <davem@davemloft.net>
 L:     linux-crypto@vger.kernel.org
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
 S:     Maintained
@@ -1704,58 +1464,50 @@ F:      drivers/crypto/
 F:     include/crypto/
 
 CRYPTOGRAPHIC RANDOM NUMBER GENERATOR
-P:     Neil Horman
-M:     nhorman@tuxdriver.com
+M:     Neil Horman <nhorman@tuxdriver.com>
 L:     linux-crypto@vger.kernel.org
 S:     Maintained
 
 CS5535 Audio ALSA driver
-P:     Jaya Kumar
-M:     jayakumar.alsa@gmail.com
+M:     Jaya Kumar <jayakumar.alsa@gmail.com>
 S:     Maintained
 F:     sound/pci/cs5535audio/
 
 CX18 VIDEO4LINUX DRIVER
-P:     Hans Verkuil
-M:     hverkuil@xs4all.nl
-P:     Andy Walls
-M:     awalls@radix.net
+M:     Hans Verkuil <hverkuil@xs4all.nl>
+M:     Andy Walls <awalls@radix.net>
 L:     ivtv-devel@ivtvdriver.org
-L:     ivtv-users@ivtvdriver.org
 L:     linux-media@vger.kernel.org
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
 W:     http://linuxtv.org
+W:     http://www.ivtvdriver.org/index.php/Cx18
 S:     Maintained
 F:     Documentation/video4linux/cx18.txt
 F:     drivers/media/video/cx18/
 
 CXGB3 ETHERNET DRIVER (CXGB3)
-P:     Divy Le Ray
-M:     divy@chelsio.com
+M:     Divy Le Ray <divy@chelsio.com>
 L:     netdev@vger.kernel.org
 W:     http://www.chelsio.com
 S:     Supported
 F:     drivers/net/cxgb3/
 
 CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
-P:     Steve Wise
-M:     swise@chelsio.com
+M:     Steve Wise <swise@chelsio.com>
 L:     general@lists.openfabrics.org
 W:     http://www.openfabrics.org
 S:     Supported
 F:     drivers/infiniband/hw/cxgb3/
 
 CYBERPRO FB DRIVER
-P:     Russell King
-M:     linux@arm.linux.org.uk
+M:     Russell King <linux@arm.linux.org.uk>
 L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.arm.linux.org.uk/
 S:     Maintained
 F:     drivers/video/cyber2000fb.*
 
 CYCLADES 2X SYNC CARD DRIVER
-P:     Arnaldo Carvalho de Melo
-M:     acme@ghostprotocols.net
+M:     Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
 W:     http://oops.ghostprotocols.net:81/blog
 S:     Maintained
 F:     drivers/net/wan/cycx*
@@ -1772,8 +1524,7 @@ S:        Orphan
 F:     drivers/net/wan/pc300*
 
 DAMA SLAVE for AX.25
-P:     Joerg Reuter
-M:     jreuter@yaina.de
+M:     Joerg Reuter <jreuter@yaina.de>
 W:     http://yaina.de/jreuter/
 W:     http://www.qsl.net/dl1bke/
 L:     linux-hams@vger.kernel.org
@@ -1787,29 +1538,23 @@ F:      net/ax25/ax25_timer.c
 F:     net/ax25/sysctl_net_ax25.c
 
 DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
-P:     Tobias Ringstrom
-M:     tori@unhappy.mine.nu
+M:     Tobias Ringstrom <tori@unhappy.mine.nu>
 L:     netdev@vger.kernel.org
 S:     Maintained
 F:     Documentation/networking/dmfe.txt
 F:     drivers/net/tulip/dmfe.c
 
 DC390/AM53C974 SCSI driver
-P:     Kurt Garloff
-M:     garloff@suse.de
+M:     Kurt Garloff <garloff@suse.de>
 W:     http://www.garloff.de/kurt/linux/dc390/
-P:     Guennadi Liakhovetski
-M:     g.liakhovetski@gmx.de
+M:     Guennadi Liakhovetski <g.liakhovetski@gmx.de>
 S:     Maintained
 F:     drivers/scsi/tmscsim.*
 
 DC395x SCSI driver
-P:     Oliver Neukum
-M:     oliver@neukum.name
-P:     Ali Akcaagac
-M:     aliakc@web.de
-P:     Jamie Lenehan
-M:     lenehan@twibble.org
+M:     Oliver Neukum <oliver@neukum.name>
+M:     Ali Akcaagac <aliakc@web.de>
+M:     Jamie Lenehan <lenehan@twibble.org>
 W:     http://twibble.org/dist/dc395x/
 L:     dc395x@twibble.org
 L:     http://lists.twibble.org/mailman/listinfo/dc395x/
@@ -1818,8 +1563,7 @@ F:        Documentation/scsi/dc395x.txt
 F:     drivers/scsi/dc395x.*
 
 DCCP PROTOCOL
-P:     Arnaldo Carvalho de Melo
-M:     acme@ghostprotocols.net
+M:     Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
 L:     dccp@vger.kernel.org
 W:     http://linux-net.osdl.org/index.php/DCCP
 S:     Maintained
@@ -1828,8 +1572,7 @@ F:        include/linux/tfrc.h
 F:     net/dccp/
 
 DECnet NETWORK LAYER
-P:     Christine Caulfield
-M:     christine.caulfield@googlemail.com
+M:     Christine Caulfield <christine.caulfield@googlemail.com>
 W:     http://linux-decnet.sourceforge.net
 L:     linux-decnet-user@lists.sourceforge.net
 S:     Maintained
@@ -1837,40 +1580,34 @@ F:      Documentation/networking/decnet.txt
 F:     net/decnet/
 
 DEFXX FDDI NETWORK DRIVER
-P:     Maciej W. Rozycki
-M:     macro@linux-mips.org
+M:     "Maciej W. Rozycki" <macro@linux-mips.org>
 S:     Maintained
 F:     drivers/net/defxx.*
 
 DELL LAPTOP DRIVER
-P:     Matthew Garrett
-M:     mjg59@srcf.ucam.org
+M:     Matthew Garrett <mjg59@srcf.ucam.org>
 S:     Maintained
 F:     drivers/platform/x86/dell-laptop.c
 
 DELL LAPTOP SMM DRIVER
-P:     Massimo Dal Zotto
-M:     dz@debian.org
+M:     Massimo Dal Zotto <dz@debian.org>
 W:     http://www.debian.org/~dz/i8k/
 S:     Maintained
 F:     drivers/char/i8k.c
 F:     include/linux/i8k.h
 
 DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas)
-P:     Doug Warzecha
-M:     Douglas_Warzecha@dell.com
+M:     Doug Warzecha <Douglas_Warzecha@dell.com>
 S:     Maintained
 F:     Documentation/dcdbas.txt
 F:     drivers/firmware/dcdbas.*
 
 DELL WMI EXTRAS DRIVER
-P:     Matthew Garrett
-M:     mjg59@srcf.ucam.org
+M:     Matthew Garrett <mjg59@srcf.ucam.org>
 S:     Maintained
 
 DEVICE NUMBER REGISTRY
-P:     Torben Mathiasen
-M:     device@lanana.org
+M:     Torben Mathiasen <device@lanana.org>
 W:     http://lanana.org/docs/device-list/index.html
 S:     Maintained
 
@@ -1885,8 +1622,7 @@ F:        include/linux/device-mapper.h
 F:     include/linux/dm-*.h
 
 DIGI INTL. EPCA DRIVER
-P:     Digi International, Inc
-M:     Eng.Linux@digi.com
+M:     "Digi International, Inc" <Eng.Linux@digi.com>
 L:     Eng.Linux@digi.com
 W:     http://www.digi.com
 S:     Orphan
@@ -1895,34 +1631,29 @@ F:      drivers/char/epca*
 F:     drivers/char/digi*
 
 DIRECTORY NOTIFICATION (DNOTIFY)
-P:     Eric Paris
-M:     eparis@parisplace.org
+M:     Eric Paris <eparis@parisplace.org>
 S:     Maintained
 F:     Documentation/filesystems/dnotify.txt
 F:     fs/notify/dnotify/
 F:     include/linux/dnotify.h
 
 DISK GEOMETRY AND PARTITION HANDLING
-P:     Andries Brouwer
-M:     aeb@cwi.nl
+M:     Andries Brouwer <aeb@cwi.nl>
 W:     http://www.win.tue.nl/~aeb/linux/Large-Disk.html
 W:     http://www.win.tue.nl/~aeb/linux/zip/zip-1.html
 W:     http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
 S:     Maintained
 
 DISKQUOTA
-P:     Jan Kara
-M:     jack@suse.cz
+M:     Jan Kara <jack@suse.cz>
 S:     Maintained
 F:     Documentation/filesystems/quota.txt
 F:     fs/quota/
 F:     include/linux/quota*.h
 
 DISTRIBUTED LOCK MANAGER (DLM)
-P:     Christine Caulfield
-M:     ccaulfie@redhat.com
-P:     David Teigland
-M:     teigland@redhat.com
+M:     Christine Caulfield <ccaulfie@redhat.com>
+M:     David Teigland <teigland@redhat.com>
 L:     cluster-devel@redhat.com
 W:     http://sources.redhat.com/cluster/
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm.git
@@ -1930,52 +1661,44 @@ S:      Supported
 F:     fs/dlm/
 
 DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
-P:     Maciej Sosnowski
-M:     maciej.sosnowski@intel.com
-P:     Dan Williams
-M:     dan.j.williams@intel.com
+M:     Maciej Sosnowski <maciej.sosnowski@intel.com>
+M:     Dan Williams <dan.j.williams@intel.com>
 S:     Supported
 F:     drivers/dma/
 F:     include/linux/dma*
 
 DME1737 HARDWARE MONITOR DRIVER
-P:     Juerg Haefliger
-M:     juergh@gmail.com
+M:     Juerg Haefliger <juergh@gmail.com>
 L:     lm-sensors@lm-sensors.org
 S:     Maintained
 F:     Documentation/hwmon/dme1737
 F:     drivers/hwmon/dme1737.c
 
 DOCBOOK FOR DOCUMENTATION
-P:     Randy Dunlap
-M:&nbs