Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Sat, 30 Jun 2007 04:29:57 +0000 (21:29 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sat, 30 Jun 2007 04:29:57 +0000 (21:29 -0700)
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [IRDA]: fix printk format
  [NETPOLL] netconsole: fix soft lockup when removing module
  [NETPOLL]: tx lock deadlock fix
  SCTP: lock_sock_nested in sctp_sock_migrate
  SCTP: Fix sctp_getsockopt_get_peer_addrs
  SCTP: update sctp_getsockopt helpers to allow oversized buffers

58 files changed:
Documentation/HOWTO
Documentation/kernel-parameters.txt
arch/arm/kernel/calls.S
arch/arm/kernel/sys_arm.c
arch/i386/kernel/cpu/mtrr/cyrix.c
arch/ia64/kernel/time.c
arch/ia64/kernel/unwind.c
arch/ia64/mm/hugetlbpage.c
arch/ia64/sn/kernel/xp_nofault.S
arch/ia64/sn/pci/pcibr/pcibr_provider.c
arch/ia64/sn/pci/tioca_provider.c
arch/ia64/sn/pci/tioce_provider.c
arch/mips/jazz/setup.c
arch/powerpc/kernel/sys_ppc32.c
arch/powerpc/kernel/vdso64/gettimeofday.S
drivers/ata/libata-core.c
drivers/ata/libata-eh.c
drivers/ata/libata-scsi.c
drivers/ata/pata_hpt37x.c
drivers/ata/pata_it821x.c
drivers/atm/Kconfig
drivers/char/drm/drm_pciids.h
drivers/char/drm/sis_drv.h
drivers/dma/ioatdma.c
drivers/media/dvb/Kconfig
drivers/media/radio/Kconfig
drivers/media/video/Kconfig
drivers/media/video/saa7134/saa7134-tvaudio.c
drivers/net/au1000_eth.c
drivers/net/cxgb3/xgmac.c
drivers/net/irda/smsc-ircc2.c
drivers/net/pcmcia/Kconfig
drivers/net/phy/mdio_bus.c
drivers/net/phy/vitesse.c
drivers/net/s2io.c
drivers/pnp/quirks.c
drivers/serial/mpsc.c
drivers/video/aty/atyfb_base.c
drivers/video/chipsfb.c
drivers/w1/slaves/w1_therm.c
fs/ecryptfs/ecryptfs_kernel.h
fs/ecryptfs/inode.c
fs/ecryptfs/mmap.c
fs/ext2/super.c
fs/signalfd.c
fs/sync.c
include/asm-arm/unistd.h
include/asm-ia64/sn/sn_sal.h
include/asm-powerpc/systbl.h
include/asm-powerpc/unistd.h
include/linux/eventfd.h
include/linux/libata.h
include/linux/syscalls.h
kernel/relay.c
mm/rmap.c
scripts/checksyscalls.sh
sound/isa/opl3sa2.c
sound/pci/ice1712/prodigy192.c

index ced9207..98e2701 100644 (file)
@@ -322,39 +322,34 @@ kernel releases as described above.
 Here is a list of some of the different kernel trees available:
   git trees:
     - Kbuild development tree, Sam Ravnborg <sam@ravnborg.org>
-       kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git
+       git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git
 
     - ACPI development tree, Len Brown <len.brown@intel.com>
-       kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
+       git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
 
     - Block development tree, Jens Axboe <axboe@suse.de>
-       kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
+       git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
 
     - DRM development tree, Dave Airlie <airlied@linux.ie>
-       kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git
+       git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git
 
     - ia64 development tree, Tony Luck <tony.luck@intel.com>
-       kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
-
-    - ieee1394 development tree, Jody McIntyre <scjody@modernduck.com>
-       kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git
+       git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
 
     - infiniband, Roland Dreier <rolandd@cisco.com>
-       kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
+       git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
 
     - libata, Jeff Garzik <jgarzik@pobox.com>
-       kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
+       git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
 
     - network drivers, Jeff Garzik <jgarzik@pobox.com>
-       kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
+       git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
 
     - pcmcia, Dominik Brodowski <linux@dominikbrodowski.net>
-       kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
+       git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
 
     - SCSI, James Bottomley <James.Bottomley@SteelEye.com>
-       kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
-
-  Other git kernel trees can be found listed at http://kernel.org/git
+       git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
 
   quilt trees:
     - USB, PCI, Driver Core, and I2C, Greg Kroah-Hartman <gregkh@suse.de>
@@ -362,6 +357,9 @@ Here is a list of some of the different kernel trees available:
     - x86-64, partly i386, Andi Kleen <ak@suse.de>
         ftp.firstfloor.org:/pub/ak/x86_64/quilt/
 
+  Other kernel trees can be found listed at http://git.kernel.org/ and in
+  the MAINTAINERS file.
+
 Bug Reporting
 -------------
 
index 5d0283c..af50f9b 100644 (file)
@@ -223,11 +223,6 @@ and is between 256 and 4096 characters. It is defined in the file
 
        acpi_fake_ecdt  [HW,ACPI] Workaround failure due to BIOS lacking ECDT
 
-       acpi_generic_hotkey [HW,ACPI]
-                       Allow consolidated generic hotkey driver to
-                       override platform specific driver.
-                       See also Documentation/acpi-hotkey.txt.
-
        acpi_pm_good    [IA-32,X86-64]
                        Override the pmtimer bug detection: force the kernel
                        to assume that this machine's pmtimer latches its value
index 19326d7..a98d0c9 100644 (file)
                CALL(sys_set_robust_list)
                CALL(sys_get_robust_list)
 /* 340 */      CALL(sys_splice)
-               CALL(sys_arm_sync_file_range)
+               CALL(sys_sync_file_range2)
                CALL(sys_tee)
                CALL(sys_vmsplice)
                CALL(sys_move_pages)
index 1ca2d51..4d25e49 100644 (file)
@@ -328,16 +328,3 @@ asmlinkage long sys_arm_fadvise64_64(int fd, int advice,
 {
        return sys_fadvise64_64(fd, offset, len, advice);
 }
-
-/*
- * Yet more syscall fsckage - we can't fit sys_sync_file_range's
- * arguments into the available registers with EABI.  So, let's
- * create an ARM specific syscall for this which has _sane_
- * arguments.  (This incidentally also has an ABI-independent
- * argument layout.)
- */
-asmlinkage long sys_arm_sync_file_range(int fd, unsigned int flags,
-                                       loff_t offset, loff_t nbytes)
-{
-       return sys_sync_file_range(fd, offset, nbytes, flags);
-}
index 9edf562..1001f1e 100644 (file)
@@ -233,12 +233,12 @@ typedef struct {
        mtrr_type type;
 } arr_state_t;
 
-static arr_state_t arr_state[8] __devinitdata = {
+static arr_state_t arr_state[8] = {
        {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL},
        {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}
 };
 
-static unsigned char ccr_state[7] __devinitdata = { 0, 0, 0, 0, 0, 0, 0 };
+static unsigned char ccr_state[7] = { 0, 0, 0, 0, 0, 0, 0 };
 
 static void cyrix_set_all(void)
 {
index a06667c..3486fe7 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/time.h>
 #include <linux/interrupt.h>
 #include <linux/efi.h>
-#include <linux/profile.h>
 #include <linux/timex.h>
 
 #include <asm/machvec.h>
index b0b08b5..c1bdb51 100644 (file)
@@ -1856,11 +1856,19 @@ find_save_locs (struct unw_frame_info *info)
        return 0;
 }
 
+static int
+unw_valid(const struct unw_frame_info *info, unsigned long* p)
+{
+       unsigned long loc = (unsigned long)p;
+       return (loc >= info->regstk.limit && loc < info->regstk.top) ||
+              (loc >= info->memstk.top && loc < info->memstk.limit);
+}
+
 int
 unw_unwind (struct unw_frame_info *info)
 {
        unsigned long prev_ip, prev_sp, prev_bsp;
-       unsigned long ip, pr, num_regs, rp_loc, pfs_loc;
+       unsigned long ip, pr, num_regs;
        STAT(unsigned long start, flags;)
        int retval;
 
@@ -1871,8 +1879,7 @@ unw_unwind (struct unw_frame_info *info)
        prev_bsp = info->bsp;
 
        /* validate the return IP pointer */
-       rp_loc = (unsigned long) info->rp_loc;
-       if ((rp_loc < info->regstk.limit) || (rp_loc > info->regstk.top)) {
+       if (!unw_valid(info, info->rp_loc)) {
                /* FIXME: should really be level 0 but it occurs too often. KAO */
                UNW_DPRINT(1, "unwind.%s: failed to locate return link (ip=0x%lx)!\n",
                           __FUNCTION__, info->ip);
@@ -1888,8 +1895,7 @@ unw_unwind (struct unw_frame_info *info)
        }
 
        /* validate the previous stack frame pointer */
-       pfs_loc = (unsigned long) info->pfs_loc;
-       if ((pfs_loc < info->regstk.limit) || (pfs_loc > info->regstk.top)) {
+       if (!unw_valid(info, info->pfs_loc)) {
                UNW_DPRINT(0, "unwind.%s: failed to locate ar.pfs!\n", __FUNCTION__);
                STAT(unw.stat.api.unwind_time += ia64_get_itc() - start; local_irq_restore(flags));
                return -1;
index 1346b7f..d22861c 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/pagemap.h>
 #include <linux/slab.h>
 #include <linux/sysctl.h>
+#include <linux/log2.h>
 #include <asm/mman.h>
 #include <asm/pgalloc.h>
 #include <asm/tlb.h>
@@ -182,7 +183,7 @@ static int __init hugetlb_setup_sz(char *str)
                tr_pages = 0x15557000UL;
 
        size = memparse(str, &str);
-       if (*str || (size & (size-1)) || !(tr_pages & size) ||
+       if (*str || !is_power_of_2(size) || !(tr_pages & size) ||
                size <= PAGE_SIZE ||
                size >= (1UL << PAGE_SHIFT << MAX_ORDER)) {
                printk(KERN_WARNING "Invalid huge page size specified\n");
index b772543..54e8973 100644 (file)
@@ -21,7 +21,8 @@
 xp_nofault_PIOR:
        mov     r8=r0                   // Stage a success return value
        ld8.acq r9=[r32];;              // PIO Read the specified register
-       adds    r9=1,r9                 // Add to force a consume
+       adds    r9=1,r9;;               // Add to force consumption
+       or      r9=r9,r9;;              // Or to force consumption
        br.ret.sptk.many b0;;           // Return success
 
        .global xp_error_PIOR
index 04a8256..b42bfca 100644 (file)
@@ -15,6 +15,7 @@
 #include <asm/sn/pcibus_provider_defs.h>
 #include <asm/sn/pcidev.h>
 #include <asm/sn/sn_sal.h>
+#include <asm/sn/pic.h>
 #include <asm/sn/sn2/sn_hwperf.h>
 #include "xtalk/xwidgetdev.h"
 #include "xtalk/hubdev.h"
@@ -130,9 +131,9 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
        }
 
        memcpy(soft, prom_bussoft, sizeof(struct pcibus_info));
-       soft->pbi_buscommon.bs_base =
-           (((u64) soft->pbi_buscommon.
-             bs_base << 4) >> 4) | __IA64_UNCACHED_OFFSET;
+       soft->pbi_buscommon.bs_base = (unsigned long)
+               ioremap(REGION_OFFSET(soft->pbi_buscommon.bs_base),
+                       sizeof(struct pic));
 
        spin_lock_init(&soft->pbi_lock);
 
index b9bedbd..d798dd4 100644 (file)
@@ -610,7 +610,9 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
                return NULL;
 
        memcpy(tioca_common, prom_bussoft, sizeof(struct tioca_common));
-       tioca_common->ca_common.bs_base |= __IA64_UNCACHED_OFFSET;
+       tioca_common->ca_common.bs_base = (unsigned long)
+               ioremap(REGION_OFFSET(tioca_common->ca_common.bs_base),
+                       sizeof(struct tioca_common));
 
        /* init kernel-private area */
 
index f4c0b96..84b72b2 100644 (file)
@@ -1002,7 +1002,9 @@ tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
                return NULL;
 
        memcpy(tioce_common, prom_bussoft, sizeof(struct tioce_common));
-       tioce_common->ce_pcibus.bs_base |= __IA64_UNCACHED_OFFSET;
+       tioce_common->ce_pcibus.bs_base = (unsigned long)
+               ioremap(REGION_OFFSET(tioce_common->ce_pcibus.bs_base),
+                       sizeof(struct tioce_common));
 
        tioce_kern = tioce_kern_init(tioce_common);
        if (tioce_kern == NULL) {
index d848f1a..81ec559 100644 (file)
@@ -54,7 +54,7 @@ static struct resource jazz_io_resources[] = {
                .start  = 0x40,
                .end    = 0x5f,
                .name   = "timer",
-               .end    = IORESOURCE_BUSY
+               .flags  = IORESOURCE_BUSY
        }, {
                .start  = 0x80,
                .end    = 0x8f,
index 047246a..b42cbf1 100644 (file)
@@ -810,3 +810,12 @@ asmlinkage long compat_sys_request_key(const char __user *_type,
        return sys_request_key(_type, _description, _callout_info, destringid);
 }
 
+asmlinkage long compat_sys_sync_file_range2(int fd, unsigned int flags,
+                                  unsigned offset_hi, unsigned offset_lo,
+                                  unsigned nbytes_hi, unsigned nbytes_lo)
+{
+       loff_t offset = ((loff_t)offset_hi << 32) | offset_lo;
+       loff_t nbytes = ((loff_t)nbytes_hi << 32) | nbytes_lo;
+
+       return sys_sync_file_range(fd, offset, nbytes, flags);
+}
index 2d7a510..c6401f9 100644 (file)
@@ -31,7 +31,7 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday)
        mr      r11,r3                  /* r11 holds tv */
        mr      r10,r4                  /* r10 holds tz */
        bl      V_LOCAL_FUNC(__get_datapage)    /* get data page */
-       cmpldi  r10,0                   /* check if tv is NULL */
+       cmpldi  r11,0                   /* check if tv is NULL */
        beq     2f
        bl      V_LOCAL_FUNC(__do_get_xsec)     /* get xsec from tb & kernel */
        lis     r7,15                   /* r7 = 1000000 = USEC_PER_SEC */
index adfae9d..bfc59a1 100644 (file)
@@ -600,8 +600,9 @@ static const char *sata_spd_string(unsigned int spd)
 
 void ata_dev_disable(struct ata_device *dev)
 {
-       if (ata_dev_enabled(dev) && ata_msg_drv(dev->ap)) {
-               ata_dev_printk(dev, KERN_WARNING, "disabled\n");
+       if (ata_dev_enabled(dev)) {
+               if (ata_msg_drv(dev->ap))
+                       ata_dev_printk(dev, KERN_WARNING, "disabled\n");
                ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO0 |
                                             ATA_DNXFER_QUIET);
                dev->class++;
@@ -983,11 +984,6 @@ static u64 ata_hpa_resize(struct ata_device *dev)
        else
                hpa_sectors = ata_read_native_max_address(dev);
 
-       /* if no hpa, both should be equal */
-       ata_dev_printk(dev, KERN_INFO, "%s 1: sectors = %lld, "
-                               "hpa_sectors = %lld\n",
-               __FUNCTION__, (long long)sectors, (long long)hpa_sectors);
-
        if (hpa_sectors > sectors) {
                ata_dev_printk(dev, KERN_INFO,
                        "Host Protected Area detected:\n"
@@ -1009,7 +1005,11 @@ static u64 ata_hpa_resize(struct ata_device *dev)
                                return hpa_sectors;
                        }
                }
-       }
+       } else if (hpa_sectors < sectors)
+               ata_dev_printk(dev, KERN_WARNING, "%s 1: hpa sectors (%lld) "
+                              "is smaller than sectors (%lld)\n", __FUNCTION__,
+                              (long long)hpa_sectors, (long long)sectors);
+
        return sectors;
 }
 
@@ -2046,10 +2046,6 @@ int ata_dev_configure(struct ata_device *dev)
                dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128,
                                         dev->max_sectors);
 
-       /* limit ATAPI DMA to R/W commands only */
-       if (ata_device_blacklisted(dev) & ATA_HORKAGE_DMA_RW_ONLY)
-               dev->horkage |= ATA_HORKAGE_DMA_RW_ONLY;
-
        if (ap->ops->dev_config)
                ap->ops->dev_config(dev);
 
@@ -3780,8 +3776,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
        { "IOMEGA  ZIP 250       ATAPI", NULL,  ATA_HORKAGE_NODMA }, /* temporary fix */
 
        /* Weird ATAPI devices */
-       { "TORiSAN DVD-ROM DRD-N216", NULL,     ATA_HORKAGE_MAX_SEC_128 |
-                                               ATA_HORKAGE_DMA_RW_ONLY },
+       { "TORiSAN DVD-ROM DRD-N216", NULL,     ATA_HORKAGE_MAX_SEC_128 },
 
        /* Devices we expect to fail diagnostics */
 
@@ -4109,6 +4104,7 @@ static void ata_fill_sg(struct ata_queued_cmd *qc)
        if (idx)
                ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
 }
+
 /**
  *     ata_check_atapi_dma - Check whether ATAPI DMA can be supported
  *     @qc: Metadata associated with taskfile to check
@@ -4126,33 +4122,19 @@ static void ata_fill_sg(struct ata_queued_cmd *qc)
 int ata_check_atapi_dma(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
-       int rc = 0; /* Assume ATAPI DMA is OK by default */
-
-       /* some drives can only do ATAPI DMA on read/write */
-       if (unlikely(qc->dev->horkage & ATA_HORKAGE_DMA_RW_ONLY)) {
-               struct scsi_cmnd *cmd = qc->scsicmd;
-               u8 *scsicmd = cmd->cmnd;
-
-               switch (scsicmd[0]) {
-               case READ_10:
-               case WRITE_10:
-               case READ_12:
-               case WRITE_12:
-               case READ_6:
-               case WRITE_6:
-                       /* atapi dma maybe ok */
-                       break;
-               default:
-                       /* turn off atapi dma */
-                       return 1;
-               }
-       }
+
+       /* Don't allow DMA if it isn't multiple of 16 bytes.  Quite a
+        * few ATAPI devices choke on such DMA requests.
+        */
+       if (unlikely(qc->nbytes & 15))
+               return 1;
 
        if (ap->ops->check_atapi_dma)
-               rc = ap->ops->check_atapi_dma(qc);
+               return ap->ops->check_atapi_dma(qc);
 
-       return rc;
+       return 0;
 }
+
 /**
  *     ata_qc_prep - Prepare taskfile for submission
  *     @qc: Metadata associated with taskfile to be prepared
index d807098..f7582c9 100644 (file)
@@ -336,6 +336,7 @@ void ata_scsi_error(struct Scsi_Host *host)
                        }
                        ata_port_printk(ap, KERN_ERR, "EH pending after %d "
                                        "tries, giving up\n", ATA_EH_MAX_REPEAT);
+                       ap->pflags &= ~ATA_PFLAG_EH_PENDING;
                }
 
                /* this run is complete, make sure EH info is clear */
@@ -1616,7 +1617,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
        unsigned long deadline;
        unsigned int action;
        ata_reset_fn_t reset;
-       int i, did_followup_srst, rc;
+       int i, rc;
 
        /* about to reset */
        ata_eh_about_to_do(ap, NULL, ehc->i.action & ATA_EH_RESET_MASK);
@@ -1665,8 +1666,6 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
 
        /* did prereset() screw up?  if so, fix up to avoid oopsing */
        if (!reset) {
-               ata_port_printk(ap, KERN_ERR, "BUG: prereset() requested "
-                               "invalid reset type\n");
                if (softreset)
                        reset = softreset;
                else
@@ -1689,11 +1688,9 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
 
        rc = ata_do_reset(ap, reset, classes, deadline);
 
-       did_followup_srst = 0;
        if (reset == hardreset &&
            ata_eh_followup_srst_needed(rc, classify, classes)) {
                /* okay, let's do follow-up softreset */
-               did_followup_srst = 1;
                reset = softreset;
 
                if (!reset) {
index c228df2..4ddf00c 100644 (file)
@@ -2384,11 +2384,6 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
        int using_pio = (dev->flags & ATA_DFLAG_PIO);
        int nodata = (scmd->sc_data_direction == DMA_NONE);
 
-       if (!using_pio)
-               /* Check whether ATAPI DMA is safe */
-               if (ata_check_atapi_dma(qc))
-                       using_pio = 1;
-
        memset(qc->cdb, 0, dev->cdb_len);
        memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);
 
@@ -2401,19 +2396,22 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
        }
 
        qc->tf.command = ATA_CMD_PACKET;
+       qc->nbytes = scmd->request_bufflen;
+
+       /* check whether ATAPI DMA is safe */
+       if (!using_pio && ata_check_atapi_dma(qc))
+               using_pio = 1;
 
-       /* no data, or PIO data xfer */
        if (using_pio || nodata) {
+               /* no data, or PIO data xfer */
                if (nodata)
                        qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
                else
                        qc->tf.protocol = ATA_PROT_ATAPI;
                qc->tf.lbam = (8 * 1024) & 0xff;
                qc->tf.lbah = (8 * 1024) >> 8;
-       }
-
-       /* DMA data xfer */
-       else {
+       } else {
+               /* DMA data xfer */
                qc->tf.protocol = ATA_PROT_ATAPI_DMA;
                qc->tf.feature |= ATAPI_PKT_DMA;
 
@@ -2422,8 +2420,6 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
                        qc->tf.feature |= ATAPI_DMADIR;
        }
 
-       qc->nbytes = scmd->request_bufflen;
-
        return 0;
 }
 
index 6446735..a8c0cbe 100644 (file)
@@ -931,13 +931,13 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
                .udma_mask = 0x7f,
                .port_ops = &hpt372_port_ops
        };
-       /* HPT374 - UDMA133 */
+       /* HPT374 - UDMA100 */
        static const struct ata_port_info info_hpt374 = {
                .sht = &hpt37x_sht,
                .flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
                .pio_mask = 0x1f,
                .mwdma_mask = 0x07,
-               .udma_mask = 0x7f,
+               .udma_mask = 0x3f,
                .port_ops = &hpt374_port_ops
        };
 
index dab4e7c..12c6e08 100644 (file)
@@ -690,7 +690,7 @@ static struct ata_port_operations it821x_passthru_port_ops = {
        .port_start     = it821x_port_start,
 };
 
-static void __devinit it821x_disable_raid(struct pci_dev *pdev)
+static void it821x_disable_raid(struct pci_dev *pdev)
 {
        /* Reset local CPU, and set BIOS not ready */
        pci_write_config_byte(pdev, 0x5E, 0x01);
index f5a47a4..5b4fab2 100644 (file)
@@ -7,7 +7,7 @@ menuconfig ATM_DRIVERS
        depends on NETDEVICES && ATM
        default y
 
-if ATM_DRIVERS
+if ATM_DRIVERS && NETDEVICES && ATM
 
 config ATM_DUMMY
        tristate "Dummy ATM driver"
index aa63350..30b200b 100644 (file)
        {0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
        {0x1039, 0x6330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
        {0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+       {0x18CA, 0x0040, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
+       {0x18CA, 0x0042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
        {0, 0, 0}
 
 #define tdfx_PCI_IDS \
index 2b8d6f6..70d4ede 100644 (file)
 
 #define DRIVER_AUTHOR          "SIS, Tungsten Graphics"
 #define DRIVER_NAME            "sis"
-#define DRIVER_DESC            "SIS 300/630/540"
-#define DRIVER_DATE            "20060704"
+#define DRIVER_DESC            "SIS 300/630/540 and XGI V3XE/V5/V8"
+#define DRIVER_DATE            "20070626"
 #define DRIVER_MAJOR           1
-#define DRIVER_MINOR           2
-#define DRIVER_PATCHLEVEL      1
+#define DRIVER_MINOR           3
+#define DRIVER_PATCHLEVEL      0
 
 enum sis_family {
        SIS_OTHER = 0,
index 8e87261..8500141 100644 (file)
@@ -556,7 +556,7 @@ static struct pci_device_id ioat_pci_tbl[] = {
        { 0, }
 };
 
-static struct pci_driver ioat_pci_drv = {
+static struct pci_driver ioat_pci_driver = {
        .name   = "ioatdma",
        .id_table = ioat_pci_tbl,
        .probe  = ioat_probe,
@@ -699,7 +699,7 @@ static int __devinit ioat_probe(struct pci_dev *pdev,
        if (err)
                goto err_set_dma_mask;
 
-       err = pci_request_regions(pdev, ioat_pci_drv.name);
+       err = pci_request_regions(pdev, ioat_pci_driver.name);
        if (err)
                goto err_request_regions;
 
@@ -828,14 +828,14 @@ static int __init ioat_init_module(void)
        /* if forced, worst case is that rmmod hangs */
        __unsafe(THIS_MODULE);
 
-       return pci_register_driver(&ioat_pci_drv);
+       return pci_register_driver(&ioat_pci_driver);
 }
 
 module_init(ioat_init_module);
 
 static void __exit ioat_exit_module(void)
 {
-       pci_unregister_driver(&ioat_pci_drv);
+       pci_unregister_driver(&ioat_pci_driver);
 }
 
 module_exit(ioat_exit_module);
index efd2b74..03ef88a 100644 (file)
@@ -11,7 +11,7 @@ menuconfig DVB_CAPTURE_DRIVERS
        ---help---
          Say Y to select Digital TV adapters
 
-if DVB_CAPTURE_DRIVERS
+if DVB_CAPTURE_DRIVERS && DVB_CORE
 
 comment "Supported SAA7146 based PCI Adapters"
        depends on DVB_CORE && PCI && I2C
index a6ac82a..194b102 100644 (file)
@@ -9,7 +9,7 @@ menuconfig RADIO_ADAPTERS
        ---help---
          Say Y here to enable selecting AM/FM radio adapters.
 
-if RADIO_ADAPTERS
+if RADIO_ADAPTERS && VIDEO_DEV
 
 config RADIO_CADET
        tristate "ADS Cadet AM/FM Tuner"
index 4cca551..4d45a40 100644 (file)
@@ -11,7 +11,7 @@ menuconfig VIDEO_CAPTURE_DRIVERS
          webcams, analog TV, and hybrid analog/digital TV.
          Some of those devices also supports FM radio.
 
-if VIDEO_CAPTURE_DRIVERS
+if VIDEO_CAPTURE_DRIVERS && VIDEO_DEV
 
 config VIDEO_ADV_DEBUG
        bool "Enable advanced debug functionality"
@@ -347,7 +347,7 @@ endmenu # encoder / decoder chips
 
 config VIDEO_VIVI
        tristate "Virtual Video Driver"
-       depends on VIDEO_V4L2 && !SPARC32 && !SPARC64 && PCI && VIDEO_DEV
+       depends on VIDEO_V4L2 && !SPARC32 && !SPARC64 && PCI
        select VIDEO_BUF
        default n
        ---help---
@@ -691,7 +691,7 @@ menuconfig V4L_USB_DRIVERS
        depends on USB
        default y
 
-if V4L_USB_DRIVERS
+if V4L_USB_DRIVERS && USB
 
 source "drivers/media/video/pvrusb2/Kconfig"
 
index 7b56041..30395d6 100644 (file)
@@ -1005,7 +1005,7 @@ int saa7134_tvaudio_init2(struct saa7134_dev *dev)
 int saa7134_tvaudio_fini(struct saa7134_dev *dev)
 {
        /* shutdown tvaudio thread */
-       if (dev->thread.pid >= 0) {
+       if (dev->thread.pid > 0) {
                dev->thread.shutdown = 1;
                wake_up_interruptible(&dev->thread.wq);
                wait_for_completion(&dev->thread.exit);
index c39ab80..c27cfce 100644 (file)
@@ -34,7 +34,7 @@
  *
  *
  */
-
+#include <linux/dma-mapping.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
index b261be1..c302b1a 100644 (file)
@@ -335,11 +335,11 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu)
        hwm = min(hwm, MAC_RXFIFO_SIZE - 8192);
        lwm = min(3 * (int)mtu, MAC_RXFIFO_SIZE / 4);
 
-       v = t3_read_reg(adap, A_XGM_RXFIFO_CFG + mac->offset);
        if (adap->params.rev == T3_REV_B2 &&
            (t3_read_reg(adap, A_XGM_RX_CTRL + mac->offset) & F_RXEN)) {
                disable_exact_filters(mac);
-               t3_set_reg_field(adap, A_XGM_RXFIFO_CFG + mac->offset,
+               v = t3_read_reg(adap, A_XGM_RX_CFG + mac->offset);
+               t3_set_reg_field(adap, A_XGM_RX_CFG + mac->offset,
                                 F_ENHASHMCAST | F_COPYALLFRAMES, F_DISBCAST);
 
                /* drain rx FIFO */
@@ -347,11 +347,12 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu)
                                    A_XGM_RX_MAX_PKT_SIZE_ERR_CNT +
                                    mac->offset,
                                    1 << 31, 1, 20, 5)) {
-                       t3_write_reg(adap, A_XGM_RXFIFO_CFG + mac->offset, v);
+                       t3_write_reg(adap, A_XGM_RX_CFG + mac->offset, v);
                        enable_exact_filters(mac);
                        return -EIO;
                }
                t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu);
+               t3_write_reg(adap, A_XGM_RX_CFG + mac->offset, v);
                enable_exact_filters(mac);
        } else
                t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu);
@@ -362,6 +363,7 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu)
         */
        hwm = rx_fifo_hwm(mtu);
        lwm = min(3 * (int)mtu, MAC_RXFIFO_SIZE / 4);
+       v = t3_read_reg(adap, A_XGM_RXFIFO_CFG + mac->offset);
        v &= ~V_RXFIFOPAUSELWM(M_RXFIFOPAUSELWM);
        v |= V_RXFIFOPAUSELWM(lwm / 8);
        if (G_RXFIFOPAUSEHWM(v))
index 9043bf4..2803b37 100644 (file)
@@ -416,6 +416,13 @@ static int __init smsc_ircc_legacy_probe(void)
 {
        int ret = 0;
 
+#ifdef CONFIG_PCI
+       if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir, ircc_dma, ircc_irq) < 0) {
+               /* Ignore errors from preconfiguration */
+               IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name);
+       }
+#endif
+
        if (ircc_fir > 0 && ircc_sir > 0) {
                IRDA_MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir);
                IRDA_MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir);
@@ -459,13 +466,6 @@ static int __init smsc_ircc_init(void)
                return ret;
        }
 
-#ifdef CONFIG_PCI
-       if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir, ircc_dma, ircc_irq) < 0) {
-               /* Ignore errors from preconfiguration */
-               IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name);
-       }
-#endif
-
        dev_count = 0;
 
        if (smsc_nopnp || !pnp_platform_devices ||
index 5d658bc..e8f55d8 100644 (file)
@@ -19,7 +19,7 @@ menuconfig NET_PCMCIA
 
          If unsure, say N.
 
-if NET_PCMCIA
+if NET_PCMCIA && PCMCIA
 
 config PCMCIA_3C589
        tristate "3Com 3c589 PCMCIA support"
index fc4aee9..fc2f0e6 100644 (file)
@@ -131,7 +131,8 @@ static int mdio_bus_match(struct device *dev, struct device_driver *drv)
        struct phy_device *phydev = to_phy_device(dev);
        struct phy_driver *phydrv = to_phy_driver(drv);
 
-       return (phydrv->phy_id == (phydev->phy_id & phydrv->phy_id_mask));
+       return ((phydrv->phy_id & phydrv->phy_id_mask) ==
+               (phydev->phy_id & phydrv->phy_id_mask));
 }
 
 /* Suspend and resume.  Copied from platform_suspend and
index 792716b..596222b 100644 (file)
@@ -84,7 +84,7 @@ static int vsc824x_config_intr(struct phy_device *phydev)
 
 /* Vitesse 824x */
 static struct phy_driver vsc8244_driver = {
-       .phy_id         = 0x000fc6c2,
+       .phy_id         = 0x000fc6c0,
        .name           = "Vitesse VSC8244",
        .phy_id_mask    = 0x000fffc0,
        .features       = PHY_GBIT_FEATURES,
index c6ba3de..09078ff 100644 (file)
@@ -2868,6 +2868,7 @@ static void tx_intr_handler(struct fifo_info *fifo_data)
        struct tx_curr_get_info get_info, put_info;
        struct sk_buff *skb;
        struct TxD *txdlp;
+       u8 err_mask;
 
        get_info = fifo_data->tx_curr_get_info;
        memcpy(&put_info, &fifo_data->tx_curr_put_info, sizeof(put_info));
@@ -2886,8 +2887,8 @@ static void tx_intr_handler(struct fifo_info *fifo_data)
                        }
 
                        /* update t_code statistics */
-                       err >>= 48;
-                       switch(err) {
+                       err_mask = err >> 48;
+                       switch(err_mask) {
                                case 2:
                                        nic->mac_control.stats_info->sw_stat.
                                                        tx_buf_abort_cnt++;
@@ -6805,6 +6806,7 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp)
        u16 l3_csum, l4_csum;
        unsigned long long err = rxdp->Control_1 & RXD_T_CODE;
        struct lro *lro;
+       u8 err_mask;
 
        skb->dev = dev;
 
@@ -6813,8 +6815,8 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp)
                if (err & 0x1) {
                        sp->mac_control.stats_info->sw_stat.parity_err_cnt++;
                }
-               err >>= 48;
-               switch(err) {
+               err_mask = err >> 48;
+               switch(err_mask) {
                        case 1:
                                sp->mac_control.stats_info->sw_stat.
                                rx_parity_err_cnt++;
@@ -6867,9 +6869,9 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp)
                * Note that in this case, since checksum will be incorrect,
                * stack will validate the same.
                */
-               if (err != 0x5) {
-                       DBG_PRINT(ERR_DBG, "%s: Rx error Value: 0x%llx\n",
-                               dev->name, err);
+               if (err_mask != 0x5) {
+                       DBG_PRINT(ERR_DBG, "%s: Rx error Value: 0x%x\n",
+                               dev->name, err_mask);
                        sp->stats.rx_crc_errors++;
                        sp->mac_control.stats_info->sw_stat.mem_freed 
                                += skb->truesize;
index 277df50..967a8e2 100644 (file)
@@ -107,31 +107,61 @@ static void quirk_sb16audio_resources(struct pnp_dev *dev)
        return;
 }
 
-static void quirk_smc_enable(struct pnp_dev *dev)
+static int quirk_smc_fir_enabled(struct pnp_dev *dev)
 {
-       unsigned int firbase;
+       unsigned long firbase;
+       u8 bank, high, low, chip;
+
+       if (!pnp_port_valid(dev, 1))
+               return 0;
+
+       firbase = pnp_port_start(dev, 1);
+
+       /* Select register bank 3 */
+       bank = inb(firbase + 7);
+       bank &= 0xf0;
+       bank |= 3;
+       outb(bank, firbase + 7);
+
+       high = inb(firbase + 0);
+       low  = inb(firbase + 1);
+       chip = inb(firbase + 2);
+
+       /* This corresponds to the check in smsc_ircc_present() */
+       if (high == 0x10 && low == 0xb8 && (chip == 0xf1 || chip == 0xf2))
+               return 1;
+
+       return 0;
+}
 
-       if (!dev->active || !pnp_port_valid(dev, 1))
+static void quirk_smc_enable(struct pnp_dev *dev)
+{
+       /*
+        * If the BIOS left the device disabled, or it is enabled and
+        * responding correctly, we're in good shape.
+        */
+       if (!dev->active || quirk_smc_fir_enabled(dev))
                return;
 
        /*
-        * On the HP/Compaq nw8240 (and probably other similar machines),
-        * there is an SMCF010 device with two I/O port regions:
-        *
-        *      0x3e8-0x3ef SIR
-        *      0x100-0x10f FIR
+        * Sometimes the BIOS claims the device is enabled, but it reports
+        * the wrong FIR resources or doesn't properly configure ISA or LPC
+        * bridges on the way to the device.
         *
-        * _STA reports the device is enabled, but in fact, the BIOS
-        * neglects to enable the FIR range.  Fortunately, it does fully
-        * enable the device if we call _SRS.
+        * HP nc6000 and nc8000/nw8000 laptops have known problems like
+        * this.  Fortunately, they do fix things up if we auto-configure
+        * the device using its _PRS and _SRS methods.
         */
-       firbase = pnp_port_start(dev, 1);
-       if (inb(firbase + 0x7 /* IRCC_MASTER */) == 0xff) {
-               pnp_err("%s (%s) enabled but not responding, disabling and "
-                       "re-enabling", dev->dev.bus_id, pnp_dev_name(dev));
-               pnp_disable_dev(dev);
-               pnp_activate_dev(dev);
-       }
+       dev_err(&dev->dev, "%s device not responding, auto-configuring "
+               "resources\n", dev->id->id);
+
+       pnp_disable_dev(dev);
+       pnp_init_resource_table(&dev->res);
+       pnp_auto_config_dev(dev);
+       pnp_activate_dev(dev);
+
+       if (!quirk_smc_fir_enabled(dev))
+               dev_err(&dev->dev, "giving up; try \"smsc-ircc2.nopnp\"\n");
 }
 
 
index d09f209..00924fe 100644 (file)
@@ -503,7 +503,8 @@ mpsc_sdma_intr_ack(struct mpsc_port_info *pi)
 
        if (pi->mirror_regs)
                pi->shared_regs->SDMA_INTR_CAUSE_m = 0;
-       writel(0, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE);
+       writeb(0x00, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE +
+              pi->port.line);
        return;
 }
 
index 8d3455d..2fbff63 100644 (file)
@@ -2290,15 +2290,6 @@ static int __devinit aty_init(struct fb_info *info)
        init_waitqueue_head(&par->vblank.wait);
        spin_lock_init(&par->int_lock);
 
-#ifdef CONFIG_PPC_PMAC
-       /* The Apple iBook1 uses non-standard memory frequencies. We detect it
-        * and set the frequency manually. */
-       if (machine_is_compatible("PowerBook2,1")) {
-               par->pll_limits.mclk = 70;
-               par->pll_limits.xclk = 53;
-       }
-#endif
-
 #ifdef CONFIG_FB_ATY_GX
        if (!M64_HAS(INTEGRATED)) {
                u32 stat0;
@@ -2383,6 +2374,14 @@ static int __devinit aty_init(struct fb_info *info)
                        par->pll_limits.xclk = (par->pll_limits.xclk + 1) >> 1;
        }
 #endif
+#ifdef CONFIG_PPC_PMAC
+       /* The Apple iBook1 uses non-standard memory frequencies. We detect it
+        * and set the frequency manually. */
+       if (machine_is_compatible("PowerBook2,1")) {
+               par->pll_limits.mclk = 70;
+               par->pll_limits.xclk = 53;
+       }
+#endif
 
        /* Allow command line to override clocks. */
        if (pll)
index af313bf..f48e8c5 100644 (file)
@@ -292,7 +292,7 @@ static void __init chips_hw_init(void)
                write_fr(chips_init_fr[i].addr, chips_init_fr[i].data);
 }
 
-static struct fb_fix_screeninfo chipsfb_fix __initdata = {
+static struct fb_fix_screeninfo chipsfb_fix __devinitdata = {
        .id =           "C&T 65550",
        .type =         FB_TYPE_PACKED_PIXELS,
        .visual =       FB_VISUAL_PSEUDOCOLOR,
@@ -309,7 +309,7 @@ static struct fb_fix_screeninfo chipsfb_fix __initdata = {
        .smem_len =     0x100000,       /* 1MB */
 };
 
-static struct fb_var_screeninfo chipsfb_var __initdata = {
+static struct fb_var_screeninfo chipsfb_var __devinitdata = {
        .xres = 800,
        .yres = 600,
        .xres_virtual = 800,
@@ -330,7 +330,7 @@ static struct fb_var_screeninfo chipsfb_var __initdata = {
        .vsync_len = 8,
 };
 
-static void __init init_chips(struct fb_info *p, unsigned long addr)
+static void __devinit init_chips(struct fb_info *p, unsigned long addr)
 {
        memset(p->screen_base, 0, 0x100000);
 
index 732db47..1a6937d 100644 (file)
@@ -191,11 +191,7 @@ static ssize_t w1_therm_read_bin(struct kobject *kobj, char *buf, loff_t off, si
 
                        w1_write_8(dev, W1_CONVERT_TEMP);
 
-                       while (tm) {
-                               tm = msleep_interruptible(tm);
-                               if (signal_pending(current))
-                                       flush_signals(current);
-                       }
+                       msleep(tm);
 
                        if (!w1_reset_select_slave(sl)) {
 
index 403e3ba..1b9dd9a 100644 (file)
@@ -580,5 +580,7 @@ void
 ecryptfs_write_header_metadata(char *virt,
                               struct ecryptfs_crypt_stat *crypt_stat,
                               size_t *written);
+int ecryptfs_write_zeros(struct file *file, pgoff_t index, int start,
+                        int num_zeros);
 
 #endif /* #ifndef ECRYPTFS_KERNEL_H */
index 1548be2..83e94fe 100644 (file)
@@ -800,6 +800,25 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t new_length)
                        goto out_fput;
                }
        } else { /* new_length < i_size_read(inode) */
+               pgoff_t index = 0;
+               int end_pos_in_page = -1;
+
+               if (new_length != 0) {
+                       index = ((new_length - 1) >> PAGE_CACHE_SHIFT);
+                       end_pos_in_page = ((new_length - 1) & ~PAGE_CACHE_MASK);
+               }
+               if (end_pos_in_page != (PAGE_CACHE_SIZE - 1)) {
+                       if ((rc = ecryptfs_write_zeros(&fake_ecryptfs_file,
+                                                      index,
+                                                      (end_pos_in_page + 1),
+                                                      ((PAGE_CACHE_SIZE - 1)
+                                                       - end_pos_in_page)))) {
+                               printk(KERN_ERR "Error attempting to zero out "
+                                      "the remainder of the end page on "
+                                      "reducing truncate; rc = [%d]\n", rc);
+                               goto out_fput;
+                       }
+               }
                vmtruncate(inode, new_length);
                rc = ecryptfs_write_inode_size_to_metadata(
                        lower_file, lower_dentry->d_inode, inode, dentry,
@@ -875,9 +894,54 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
        struct ecryptfs_crypt_stat *crypt_stat;
 
        crypt_stat = &ecryptfs_inode_to_private(dentry->d_inode)->crypt_stat;
-       lower_dentry = ecryptfs_dentry_to_lower(dentry);
+       if (!(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED))
+               ecryptfs_init_crypt_stat(crypt_stat);
        inode = dentry->d_inode;
        lower_inode = ecryptfs_inode_to_lower(inode);
+       lower_dentry = ecryptfs_dentry_to_lower(dentry);
+       mutex_lock(&crypt_stat->cs_mutex);
+       if (S_ISDIR(dentry->d_inode->i_mode))
+               crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED);
+       else if (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED)
+                || !(crypt_stat->flags & ECRYPTFS_KEY_VALID)) {
+               struct vfsmount *lower_mnt;
+               struct file *lower_file = NULL;
+               struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
+               int lower_flags;
+
+               lower_mnt = ecryptfs_dentry_to_lower_mnt(dentry);
+               lower_flags = O_RDONLY;
+               if ((rc = ecryptfs_open_lower_file(&lower_file, lower_dentry,
+                                                  lower_mnt, lower_flags))) {
+                       printk(KERN_ERR
+                              "Error opening lower file; rc = [%d]\n", rc);
+                       mutex_unlock(&crypt_stat->cs_mutex);
+                       goto out;
+               }
+               mount_crypt_stat = &ecryptfs_superblock_to_private(
+                       dentry->d_sb)->mount_crypt_stat;
+               if ((rc = ecryptfs_read_metadata(dentry, lower_file))) {
+                       if (!(mount_crypt_stat->flags
+                             & ECRYPTFS_PLAINTEXT_PASSTHROUGH_ENABLED)) {
+                               rc = -EIO;
+                               printk(KERN_WARNING "Attempt to read file that "
+                                      "is not in a valid eCryptfs format, "
+                                      "and plaintext passthrough mode is not "
+                                      "enabled; returning -EIO\n");
+
+                               mutex_unlock(&crypt_stat->cs_mutex);
+                               fput(lower_file);
+                               goto out;
+                       }
+                       rc = 0;
+                       crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED);
+                       mutex_unlock(&crypt_stat->cs_mutex);
+                       fput(lower_file);
+                       goto out;
+               }
+               fput(lower_file);
+       }
+       mutex_unlock(&crypt_stat->cs_mutex);
        if (ia->ia_valid & ATTR_SIZE) {
                ecryptfs_printk(KERN_DEBUG,
                                "ia->ia_valid = [0x%x] ATTR_SIZE" " = [0x%x]\n",
index 55cec98..7d5a43c 100644 (file)
@@ -56,9 +56,6 @@ static struct page *ecryptfs_get1page(struct file *file, int index)
        return read_mapping_page(mapping, index, (void *)file);
 }
 
-static
-int write_zeros(struct file *file, pgoff_t index, int start, int num_zeros);
-
 /**
  * ecryptfs_fill_zeros
  * @file: The ecryptfs file
@@ -101,10 +98,13 @@ int ecryptfs_fill_zeros(struct file *file, loff_t new_length)
        if (old_end_page_index == new_end_page_index) {
                /* Start and end are in the same page; we just need to
                 * set a portion of the existing page to zero's */
-               rc = write_zeros(file, index, (old_end_pos_in_page + 1),
-                                (new_end_pos_in_page - old_end_pos_in_page));
+               rc = ecryptfs_write_zeros(file, index,
+                                         (old_end_pos_in_page + 1),
+                                         (new_end_pos_in_page
+                                          - old_end_pos_in_page));
                if (rc)
-                       ecryptfs_printk(KERN_ERR, "write_zeros(file=[%p], "
+                       ecryptfs_printk(KERN_ERR, "ecryptfs_write_zeros("
+                                       "file=[%p], "
                                        "index=[0x%.16x], "
                                        "old_end_pos_in_page=[d], "
                                        "(PAGE_CACHE_SIZE - new_end_pos_in_page"
@@ -117,10 +117,10 @@ int ecryptfs_fill_zeros(struct file *file, loff_t new_length)
                goto out;
        }
        /* Fill the remainder of the previous last page with zeros */
-       rc = write_zeros(file, index, (old_end_pos_in_page + 1),
+       rc = ecryptfs_write_zeros(file, index, (old_end_pos_in_page + 1),
                         ((PAGE_CACHE_SIZE - 1) - old_end_pos_in_page));
        if (rc) {
-               ecryptfs_printk(KERN_ERR, "write_zeros(file=[%p], "
+               ecryptfs_printk(KERN_ERR, "ecryptfs_write_zeros(file=[%p], "
                                "index=[0x%.16x], old_end_pos_in_page=[d], "
                                "(PAGE_CACHE_SIZE - old_end_pos_in_page)=[d]) "
                                "returned [%d]\n", file, index,
@@ -131,9 +131,10 @@ int ecryptfs_fill_zeros(struct file *file, loff_t new_length)
        index++;
        while (index < new_end_page_index) {
                /* Fill all intermediate pages with zeros */
-               rc = write_zeros(file, index, 0, PAGE_CACHE_SIZE);
+               rc = ecryptfs_write_zeros(file, index, 0, PAGE_CACHE_SIZE);
                if (rc) {
-                       ecryptfs_printk(KERN_ERR, "write_zeros(file=[%p], "
+                       ecryptfs_printk(KERN_ERR, "ecryptfs_write_zeros("
+                                       "file=[%p], "
                                        "index=[0x%.16x], "
                                        "old_end_pos_in_page=[d], "
                                        "(PAGE_CACHE_SIZE - new_end_pos_in_page"
@@ -149,9 +150,9 @@ int ecryptfs_fill_zeros(struct file *file, loff_t new_length)
        }
        /* Fill the portion at the beginning of the last new page with
         * zero's */
-       rc = write_zeros(file, index, 0, (new_end_pos_in_page + 1));
+       rc = ecryptfs_write_zeros(file, index, 0, (new_end_pos_in_page + 1));
        if (rc) {
-               ecryptfs_printk(KERN_ERR, "write_zeros(file="
+               ecryptfs_printk(KERN_ERR, "ecryptfs_write_zeros(file="
                                "[%p], index=[0x%.16x], 0, "
                                "new_end_pos_in_page=[%d]"
                                "returned [%d]\n", file, index,
@@ -400,7 +401,6 @@ out:
 static int ecryptfs_prepare_write(struct file *file, struct page *page,
                                  unsigned from, unsigned to)
 {
-       loff_t pos;
        int rc = 0;
 
        if (from == 0 && to == PAGE_CACHE_SIZE)
@@ -408,15 +408,22 @@ static int ecryptfs_prepare_write(struct file *file, struct page *page,
                                   up to date. */
        if (!PageUptodate(page))
                rc = ecryptfs_do_readpage(file, page, page->index);
-       pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
-       if (pos > i_size_read(page->mapping->host)) {
-               rc = ecryptfs_truncate(file->f_path.dentry, pos);
-               if (rc) {
-                       printk(KERN_ERR "Error on attempt to "
-                              "truncate to (higher) offset [%lld];"
-                              " rc = [%d]\n", pos, rc);
-                       goto out;
+       if (page->index != 0) {
+               loff_t end_of_prev_pg_pos =
+                       (((loff_t)page->index << PAGE_CACHE_SHIFT) - 1);
+
+               if (end_of_prev_pg_pos > i_size_read(page->mapping->host)) {
+                       rc = ecryptfs_truncate(file->f_path.dentry,
+                                              end_of_prev_pg_pos);
+                       if (rc) {
+                               printk(KERN_ERR "Error on attempt to "
+                                      "truncate to (higher) offset [%lld];"
+                                      " rc = [%d]\n", end_of_prev_pg_pos, rc);
+                               goto out;
+                       }
                }
+               if (end_of_prev_pg_pos + 1 > i_size_read(page->mapping->host))
+                       zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
        }
 out:
        return rc;
@@ -753,7 +760,7 @@ out:
 }
 
 /**
- * write_zeros
+ * ecryptfs_write_zeros
  * @file: The ecryptfs file
  * @index: The index in which we are writing
  * @start: The position after the last block of data
@@ -763,8 +770,8 @@ out:
  *
  * (start + num_zeros) must be less than or equal to PAGE_CACHE_SIZE
  */
-static
-int write_zeros(struct file *file, pgoff_t index, int start, int num_zeros)
+int
+ecryptfs_write_zeros(struct file *file, pgoff_t index, int start, int num_zeros)
 {
        int rc = 0;
        struct page *tmp_page;
index c9fd8cf..5de5061 100644 (file)
@@ -1043,6 +1043,7 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
 
        if ((ext2_use_xip(sb)) && (sb->s_blocksize != PAGE_SIZE)) {
                printk("XIP: Unsupported blocksize\n");
+               err = -EINVAL;
                goto restore_opts;
        }
 
index f1da892..3b07f26 100644 (file)
@@ -133,7 +133,8 @@ static unsigned int signalfd_poll(struct file *file, poll_table *wait)
         * the peer disconnects.
         */
        if (signalfd_lock(ctx, &lk)) {
-               if (next_signal(&lk.tsk->pending, &ctx->sigmask) > 0 ||
+               if ((lk.tsk == current &&
+                    next_signal(&lk.tsk->pending, &ctx->sigmask) > 0) ||
                    next_signal(&lk.tsk->signal->shared_pending,
                                &ctx->sigmask) > 0)
                        events |= POLLIN;
index 2f97576..7cd005e 100644 (file)
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -236,6 +236,14 @@ out:
        return ret;
 }
 
+/* It would be nice if people remember that not all the world's an i386
+   when they introduce new system calls */
+asmlinkage long sys_sync_file_range2(int fd, unsigned int flags,
+                                    loff_t offset, loff_t nbytes)
+{
+       return sys_sync_file_range(fd, offset, nbytes, flags);
+}
+
 /*
  * `endbyte' is inclusive
  */
index 250d7f1..bfdbebe 100644 (file)
 #define __NR_get_robust_list           (__NR_SYSCALL_BASE+339)
 #define __NR_splice                    (__NR_SYSCALL_BASE+340)
 #define __NR_arm_sync_file_range       (__NR_SYSCALL_BASE+341)
+#define __NR_sync_file_range2          __NR_arm_sync_file_range
 #define __NR_tee                       (__NR_SYSCALL_BASE+342)
 #define __NR_vmsplice                  (__NR_SYSCALL_BASE+343)
 #define __NR_move_pages                        (__NR_SYSCALL_BASE+344)
index 291e8ce..d3566a2 100644 (file)
@@ -696,8 +696,8 @@ static inline int
 sn_change_coherence(u64 *new_domain, u64 *old_domain)
 {
        struct ia64_sal_retval ret_stuff;
-       ia64_sal_oemcall(&ret_stuff, SN_SAL_COHERENCE, (u64)new_domain,
-                        (u64)old_domain, 0, 0, 0, 0, 0);
+       ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_COHERENCE, (u64)new_domain,
+                               (u64)old_domain, 0, 0, 0, 0, 0);
        return ret_stuff.status;
 }
 
index 700ca59..1cc3f9c 100644 (file)
@@ -311,3 +311,4 @@ COMPAT_SYS_SPU(utimensat)
 COMPAT_SYS_SPU(signalfd)
 COMPAT_SYS_SPU(timerfd)
 SYSCALL_SPU(eventfd)
+COMPAT_SYS_SPU(sync_file_range2)
index e3c28dc..f71c606 100644 (file)
 #define __NR_signalfd          305
 #define __NR_timerfd           306
 #define __NR_eventfd           307
+#define __NR_sync_file_range2  308
 
 #ifdef __KERNEL__
 
-#define __NR_syscalls          308
+#define __NR_syscalls          309
 
 #define __NR__exit __NR_exit
 #define NR_syscalls    __NR_syscalls
index 0d6ecc6..b489fc6 100644 (file)
@@ -19,7 +19,8 @@ int eventfd_signal(struct file *file, int n);
 #else /* CONFIG_EVENTFD */
 
 #define eventfd_fget(fd) ERR_PTR(-ENOSYS)
-#define eventfd_signal(f, n) 0
+static inline int eventfd_signal(struct file *file, int n)
+{ return 0; }
 
 #endif /* CONFIG_EVENTFD */
 
index 745c4f9..620da7b 100644 (file)
@@ -298,7 +298,6 @@ enum {
        ATA_HORKAGE_NODMA       = (1 << 1),     /* DMA problems */
        ATA_HORKAGE_NONCQ       = (1 << 2),     /* Don't use NCQ */
        ATA_HORKAGE_MAX_SEC_128 = (1 << 3),     /* Limit max sects to 128 */
-       ATA_HORKAGE_DMA_RW_ONLY = (1 << 4),     /* ATAPI DMA for RW only */
 };
 
 enum hsm_task_states {
@@ -1088,11 +1087,9 @@ static inline u8 ata_wait_idle(struct ata_port *ap)
 {
        u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
 
-       if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ))) {
-               if (ata_msg_warn(ap))
-                       printk(KERN_WARNING "ATA: abnormal status 0x%X on port 0x%p\n",
-                               status, ap->ioaddr.status_addr);
-       }
+       if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ)))
+               DPRINTK("ATA: abnormal status 0x%X on port 0x%p\n",
+                       status, ap->ioaddr.status_addr);
 
        return status;
 }
index b02070e..83d0ec1 100644 (file)
@@ -598,6 +598,8 @@ asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags);
 
 asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes,
                                        unsigned int flags);
+asmlinkage long sys_sync_file_range2(int fd, unsigned int flags,
+                                    loff_t offset, loff_t nbytes);
 asmlinkage long sys_get_robust_list(int pid,
                                    struct robust_list_head __user * __user *head_ptr,
                                    size_t __user *len_ptr);
index 4311101..95db8c7 100644 (file)
@@ -812,7 +812,10 @@ static void relay_file_read_consume(struct rchan_buf *buf,
        }
 
        buf->bytes_consumed += bytes_consumed;
-       read_subbuf = read_pos / buf->chan->subbuf_size;
+       if (!read_pos)
+               read_subbuf = buf->subbufs_consumed % n_subbufs;
+       else
+               read_subbuf = read_pos / buf->chan->subbuf_size;
        if (buf->bytes_consumed + buf->padding[read_subbuf] == subbuf_size) {
                if ((read_subbuf == buf->subbufs_produced % n_subbufs) &&
                    (buf->offset == subbuf_size))
@@ -841,8 +844,9 @@ static int relay_file_read_avail(struct rchan_buf *buf, size_t read_pos)
        }
 
        if (unlikely(produced - consumed >= n_subbufs)) {
-               consumed = (produced / n_subbufs) * n_subbufs;
+               consumed = produced - n_subbufs + 1;
                buf->subbufs_consumed = consumed;
+               buf->bytes_consumed = 0;
        }
        
        produced = (produced % n_subbufs) * subbuf_size + buf->offset;
@@ -899,7 +903,10 @@ static size_t relay_file_read_start_pos(size_t read_pos,
        size_t read_subbuf, padding, padding_start, padding_end;
        size_t subbuf_size = buf->chan->subbuf_size;
        size_t n_subbufs = buf->chan->n_subbufs;
+       size_t consumed = buf->subbufs_consumed % n_subbufs;
 
+       if (!read_pos)
+               read_pos = consumed * subbuf_size + buf->bytes_consumed;
        read_subbuf = read_pos / subbuf_size;
        padding = buf->padding[read_subbuf];
        padding_start = (read_subbuf + 1) * subbuf_size - padding;
index 850165d..61e4925 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
 
 struct kmem_cache *anon_vma_cachep;
 
-static inline void validate_anon_vma(struct vm_area_struct *find_vma)
-{
-#ifdef CONFIG_DEBUG_VM
-       struct anon_vma *anon_vma = find_vma->anon_vma;
-       struct vm_area_struct *vma;
-       unsigned int mapcount = 0;
-       int found = 0;
-
-       list_for_each_entry(vma, &anon_vma->head, anon_vma_node) {
-               mapcount++;
-               BUG_ON(mapcount > 100000);
-               if (vma == find_vma)
-                       found = 1;
-       }
-       BUG_ON(!found);
-#endif
-}
-
 /* This must be called under the mmap_sem. */
 int anon_vma_prepare(struct vm_area_struct *vma)
 {
@@ -121,10 +103,8 @@ void __anon_vma_link(struct vm_area_struct *vma)
 {
        struct anon_vma *anon_vma = vma->anon_vma;
 
-       if (anon_vma) {
+       if (anon_vma)
                list_add_tail(&vma->anon_vma_node, &anon_vma->head);
-               validate_anon_vma(vma);
-       }
 }
 
 void anon_vma_link(struct vm_area_struct *vma)
@@ -134,7 +114,6 @@ void anon_vma_link(struct vm_area_struct *vma)
        if (anon_vma) {
                spin_lock(&anon_vma->lock);
                list_add_tail(&vma->anon_vma_node, &anon_vma->head);
-               validate_anon_vma(vma);
                spin_unlock(&anon_vma->lock);
        }
 }
@@ -148,7 +127,6 @@ void anon_vma_unlink(struct vm_area_struct *vma)
                return;
 
        spin_lock(&anon_vma->lock);
-       validate_anon_vma(vma);
        list_del(&vma->anon_vma_node);
 
        /* We must garbage collect the anon_vma if it's empty */
index f98171f..0dcc01c 100755 (executable)
@@ -99,6 +99,11 @@ cat << EOF
 #define __IGNORE_setfsuid32
 #define __IGNORE_setfsgid32
 
+/* sync_file_range had a stupid ABI. Allow sync_file_range2 instead */
+#ifdef __NR_sync_file_range2
+#define __IGNORE_sync_file_range
+#endif
+
 /* Unmerged syscalls for AFS, STREAMS, etc. */
 #define __IGNORE_afs_syscall
 #define __IGNORE_getpmsg
index 61a323c..4f6800b 100644 (file)
@@ -953,7 +953,7 @@ static int snd_opl3sa2_isa_resume(struct device *dev, unsigned int n)
 static struct isa_driver snd_opl3sa2_isa_driver = {
        .match          = snd_opl3sa2_isa_match,
        .probe          = snd_opl3sa2_isa_probe,
-       .remove         = __devexitsnd_opl3sa2_isa_remove),
+       .remove         = __devexit_p(snd_opl3sa2_isa_remove),
 #ifdef CONFIG_PM
        .suspend        = snd_opl3sa2_isa_suspend,
        .resume         = snd_opl3sa2_isa_resume,
index f03c02c..4bae730 100644 (file)
@@ -705,7 +705,7 @@ static int ak4114_input_sw_put(struct snd_kcontrol *kcontrol,
 }
 
 
-static const struct snd_kcontrol_new ak4114_controls[] __devinitdata = {
+static struct snd_kcontrol_new ak4114_controls[] __devinitdata = {
        {
                .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
                .name = "MIODIO IEC958 Capture Input",