[kernel] r18853 - in dists/squeeze/linux-2.6/debian: . patches/bugfix/all/stable patches/debian patches/features/all/xen patches/series
Ben Hutchings
benh at alioth.debian.org
Sun Mar 18 22:42:18 UTC 2012
Author: benh
Date: Sun Mar 18 22:42:15 2012
New Revision: 18853
Log:
Add longterm 2.6.32.59
Fix up xen pvops.patch.
Revert an ABI-breaking change.
Added:
dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.59.patch
dists/squeeze/linux-2.6/debian/patches/debian/revert-IA64-Remove-COMPAT_IA32-support.patch
Modified:
dists/squeeze/linux-2.6/debian/changelog
dists/squeeze/linux-2.6/debian/patches/features/all/xen/pvops.patch
dists/squeeze/linux-2.6/debian/patches/series/42
Modified: dists/squeeze/linux-2.6/debian/changelog
==============================================================================
--- dists/squeeze/linux-2.6/debian/changelog Sun Mar 18 03:56:27 2012 (r18852)
+++ dists/squeeze/linux-2.6/debian/changelog Sun Mar 18 22:42:15 2012 (r18853)
@@ -48,6 +48,15 @@
and the bug report which this closes: #662573.
* ia64: Define is_compat_task(), now needed by autofs
* e1000e: workaround for packet drop on 82579 at 100Mbps (Closes: #644906)
+ * Add longterm release 2.6.32.59, including:
+ - eCryptfs: Handle failed metadata read in lookup
+ - cifs: fix dentry refcount leak when opening a FIFO on lookup
+ - regset: Prevent null pointer reference on readonly regsets
+ (CVE-2012-1097)
+ - [i386] watchdog: hpwdt: clean up set_memory_x call for 32 bit
+ For the complete list of changes, see:
+ http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/ChangeLog-2.6.32.59
+ and the bug report which this closes: #663534.
-- Uwe Kleine-König <u.kleine-koenig at pengutronix.de> Mon, 16 Jan 2012 16:47:21 +0100
Added: dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.59.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.59.patch Sun Mar 18 22:42:15 2012 (r18853)
@@ -0,0 +1,406 @@
+diff --git a/Makefile b/Makefile
+index ed78982..3a9a721 100644
+diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
+index 1ee596c..20fc9c5 100644
+--- a/arch/ia64/Kconfig
++++ b/arch/ia64/Kconfig
+@@ -502,23 +502,6 @@ config ARCH_PROC_KCORE_TEXT
+ def_bool y
+ depends on PROC_KCORE
+
+-config IA32_SUPPORT
+- bool "Support for Linux/x86 binaries"
+- help
+- IA-64 processors can execute IA-32 (X86) instructions. By
+- saying Y here, the kernel will include IA-32 system call
+- emulation support which makes it possible to transparently
+- run IA-32 Linux binaries on an IA-64 Linux system.
+- If in doubt, say Y.
+-
+-config COMPAT
+- bool
+- depends on IA32_SUPPORT
+- default y
+-
+-config COMPAT_FOR_U64_ALIGNMENT
+- def_bool COMPAT
+-
+ config IA64_MCA_RECOVERY
+ tristate "MCA recovery from errors other than TLB."
+
+diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
+index 43c0aca..aca7fff 100644
+--- a/arch/s390/Kconfig
++++ b/arch/s390/Kconfig
+@@ -188,6 +188,9 @@ config SYSVIPC_COMPAT
+ depends on COMPAT && SYSVIPC
+ default y
+
++config KEYS_COMPAT
++ def_bool y if COMPAT && KEYS
++
+ config AUDIT_ARCH
+ bool
+ default y
+diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
+index 0b2573a..358e545 100644
+--- a/arch/s390/kernel/setup.c
++++ b/arch/s390/kernel/setup.c
+@@ -57,6 +57,7 @@
+ #include <asm/ptrace.h>
+ #include <asm/sections.h>
+ #include <asm/ebcdic.h>
++#include <asm/compat.h>
+ #include <asm/kvm_virtio.h>
+
+ long psw_kernel_bits = (PSW_BASE_BITS | PSW_MASK_DAT | PSW_ASC_PRIMARY |
+diff --git a/block/bsg.c b/block/bsg.c
+index 7154a7a..e3e3241 100644
+--- a/block/bsg.c
++++ b/block/bsg.c
+@@ -977,7 +977,8 @@ void bsg_unregister_queue(struct request_queue *q)
+
+ mutex_lock(&bsg_mutex);
+ idr_remove(&bsg_minor_idr, bcd->minor);
+- sysfs_remove_link(&q->kobj, "bsg");
++ if (q->kobj.sd)
++ sysfs_remove_link(&q->kobj, "bsg");
+ device_unregister(bcd->class_dev);
+ bcd->class_dev = NULL;
+ kref_put(&bcd->ref, bsg_kref_release_function);
+diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
+index a2e8977..605d92e 100644
+--- a/drivers/block/xen-blkfront.c
++++ b/drivers/block/xen-blkfront.c
+@@ -942,11 +942,11 @@ static void blkfront_closing(struct xenbus_device *dev)
+ /* Flush gnttab callback work. Must be done with no locks held. */
+ flush_scheduled_work();
+
++ del_gendisk(info->gd);
++
+ blk_cleanup_queue(info->rq);
+ info->rq = NULL;
+
+- del_gendisk(info->gd);
+-
+ out:
+ xenbus_frontend_closed(dev);
+ }
+diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
+index ca5ca5a..da33dce 100644
+--- a/drivers/net/usb/usbnet.c
++++ b/drivers/net/usb/usbnet.c
+@@ -584,6 +584,7 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
+ entry = (struct skb_data *) skb->cb;
+ urb = entry->urb;
+
++ spin_unlock_irqrestore(&q->lock, flags);
+ // during some PM-driven resume scenarios,
+ // these (async) unlinks complete immediately
+ retval = usb_unlink_urb (urb);
+@@ -591,6 +592,7 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
+ devdbg (dev, "unlink urb err, %d", retval);
+ else
+ count++;
++ spin_lock_irqsave(&q->lock, flags);
+ }
+ spin_unlock_irqrestore (&q->lock, flags);
+ return count;
+diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
+index 2a9f54a..1f6bb28 100644
+--- a/drivers/watchdog/hpwdt.c
++++ b/drivers/watchdog/hpwdt.c
+@@ -220,7 +220,7 @@ static int __devinit cru_detect(unsigned long map_entry,
+
+ cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE;
+
+- set_memory_x((unsigned long)bios32_entrypoint, (2 * PAGE_SIZE));
++ set_memory_x((unsigned long)bios32_map, 2);
+ asminline_call(&cmn_regs, bios32_entrypoint);
+
+ if (cmn_regs.u1.ral != 0) {
+@@ -239,7 +239,8 @@ static int __devinit cru_detect(unsigned long map_entry,
+ cru_rom_addr =
+ ioremap(cru_physical_address, cru_length);
+ if (cru_rom_addr) {
+- set_memory_x((unsigned long)cru_rom_addr, cru_length);
++ set_memory_x((unsigned long)cru_rom_addr & PAGE_MASK,
++ (cru_length + PAGE_SIZE - 1) >> PAGE_SHIFT);
+ retval = 0;
+ }
+ }
+diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
+index 1ed37ba..a64fde6 100644
+--- a/fs/binfmt_elf.c
++++ b/fs/binfmt_elf.c
+@@ -1452,7 +1452,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
+ for (i = 1; i < view->n; ++i) {
+ const struct user_regset *regset = &view->regsets[i];
+ do_thread_regset_writeback(t->task, regset);
+- if (regset->core_note_type &&
++ if (regset->core_note_type && regset->get &&
+ (!regset->active || regset->active(t->task, regset))) {
+ int ret;
+ size_t size = regset->n * regset->size;
+diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
+index c3d6182..7c863b5 100644
+--- a/fs/cifs/dir.c
++++ b/fs/cifs/dir.c
+@@ -691,10 +691,26 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
+ * If either that or op not supported returned, follow
+ * the normal lookup.
+ */
+- if ((rc == 0) || (rc == -ENOENT))
++ switch (rc) {
++ case 0:
++ /*
++ * The server may allow us to open things like
++ * FIFOs, but the client isn't set up to deal
++ * with that. If it's not a regular file, just
++ * close it and proceed as if it were a normal
++ * lookup.
++ */
++ if (newInode && !S_ISREG(newInode->i_mode)) {
++ CIFSSMBClose(xid, pTcon, fileHandle);
++ break;
++ }
++ case -ENOENT:
+ posix_open = true;
+- else if ((rc == -EINVAL) || (rc != -EOPNOTSUPP))
++ case -EOPNOTSUPP:
++ break;
++ default:
+ pTcon->broken_posix_open = true;
++ }
+ }
+ if (!posix_open)
+ rc = cifs_get_inode_info_unix(&newInode, full_path,
+diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
+index 7a5f1ac..7e164bb 100644
+--- a/fs/ecryptfs/crypto.c
++++ b/fs/ecryptfs/crypto.c
+@@ -1455,6 +1455,25 @@ static void set_default_header_data(struct ecryptfs_crypt_stat *crypt_stat)
+ ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
+ }
+
++void ecryptfs_i_size_init(const char *page_virt, struct inode *inode)
++{
++ struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
++ struct ecryptfs_crypt_stat *crypt_stat;
++ u64 file_size;
++
++ crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat;
++ mount_crypt_stat =
++ &ecryptfs_superblock_to_private(inode->i_sb)->mount_crypt_stat;
++ if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED) {
++ file_size = i_size_read(ecryptfs_inode_to_lower(inode));
++ if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
++ file_size += crypt_stat->num_header_bytes_at_front;
++ } else
++ file_size = get_unaligned_be64(page_virt);
++ i_size_write(inode, (loff_t)file_size);
++ crypt_stat->flags |= ECRYPTFS_I_SIZE_INITIALIZED;
++}
++
+ /**
+ * ecryptfs_read_headers_virt
+ * @page_virt: The virtual address into which to read the headers
+@@ -1485,6 +1504,8 @@ static int ecryptfs_read_headers_virt(char *page_virt,
+ rc = -EINVAL;
+ goto out;
+ }
++ if (!(crypt_stat->flags & ECRYPTFS_I_SIZE_INITIALIZED))
++ ecryptfs_i_size_init(page_virt, ecryptfs_dentry->d_inode);
+ offset += MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;
+ rc = ecryptfs_process_flags(crypt_stat, (page_virt + offset),
+ &bytes_read);
+diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h
+index 542f625..9685315 100644
+--- a/fs/ecryptfs/ecryptfs_kernel.h
++++ b/fs/ecryptfs/ecryptfs_kernel.h
+@@ -270,6 +270,7 @@ struct ecryptfs_crypt_stat {
+ #define ECRYPTFS_ENCFN_USE_MOUNT_FNEK 0x00001000
+ #define ECRYPTFS_ENCFN_USE_FEK 0x00002000
+ #define ECRYPTFS_UNLINK_SIGS 0x00004000
++#define ECRYPTFS_I_SIZE_INITIALIZED 0x00008000
+ u32 flags;
+ unsigned int file_version;
+ size_t iv_bytes;
+@@ -619,6 +620,7 @@ struct ecryptfs_open_req {
+ int ecryptfs_interpose(struct dentry *hidden_dentry,
+ struct dentry *this_dentry, struct super_block *sb,
+ u32 flags);
++void ecryptfs_i_size_init(const char *page_virt, struct inode *inode);
+ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
+ struct dentry *lower_dentry,
+ struct inode *ecryptfs_dir_inode,
+diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
+index 3015389..502b09f 100644
+--- a/fs/ecryptfs/file.c
++++ b/fs/ecryptfs/file.c
+@@ -237,7 +237,8 @@ static int ecryptfs_open(struct inode *inode, struct file *file)
+ goto out_free;
+ }
+ rc = 0;
+- crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED);
++ crypt_stat->flags &= ~(ECRYPTFS_I_SIZE_INITIALIZED
++ | ECRYPTFS_ENCRYPTED);
+ mutex_unlock(&crypt_stat->cs_mutex);
+ goto out;
+ }
+diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
+index 4434e8f..90a6087 100644
+--- a/fs/ecryptfs/inode.c
++++ b/fs/ecryptfs/inode.c
+@@ -256,10 +256,8 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
+ struct dentry *lower_dir_dentry;
+ struct vfsmount *lower_mnt;
+ struct inode *lower_inode;
+- struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
+ struct ecryptfs_crypt_stat *crypt_stat;
+ char *page_virt = NULL;
+- u64 file_size;
+ int rc = 0;
+
+ lower_dir_dentry = lower_dentry->d_parent;
+@@ -334,18 +332,7 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
+ }
+ crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR;
+ }
+- mount_crypt_stat = &ecryptfs_superblock_to_private(
+- ecryptfs_dentry->d_sb)->mount_crypt_stat;
+- if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED) {
+- if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
+- file_size = (crypt_stat->num_header_bytes_at_front
+- + i_size_read(lower_dentry->d_inode));
+- else
+- file_size = i_size_read(lower_dentry->d_inode);
+- } else {
+- file_size = get_unaligned_be64(page_virt);
+- }
+- i_size_write(ecryptfs_dentry->d_inode, (loff_t)file_size);
++ ecryptfs_i_size_init(page_virt, ecryptfs_dentry->d_inode);
+ out_free_kmem:
+ kmem_cache_free(ecryptfs_header_cache_2, page_virt);
+ goto out;
+@@ -964,7 +951,8 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
+ goto out;
+ }
+ rc = 0;
+- crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED);
++ crypt_stat->flags &= ~(ECRYPTFS_I_SIZE_INITIALIZED
++ | ECRYPTFS_ENCRYPTED);
+ }
+ }
+ mutex_unlock(&crypt_stat->cs_mutex);
+diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
+index b449e73..61e43a6 100644
+--- a/include/linux/backing-dev.h
++++ b/include/linux/backing-dev.h
+@@ -105,6 +105,7 @@ void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb,
+ long nr_pages);
+ int bdi_writeback_task(struct bdi_writeback *wb);
+ int bdi_has_dirty_io(struct backing_dev_info *bdi);
++void bdi_arm_supers_timer(void);
+
+ extern spinlock_t bdi_lock;
+ extern struct list_head bdi_list;
+diff --git a/include/linux/regset.h b/include/linux/regset.h
+index 8abee65..686f373 100644
+--- a/include/linux/regset.h
++++ b/include/linux/regset.h
+@@ -335,8 +335,11 @@ static inline int copy_regset_to_user(struct task_struct *target,
+ {
+ const struct user_regset *regset = &view->regsets[setno];
+
++ if (!regset->get)
++ return -EOPNOTSUPP;
++
+ if (!access_ok(VERIFY_WRITE, data, size))
+- return -EIO;
++ return -EFAULT;
+
+ return regset->get(target, regset, offset, size, NULL, data);
+ }
+@@ -358,8 +361,11 @@ static inline int copy_regset_from_user(struct task_struct *target,
+ {
+ const struct user_regset *regset = &view->regsets[setno];
+
++ if (!regset->set)
++ return -EOPNOTSUPP;
++
+ if (!access_ok(VERIFY_READ, data, size))
+- return -EIO;
++ return -EFAULT;
+
+ return regset->set(target, regset, offset, size, NULL, data);
+ }
+diff --git a/mm/backing-dev.c b/mm/backing-dev.c
+index 67a33a5..d824401 100644
+--- a/mm/backing-dev.c
++++ b/mm/backing-dev.c
+@@ -41,7 +41,6 @@ static struct timer_list sync_supers_timer;
+
+ static int bdi_sync_supers(void *);
+ static void sync_supers_timer_fn(unsigned long);
+-static void arm_supers_timer(void);
+
+ static void bdi_add_default_flusher_task(struct backing_dev_info *bdi);
+
+@@ -242,7 +241,7 @@ static int __init default_bdi_init(void)
+
+ init_timer(&sync_supers_timer);
+ setup_timer(&sync_supers_timer, sync_supers_timer_fn, 0);
+- arm_supers_timer();
++ bdi_arm_supers_timer();
+
+ err = bdi_init(&default_backing_dev_info);
+ if (!err)
+@@ -364,10 +363,13 @@ static int bdi_sync_supers(void *unused)
+ return 0;
+ }
+
+-static void arm_supers_timer(void)
++void bdi_arm_supers_timer(void)
+ {
+ unsigned long next;
+
++ if (!dirty_writeback_interval)
++ return;
++
+ next = msecs_to_jiffies(dirty_writeback_interval * 10) + jiffies;
+ mod_timer(&sync_supers_timer, round_jiffies_up(next));
+ }
+@@ -375,7 +377,7 @@ static void arm_supers_timer(void)
+ static void sync_supers_timer_fn(unsigned long unused)
+ {
+ wake_up_process(sync_supers_tsk);
+- arm_supers_timer();
++ bdi_arm_supers_timer();
+ }
+
+ static int bdi_forker_task(void *ptr)
+@@ -418,7 +420,10 @@ static int bdi_forker_task(void *ptr)
+
+ spin_unlock_bh(&bdi_lock);
+ wait = msecs_to_jiffies(dirty_writeback_interval * 10);
+- schedule_timeout(wait);
++ if (wait)
++ schedule_timeout(wait);
++ else
++ schedule();
+ try_to_freeze();
+ continue;
+ }
+diff --git a/mm/page-writeback.c b/mm/page-writeback.c
+index 2c5d792..52f71ae 100644
+--- a/mm/page-writeback.c
++++ b/mm/page-writeback.c
+@@ -694,6 +694,7 @@ int dirty_writeback_centisecs_handler(ctl_table *table, int write,
+ void __user *buffer, size_t *length, loff_t *ppos)
+ {
+ proc_dointvec(table, write, buffer, length, ppos);
++ bdi_arm_supers_timer();
+ return 0;
+ }
+
Added: dists/squeeze/linux-2.6/debian/patches/debian/revert-IA64-Remove-COMPAT_IA32-support.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/debian/revert-IA64-Remove-COMPAT_IA32-support.patch Sun Mar 18 22:42:15 2012 (r18853)
@@ -0,0 +1,42 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Sun, 18 Mar 2012 22:30:53 +0000
+Subject: [PATCH] Revert "IA64: Remove COMPAT_IA32 support"
+
+This reverts commit d9a25c03a1defab08703a7cc186a68aa2610ad4f.
+Even though this code is pointless, we can't disable it now as it will
+change the ABI for many functions.
+---
+ arch/ia64/Kconfig | 17 +++++++++++++++++
+ 1 files changed, 17 insertions(+), 0 deletions(-)
+
+diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
+index 20fc9c5..1ee596c 100644
+--- a/arch/ia64/Kconfig
++++ b/arch/ia64/Kconfig
+@@ -502,6 +502,23 @@ config ARCH_PROC_KCORE_TEXT
+ def_bool y
+ depends on PROC_KCORE
+
++config IA32_SUPPORT
++ bool "Support for Linux/x86 binaries"
++ help
++ IA-64 processors can execute IA-32 (X86) instructions. By
++ saying Y here, the kernel will include IA-32 system call
++ emulation support which makes it possible to transparently
++ run IA-32 Linux binaries on an IA-64 Linux system.
++ If in doubt, say Y.
++
++config COMPAT
++ bool
++ depends on IA32_SUPPORT
++ default y
++
++config COMPAT_FOR_U64_ALIGNMENT
++ def_bool COMPAT
++
+ config IA64_MCA_RECOVERY
+ tristate "MCA recovery from errors other than TLB."
+
+--
+1.7.9.1
+
Modified: dists/squeeze/linux-2.6/debian/patches/features/all/xen/pvops.patch
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/features/all/xen/pvops.patch Sun Mar 18 03:56:27 2012 (r18852)
+++ dists/squeeze/linux-2.6/debian/patches/features/all/xen/pvops.patch Sun Mar 18 22:42:15 2012 (r18853)
@@ -16,6 +16,8 @@
$ git diff debian-base..debian-pvops
[bwh: Updated context in xen_smp_prepare_cpus() to apply after 2.6.32.47.]
+[bwh: Updated the removed implementation of blkfront_closing() to match
+ 2.6.32.59. The fix made there appears to be unnecessary here.]
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 9238f05..eb729e4 100644
@@ -6837,11 +6839,11 @@
- /* Flush gnttab callback work. Must be done with no locks held. */
- flush_scheduled_work();
-
+- del_gendisk(info->gd);
+-
- blk_cleanup_queue(info->rq);
- info->rq = NULL;
-
-- del_gendisk(info->gd);
--
- out:
- xenbus_frontend_closed(dev);
-}
Modified: dists/squeeze/linux-2.6/debian/patches/series/42
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/series/42 Sun Mar 18 03:56:27 2012 (r18852)
+++ dists/squeeze/linux-2.6/debian/patches/series/42 Sun Mar 18 22:42:15 2012 (r18853)
@@ -11,3 +11,5 @@
+ bugfix/all/stable/2.6.32.58.patch
+ debian/ia64-Define-is_compat_task.patch
+ bugfix/all/e1000e-workaround-for-packet-drop-on-82579-at-100Mbp.patch
++ bugfix/all/stable/2.6.32.59.patch
++ debian/revert-IA64-Remove-COMPAT_IA32-support.patch
More information about the Kernel-svn-changes
mailing list