]> git.neil.brown.name Git - history.git/commitdiff
Import 2.2.3 2.2.3
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:18:21 +0000 (15:18 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:18:21 +0000 (15:18 -0500)
Documentation/Configure.help
arch/i386/kernel/bios32.c
arch/i386/kernel/time.c
drivers/block/nbd.c
drivers/char/bttv.c
drivers/video/fbcon.c
fs/proc/array.c
include/linux/filter.h
include/linux/nbd.h
mm/mmap.c

index cf504364cb614cbdad4ab4e9c5cb98a0b66badec..7b4cefea5a03579be5082d29685c2224130e6faa 100644 (file)
@@ -2080,7 +2080,7 @@ Auto-probe for parallel devices
 CONFIG_PNP_PARPORT
   Some IEEE-1284 conforming parallel-port devices can identify
   themselves when requested. Say Y to enable this feature, or M to
-  compile it as a module (parport_ieee1284.o). If in doubt, say N.
+  compile it as a module (parport_probe.o). If in doubt, say N.
 
 Enable loadable module support
 CONFIG_MODULES
@@ -2716,20 +2716,6 @@ CONFIG_TCP_NAGLE_OFF
   enabled. Those programs that would benefit from disabling this
   facility can do it on a per connection basis themselves.
 
-IP: Drop source routed frames
-CONFIG_IP_NOSR
-  Usually, the originator of an IP frame (packet) specifies only the
-  destination, and the hosts along the way do the routing, i.e. they
-  decide how to forward the frame. However, there is a feature of the
-  IP protocol that allows to specify the full route for a given frame
-  already at its origin. A frame with such a fully specified route is
-  called "source routed". The question now is whether we should honour
-  these route requests when such frames arrive, or if we should drop
-  all those frames instead. Honouring them can introduce security
-  problems (and is rarely a useful feature), and hence it is
-  recommended that you say Y here unless you really know what you're
-  doing.
-
 IP: Allow large windows (not recommended if <16 MB of memory)
 CONFIG_SKB_LARGE
   On high speed, long distance networks the performance limit on
@@ -4184,6 +4170,17 @@ CONFIG_SCSI_INITIO
   say M here and read Documentation/modules.txt. The module will be
   called initio.o
 
+Initio 91XXU(W) SCSI support
+CONFIG_SCSI_INITIO
+  This is support for the Initio 91XXU(W) SCSI host adapter.
+  Please read the SCSI-HOWTO, available via FTP (user: anonymous) at
+  ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
+
+  If you want to compile this as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt. The module will be
+  called initio.o
+
 PAS16 SCSI support
 CONFIG_SCSI_PAS16
   This is support for a SCSI host adapter. It is explained in section
@@ -4197,6 +4194,17 @@ CONFIG_SCSI_PAS16
   The module will be called pas16.o. If you want to compile it as a
   module, say M here and read Documentation/modules.txt.
 
+Initio INI-A100U2W SCSI support
+CONFIG_SCSI_INIA100
+  This is support for the Initio INI-A100U2W SCSI host adapter.
+  Please read the SCSI-HOWTO, available via FTP (user: anonymous) at
+  ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
+
+  If you want to compile this as a module ( = code which can be 
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt. The module will be
+  called a100u2w.o
+
 PCI2000 support
 CONFIG_SCSI_PCI2000
   This is support for the PCI2000I EIDE interface card which acts as a
@@ -4389,6 +4397,23 @@ CONFIG_SCSI_NCR53C406A
   say M here and read Documentation/modules.txt. The module will be
   called NCR53c406.o.
 
+Symbios Logic sym53c416 support
+CONFIG_SCSI_SYM53C416
+  This is support for the sym53c416 SCSI host adapter. This is the
+  SCSI adapter that comes with some hp scanners. This driver requires that
+  the sym53c416 is configured first using some sort of pnp configuration
+  program (e.g. isapnp) or by a PnP aware BIOS. If you are using isapnp then
+  you need to compile it as a module and then load it using insmod after
+  isapnp has run. The parameters of the configured card(s) should be passed
+  to the driver. The format is:
+
+    insmod sym53c416 sym53c416=<base>,<irq> [sym53c416_1=<base>,<irq>]
+
+  There is support for up to four adapters. If you want to compile this
+  driver as a module ( = code which can be inserted in and removed from
+  the running kernel whenever you want), say M here and read
+  Documentation/modules.txt.
+
 Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support
 CONFIG_SCSI_DC390T
   This driver supports PCI SCSI host adapters based on the Am53C974A
@@ -8914,6 +8939,20 @@ CONFIG_SOUND_OSS
   here (the module will be called sound.o) if you haven't found a
   driver for your sound card above, then pick your driver from the
   list below.
+
+Persistent DMA buffers
+CONFIG_SOUND_DMAP
+  Linux can often have problems allocating DMA buffers for ISA cards on
+  machines with more than 16MB of RAM. This is because ISA DMA buffers
+  must exist below the 16MB boundry and it is quite possible that we
+  can't find a large enough free block in this region after the machine
+  has been running for any amount of time. If you say Y here the DMA
+  buffers (64Kb) will be allocated at boot time and kept until the
+  shutdown. This option is only usefull if you say Y to OSS sound
+  modules. If you say M to OSS sound modules then you can just pass to
+  the sound.o module a "dmabuf=1" command-line argument.
+
+  Say Y unless you have 16MB or less RAM or a PCI sound card.
  
 Support for Aztech Sound Galaxy (non-PnP) cards
 CONFIG_SOUND_SGALAXY
@@ -10493,6 +10532,44 @@ SF16FMI I/O port (0x284 or 0x384)
 CONFIG_RADIO_SF16FMI_PORT
   Enter the I/O port of your SF16FMI radio card.
 
+Typhoon Radio
+CONFIG_RADIO_TYPHOON
+  Choose Y here if you have one of these FM radio cards, and then fill
+  in the port address and the frequency used for muting below.
+
+  In order to control your radio card, you will need to use programs
+  that are compatible with the Video for Linux API. Information on 
+  this API and pointers to "v4l" programs may be found on the WWW at
+  http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW,
+  you need to have access to a machine on the Internet that has a 
+  program like lynx or netscape.
+
+  If you want to compile this driver as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt. The module will be
+  called radio-typhoon.o
+
+Support for /proc/radio-typhoon
+CONFIG_RADIO_TYPHOON_PROC_FS
+  Say Y here if you want the typhoon radio card driver to write
+  status information (frequency, volume, muted, mute frequency,
+  base address) to /proc/radio-typhoon. The file can be viewed with
+  your favorite pager (i.e. use "more /proc/radio-typhoon" or "less
+  /proc/radio-typhoon" or simply "cat /proc/radio-typhoon").
+
+Typhoon I/O port (0x316 or 0x336)
+CONFIG_RADIO_TYPHOON_PORT
+  Enter the I/O port of your Typhoon or EcoRadio radio card.
+
+Typhoon frequency set when muting the device (kHz)
+CONFIG_RADIO_TYPHOON_MUTEFREQ
+  Enter the frequency used for muting the radio. The device is never
+  completely silent. If the volume is just turned down, you can still
+  hear silent voices and music. For that reason, the frequency of the
+  radio device is set to the frequency you can enter here whenever
+  the device is muted. There should be no local radio station at that
+  frequency.
+
 Zoltrix Radio
 CONFIG_RADIO_ZOLTRIX
   Choose Y here if you have one of these FM radio cards, and then fill
@@ -10738,24 +10815,10 @@ CONFIG_IRLAN
   Documentation/modules.txt. IrLAN emulates an Ethernet and makes it
   possible to put up a wireless LAN using infrared beams.
 
-IrLAN Client Protocol 
-CONFIG_IRLAN_CLIENT
-  Say Y here if you want to build support for the IrLAN client
-  protocol. If you want to compile it as a module, say M here and read
-  Documentation/modules.txt. The IrLAN client protocol can be used to
-  talk with infrared access points like the HP NetbeamIR, or the ESI
-  JetEye NET. You can also connect to another Linux machine running
-  the IrLAN server protocol for ad-hoc networking!
-
-IrLAN Server Protocol 
-CONFIG_IRLAN_SERVER
-  Say Y here if you want to build support for infrared LAN access. If
-  you want to compile it as a module, say M here and read
-  Documentation/modules.txt. The IrLAN server protocol makes it
-  possible to set up a wireless LAN with a machine running the IrLAN
-  client protocol. Notice that the IrLAN server protocol currently
-  only emulates an access point and does not implement the ad-hoc
-  specification of IrLAN, but this will not be noticeable by the user.
+  The IrLAN protocol can be used to talk with infrared access points 
+  like the HP NetbeamIR, or the ESI JetEye NET. You can also connect 
+  to another Linux machine running the IrLAN protocol for ac-hoc 
+  networking!
 
 IrOBEX Protocol
 CONFIG_IROBEX
@@ -10868,6 +10931,15 @@ CONFIG_TEKRAM_DONGLE
   used by IrTTY. To activate support for Tekram dongles you will have
   to insert "irattach -d tekram" in the /etc/irda/drivers script.
 
+Greenwich GIrBIL dongle
+CONFIG_GIRBIL_DONGLE
+  Say Y here if you want to build support for the Greenwich GIrBIL
+  dongle. If you want to compile it as a module, say M here and read
+  Documentation/modules.txt. The Greenwich dongle attaches to the
+  normal 9-pin serial port connector, and can currently only be used
+  by IrTTY. To activate support for Greenwich dongles you will have to
+  insert "irattach -d girbil" in the /etc/irda/drivers script.
+
 VME (Motorola and BVM) support
 CONFIG_VME
   Say Y here if you want to build a kernel for a 680x0 based VME
index 9bf2fdce2ba6aceaa0a2815aeb96384daaf38a79..af67d505bd764efaf121cd325c67261709ae4891 100644 (file)
@@ -875,8 +875,8 @@ static void __init pcibios_fixup_io_addr(struct pci_dev *dev, int idx)
                printk("PCI: Unassigned I/O space for %02x:%02x\n", bus, devfn);
                return;
        }
-       if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && idx < 4 ||
-           (dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
+       if (((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && idx < 4) ||
+            (dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
                /*
                 * In case the BIOS didn't assign an address 0--3 to an IDE
                 * controller, we don't try to fix it as it means "use default
index b556dd7911402df02668f5bc496a0fb910d442b9..a1d737b7660bfca8a6ca151bf730dacd0a816faa 100644 (file)
@@ -543,70 +543,72 @@ static struct irqaction irq0  = { timer_interrupt, SA_INTERRUPT, 0, "timer", NUL
  * device.
  */
 
+#define CALIBRATE_LATCH        (5 * LATCH)
+#define CALIBRATE_TIME (5 * 1000020/HZ)
+
 __initfunc(static unsigned long calibrate_tsc(void))
 {
-       unsigned long retval;
+       /* Set the Gate high, disable speaker */
+       outb((inb(0x61) & ~0x02) | 0x01, 0x61);
 
-       __asm__( /* set the Gate high, program CTC channel 2 for mode 0
-                * (interrupt on terminal count mode), binary count, 
-                * load 5 * LATCH count, (LSB and MSB)
-                * to begin countdown, read the TSC and busy wait.
-                * BTW LATCH is calculated in timex.h from the HZ value
-                */
+       /*
+        * Now let's take care of CTC channel 2
+        *
+        * Set the Gate high, program CTC channel 2 for mode 0,
+        * (interrupt on terminal count mode), binary count,
+        * load 5 * LATCH count, (LSB and MSB) to begin countdown.
+        */
+       outb(0xb0, 0x43);                       /* binary, mode 0, LSB/MSB, Ch 2 */
+       outb(CALIBRATE_LATCH & 0xff, 0x42);     /* LSB of count */
+       outb(CALIBRATE_LATCH >> 8, 0x42);       /* MSB of count */
+
+       {
+               unsigned long startlow, starthigh;
+               unsigned long endlow, endhigh;
+               unsigned long count;
+
+               __asm__ __volatile__("rdtsc":"=a" (startlow),"=d" (starthigh));
+               count = 0;
+               do {
+                       count++;
+               } while ((inb(0x61) & 0x20) == 0);
+               __asm__ __volatile__("rdtsc":"=a" (endlow),"=d" (endhigh));
+
+               last_tsc_low = endlow;
+
+               /* Error: ECTCNEVERSET */
+               if (count <= 1)
+                       goto bad_ctc;
+
+               /* 64-bit subtract - gcc just messes up with long longs */
+               __asm__("subl %2,%0\n\t"
+                       "sbbl %3,%1"
+                       :"=a" (endlow), "=d" (endhigh)
+                       :"g" (startlow), "g" (starthigh),
+                        "0" (endlow), "1" (endhigh));
+
+               /* Error: ECPUTOOFAST */
+               if (endhigh)
+                       goto bad_ctc;
+
+               /* Error: ECPUTOOSLOW */
+               if (endlow <= CALIBRATE_TIME)
+                       goto bad_ctc;
+
+               __asm__("divl %2"
+                       :"=a" (endlow), "=d" (endhigh)
+                       :"r" (endlow), "0" (0), "1" (CALIBRATE_TIME));
+
+               return endlow;
+       }
 
-              /* Set the Gate high, disable speaker */
-              "inb  $0x61, %%al\n\t" /* Read port */
-              "andb $0xfd, %%al\n\t" /* Turn off speaker Data */
-              "orb  $0x01, %%al\n\t" /* Set Gate high */
-              "outb %%al, $0x61\n\t" /* Write port */
-
-              /* Now let's take care of CTC channel 2 */
-              "movb $0xb0, %%al\n\t" /* binary, mode 0, LSB/MSB, ch 2*/
-              "outb %%al, $0x43\n\t" /* Write to CTC command port */
-              "movl %1, %%eax\n\t"
-              "outb %%al, $0x42\n\t" /* LSB of count */
-              "shrl $8, %%eax\n\t"
-              "outb %%al, $0x42\n\t" /* MSB of count */
-
-               /* Read the TSC; counting has just started */
-               "rdtsc\n\t"
-               /* Move the value for safe-keeping. */
-               "movl %%eax, %%ebx\n\t"
-               "movl %%edx, %%ecx\n\t"
-
-              /* Busy wait. Only 50 ms wasted at boot time. */
-               "0: inb $0x61, %%al\n\t" /* Read Speaker Output Port */
-              "testb $0x20, %%al\n\t" /* Check CTC channel 2 output (bit 5) */
-               "jz 0b\n\t"
-
-               /* And read the TSC.  5 jiffies (50.00077ms) have elapsed. */
-               "rdtsc\n\t"
-
-               /* Great.  So far so good.  Store last TSC reading in
-                * last_tsc_low (only 32 lsb bits needed) */
-               "movl %%eax, last_tsc_low\n\t"
-               /* And now calculate the difference between the readings. */
-               "subl %%ebx, %%eax\n\t"
-               "sbbl %%ecx, %%edx\n\t" /* 64-bit subtract */
-              /* but probably edx = 0 at this point (see below). */
-               /* Now we have 5 * (TSC counts per jiffy) in eax.  We want
-                * to calculate TSC->microsecond conversion factor. */
-
-               /* Note that edx (high 32-bits of difference) will now be 
-                * zero iff CPU clock speed is less than 85 GHz.  Moore's
-                * law says that this is likely to be true for the next
-                * 12 years or so.  You will have to change this code to
-                * do a real 64-by-64 divide before that time's up. */
-               "movl %%eax, %%ecx\n\t"
-               "xorl %%eax, %%eax\n\t"
-               "movl %2, %%edx\n\t"
-               "divl %%ecx\n\t" /* eax= 2^32 / (1 * TSC counts per microsecond) */
-              /* Return eax for the use of fast_gettimeoffset */
-               "movl %%eax, %0\n\t"
-               : "=r" (retval)
-               : "r" (5 * LATCH), "r" (5 * 1000020/HZ)
-               : /* we clobber: */ "ax", "bx", "cx", "dx", "cc", "memory");
-       return retval;
+       /*
+        * The CTC wasn't reliable: we got a hit on the very first read,
+        * or the CPU was so fast/slow that the quotient wouldn't fit in
+        * 32 bits..
+        */
+bad_ctc:
+       return 0;
 }
 
 __initfunc(void time_init(void))
@@ -642,23 +644,26 @@ __initfunc(void time_init(void))
        dodgy_tsc();
        
        if (boot_cpu_data.x86_capability & X86_FEATURE_TSC) {
+               unsigned long tsc_quotient = calibrate_tsc();
+               if (tsc_quotient) {
+                       fast_gettimeoffset_quotient = tsc_quotient;
+                       use_tsc = 1;
 #ifndef do_gettimeoffset
-               do_gettimeoffset = do_fast_gettimeoffset;
+                       do_gettimeoffset = do_fast_gettimeoffset;
 #endif
-               do_get_fast_time = do_gettimeofday;
-               use_tsc = 1;
-               fast_gettimeoffset_quotient = calibrate_tsc();
-               
-               /* report CPU clock rate in Hz.
-                * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) =
-                * clock/second. Our precision is about 100 ppm.
-                */
-               {       unsigned long eax=0, edx=1000000;
-                       __asm__("divl %2"
-                       :"=a" (cpu_hz), "=d" (edx)
-                               :"r" (fast_gettimeoffset_quotient),
-                       "0" (eax), "1" (edx));
-                       printk("Detected %ld Hz processor.\n", cpu_hz);
+                       do_get_fast_time = do_gettimeofday;
+
+                       /* report CPU clock rate in Hz.
+                        * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) =
+                        * clock/second. Our precision is about 100 ppm.
+                        */
+                       {       unsigned long eax=0, edx=1000000;
+                               __asm__("divl %2"
+                               :"=a" (cpu_hz), "=d" (edx)
+                               :"r" (tsc_quotient),
+                               "0" (eax), "1" (edx));
+                               printk("Detected %ld Hz processor.\n", cpu_hz);
+                       }
                }
        }
 
index 8b316d116c3385b9b1ad87f51e23d89e8573210f..97a8ef97379173396af8c113fe12d36dc4bd3d08 100644 (file)
@@ -17,6 +17,7 @@
  * 97-4-11 Making protocol independent of endianity etc.
  * 97-9-13 Cosmetic changes
  * 98-5-13 Attempt to make 64-bit-clean on 64-bit machines
+ * 99-1-11 Attempt to make 64-bit-clean on 32-bit machines <ankry@mif.pg.gda.pl>
  *
  * possible FIXME: make set_sock / set_blksize / set_size / do_it one syscall
  * why not: would need verify_area and friends, would share yet another 
@@ -45,8 +46,9 @@
 #define LO_MAGIC 0x68797548
 
 static int nbd_blksizes[MAX_NBD];
+static int nbd_blksize_bits[MAX_NBD];
 static int nbd_sizes[MAX_NBD];
-static int nbd_bytesizes[MAX_NBD];
+static u64 nbd_bytesizes[MAX_NBD];
 
 static struct nbd_device nbd_dev[MAX_NBD];
 
@@ -149,7 +151,7 @@ void nbd_send_req(struct socket *sock, struct request *req)
        DEBUG("NBD: sending control, ");
        request.magic = htonl(NBD_REQUEST_MAGIC);
        request.type = htonl(req->cmd);
-       request.from = cpu_to_be64( (u64) req->sector * (u64) 512);
+       request.from = cpu_to_be64( (u64) req->sector << 9);
        request.len = htonl(req->current_nr_sectors << 9);
        memcpy(request.handle, &req, sizeof(req));
 
@@ -340,7 +342,7 @@ static int nbd_ioctl(struct inode *inode, struct file *file,
                     unsigned int cmd, unsigned long arg)
 {
        struct nbd_device *lo;
-       int dev, error;
+       int dev, error, temp;
 
        /* Anyone capable of this syscall can do *real bad* things */
 
@@ -355,6 +357,7 @@ static int nbd_ioctl(struct inode *inode, struct file *file,
        lo = &nbd_dev[dev];
        switch (cmd) {
        case NBD_CLEAR_SOCK:
+               nbd_clear_que(lo);
                if (lo->head || lo->tail) {
                        printk(KERN_ERR "nbd: Some requests are in progress -> can not turn off.\n");
                        return -EBUSY;
@@ -380,14 +383,25 @@ static int nbd_ioctl(struct inode *inode, struct file *file,
                }
                return error;
        case NBD_SET_BLKSIZE:
-               if ((arg & 511) || (arg > PAGE_SIZE))
+               if ((arg & (arg-1)) || (arg < 512) || (arg > PAGE_SIZE))
                        return -EINVAL;
                nbd_blksizes[dev] = arg;
-               nbd_sizes[dev] = arg/nbd_blksizes[dev];
+               temp = arg >> 9;
+               nbd_blksize_bits[dev] = 9;
+               while (temp > 1) {
+                       nbd_blksize_bits[dev]++;
+                       temp >>= 1;
+               }
+               nbd_sizes[dev] = nbd_bytesizes[dev] >> nbd_blksize_bits[dev];
+               nbd_bytesizes[dev] = nbd_sizes[dev] << nbd_blksize_bits[dev];
                return 0;
        case NBD_SET_SIZE:
-               nbd_bytesizes[dev] = arg;
-               nbd_sizes[dev] = arg/nbd_blksizes[dev];
+               nbd_sizes[dev] = arg >> nbd_blksize_bits[dev];
+               nbd_bytesizes[dev] = nbd_sizes[dev] << nbd_blksize_bits[dev];
+               return 0;
+       case NBD_SET_SIZE_BLOCKS:
+               nbd_sizes[dev] = arg;
+               nbd_bytesizes[dev] = arg << nbd_blksize_bits[dev];
                return 0;
        case NBD_DO_IT:
                if (!lo->file)
@@ -404,7 +418,7 @@ static int nbd_ioctl(struct inode *inode, struct file *file,
                return 0;
 #endif
        case BLKGETSIZE:
-               return put_user(nbd_bytesizes[dev]/512, (long *) arg);
+               return put_user(nbd_bytesizes[dev] << 9, (long *) arg);
        }
        return -EINVAL;
 }
@@ -420,6 +434,7 @@ static int nbd_release(struct inode *inode, struct file *file)
        if (dev >= MAX_NBD)
                return -ENODEV;
        fsync_dev(inode->i_rdev);
+       invalidate_buffers(inode->i_rdev);
        lo = &nbd_dev[dev];
        if (lo->refcnt <= 0)
                printk(KERN_ALERT "nbd_release: refcount(%d) <= 0\n", lo->refcnt);
@@ -478,8 +493,9 @@ int nbd_init(void)
                nbd_dev[i].magic = LO_MAGIC;
                nbd_dev[i].flags = 0;
                nbd_blksizes[i] = 1024;
-               nbd_bytesizes[i] = 0x7fffffff;
-               nbd_sizes[i] = nbd_bytesizes[i]/nbd_blksizes[i];
+               nbd_blksize_bits[i] = 10;
+               nbd_bytesizes[i] = 0x7ffffc00; /* 2GB */
+               nbd_sizes[i] = nbd_bytesizes[i] >> nbd_blksize_bits[i];
        }
        return 0;
 }
index caf8e5d6fe05ef12af3b4a177acbd1a08fb1a9d2..bdd126d84b1870c2c52e3478498fe0dc795e52bb 100644 (file)
@@ -1558,7 +1558,6 @@ static int bttv_open(struct video_device *dev, int flags)
 static void bttv_close(struct video_device *dev)
 {
        struct bttv *btv=(struct bttv *)dev;
-       unsigned long f;
        
        btv->user--;
        audio(btv, AUDIO_INTERN);
@@ -1580,6 +1579,7 @@ static void bttv_close(struct video_device *dev)
         *      which is more than sufficient to be sure.
         */
         
+       current->state = TASK_UNINTERRUPTIBLE;
        schedule_timeout(HZ/10);        /* Wait 1/10th of a second */
        
        /*
index b38657fae9edaba9a6d2d1942b424a16571626aa..64abb5a0126b03f34f53a0bb72701ffb6826de9a 100644 (file)
@@ -1317,10 +1317,19 @@ static int fbcon_switch(struct vc_data *conp)
     struct fb_info *info = p->fb_info;
 
     if (softback_top) {
+       int l = fbcon_softback_size / conp->vc_size_row;
        if (softback_lines)
            fbcon_set_origin(conp);
         softback_top = softback_curr = softback_in = softback_buf;
         softback_lines = 0;
+
+       if (l > 5)
+           softback_end = softback_buf + l * conp->vc_size_row;
+       else {
+           /* Smaller scrollback makes no sense, and 0 would screw
+              the operation totally */
+           softback_top = 0;
+       }
     }
     if (logo_shown >= 0) {
        struct vc_data *conp2 = vc_cons[logo_shown].d;
@@ -1620,9 +1629,6 @@ static inline int fbcon_set_font(int unit, struct console_font_op *op)
     int h = op->height;
     int size = h;
     int i, k;
-#ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
-    int j;
-#endif
     u8 *new_data, *data = op->data, *p;
 
 #ifdef CONFIG_FBCON_FONTWIDTH8_ONLY
@@ -1878,7 +1884,6 @@ static int fbcon_scrolldelta(struct vc_data *conp, int lines)
                        q -= conp->vc_size_row;
                        scr_memcpyw((u16 *)q, (u16 *)p, conp->vc_size_row);
                    }
-                   softback_lines -= i;
                    softback_in = p;
                    update_region(unit, conp->vc_origin, logo_lines * conp->vc_cols);
                }
index f3d3f812fd4f3579ed3098695d84ccae717ff308..21479eee4ae4638760dd8a7d6dba587320707bff 100644 (file)
@@ -1343,6 +1343,7 @@ static int process_unauthorized(int type, int pid)
 {
        struct task_struct *p;
        uid_t euid=0;   /* Save the euid keep the lock short */
+       int ok = 0;
                
        read_lock(&tasklist_lock);
        
@@ -1352,9 +1353,11 @@ static int process_unauthorized(int type, int pid)
         */
        
        p = find_task_by_pid(pid);
-       if(p)
-       {
+       if (p) {
                euid=p->euid;
+               ok = p->dumpable;
+               if(!cap_issubset(p->cap_permitted, current->cap_permitted))
+                       ok=0;                   
                if(!p->mm)      /* Scooby scooby doo where are you ? */
                        p=NULL;
        }
@@ -1374,7 +1377,7 @@ static int process_unauthorized(int type, int pid)
                case PROC_PID_CPU:
                        return 0;       
        }
-       if(capable(CAP_DAC_OVERRIDE) || current->fsuid == euid)
+       if(capable(CAP_DAC_OVERRIDE) || (current->fsuid == euid && ok))
                return 0;
        return 1;
 }
index 4c016a90995b3364c68cdb8db93f091fd9dd1f90..58ad8b1bc0ac394b8ce99f0667387719d1995b66 100644 (file)
@@ -26,8 +26,8 @@ struct sock_filter    /* Filter block */
 
 struct sock_fprog      /* Required for SO_ATTACH_FILTER. */
 {
-        unsigned int           len;    /* Number of filter blocks */
-        struct sock_filter     *filter;
+       unsigned short          len;    /* Number of filter blocks */
+       struct sock_filter      *filter;
 };
 
 #ifdef __KERNEL__
index 45b060291f6185b349f5e99d7378d2e913f37ccf..c2c0431f42dab574bf0cbd17b16fb1e0ae9d3f4c 100644 (file)
@@ -8,6 +8,7 @@
 #define NBD_CLEAR_SOCK _IO( 0xab, 4 )
 #define NBD_CLEAR_QUE  _IO( 0xab, 5 )
 #define NBD_PRINT_DEBUG        _IO( 0xab, 6 )
+#define NBD_SET_SIZE_BLOCKS    _IO( 0xab, 7 )
 
 #ifdef MAJOR_NR
 
@@ -60,13 +61,21 @@ struct nbd_device {
 #define NBD_REPLY_MAGIC 0x67446698
 /* Do *not* use magics: 0x12560953 0x96744668. */
 
+/*
+ * This is packet used for communication between client and
+ * server. All data are in network byte order.
+ */
 struct nbd_request {
        u32 magic;
        u32 type;       /* == READ || == WRITE  */
        char handle[8];
        u64 from;
        u32 len;
-};
+}
+#ifdef __GNUC__
+       __attribute__ ((packed))
+#endif
+;
 
 struct nbd_reply {
        u32 magic;
index b5a4817df886e2d6616a8af953a23112b38e17b4..cd8eacb1fcd8e5545132ad2e16b82475ab38c19e 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -607,7 +607,7 @@ int do_munmap(unsigned long addr, size_t len)
                return -EINVAL;
 
        if ((len = PAGE_ALIGN(len)) == 0)
-               return 0;
+               return -EINVAL;
 
        /* Check if this memory area is ok - put it on the temporary
         * list if so..  The checks here are pretty simple --