latest stable release: 2.6.13.2, no can nr. yet..
svn path=/dists/trunk/linux-2.6/; revision=4231
This commit is contained in:
parent
4288670181
commit
a637d823d1
|
@ -57,6 +57,18 @@ linux-2.6 (2.6.13-1) UNRELEASED; urgency=low
|
|||
* Drop drivers-add-scsi_changer.patch (merged)
|
||||
* Drop drivers-ide-dma-blacklist-toshiba.patch (merged)
|
||||
* Drop drivers-ide-__devinit.patch (merged)
|
||||
* Added patch-2.6.13.2:
|
||||
- USB: ftdi_sio: custom baud rate fix
|
||||
- Fix up more strange byte writes to the PCI_ROM_ADDRESS config word
|
||||
- Fix MPOL_F_VERIFY
|
||||
- jfs: jfs_delete_inode must call clear_inode
|
||||
- Fix DHCP + MASQUERADE problem
|
||||
- Sun HME: enable and map PCI ROM properly
|
||||
- Sun GEM ethernet: enable and map PCI ROM properly
|
||||
- hpt366: write the full 4 bytes of ROM address, not just low 1 byte
|
||||
- forcedeth: Initialize link settings in every nv_open()
|
||||
- Lost sockfd_put() in routing_ioctl()
|
||||
- lost fput in 32bit ioctl on x86-64
|
||||
|
||||
[ Sven Luther ]
|
||||
* [powerpc] Added hotplug support to the mv643xx_eth driver :
|
||||
|
|
|
@ -0,0 +1,328 @@
|
|||
diff --git a/arch/x86_64/ia32/ia32_ioctl.c b/arch/x86_64/ia32/ia32_ioctl.c
|
||||
--- a/arch/x86_64/ia32/ia32_ioctl.c
|
||||
+++ b/arch/x86_64/ia32/ia32_ioctl.c
|
||||
@@ -24,17 +24,26 @@
|
||||
static int tiocgdev(unsigned fd, unsigned cmd, unsigned int __user *ptr)
|
||||
{
|
||||
|
||||
- struct file *file = fget(fd);
|
||||
+ struct file *file;
|
||||
struct tty_struct *real_tty;
|
||||
+ int fput_needed, ret;
|
||||
|
||||
+ file = fget_light(fd, &fput_needed);
|
||||
if (!file)
|
||||
return -EBADF;
|
||||
+
|
||||
+ ret = -EINVAL;
|
||||
if (file->f_op->ioctl != tty_ioctl)
|
||||
- return -EINVAL;
|
||||
+ goto out;
|
||||
real_tty = (struct tty_struct *)file->private_data;
|
||||
if (!real_tty)
|
||||
- return -EINVAL;
|
||||
- return put_user(new_encode_dev(tty_devnum(real_tty)), ptr);
|
||||
+ goto out;
|
||||
+
|
||||
+ ret = put_user(new_encode_dev(tty_devnum(real_tty)), ptr);
|
||||
+
|
||||
+out:
|
||||
+ fput_light(file, fput_needed);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
#define RTC_IRQP_READ32 _IOR('p', 0x0b, unsigned int) /* Read IRQ rate */
|
||||
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c
|
||||
--- a/drivers/ide/pci/cmd64x.c
|
||||
+++ b/drivers/ide/pci/cmd64x.c
|
||||
@@ -608,7 +608,7 @@ static unsigned int __devinit init_chips
|
||||
|
||||
#ifdef __i386__
|
||||
if (dev->resource[PCI_ROM_RESOURCE].start) {
|
||||
- pci_write_config_byte(dev, PCI_ROM_ADDRESS, dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
|
||||
+ pci_write_config_dword(dev, PCI_ROM_ADDRESS, dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
|
||||
printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name, dev->resource[PCI_ROM_RESOURCE].start);
|
||||
}
|
||||
#endif
|
||||
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c
|
||||
--- a/drivers/ide/pci/hpt34x.c
|
||||
+++ b/drivers/ide/pci/hpt34x.c
|
||||
@@ -173,7 +173,7 @@ static unsigned int __devinit init_chips
|
||||
|
||||
if (cmd & PCI_COMMAND_MEMORY) {
|
||||
if (pci_resource_start(dev, PCI_ROM_RESOURCE)) {
|
||||
- pci_write_config_byte(dev, PCI_ROM_ADDRESS,
|
||||
+ pci_write_config_dword(dev, PCI_ROM_ADDRESS,
|
||||
dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
|
||||
printk(KERN_INFO "HPT345: ROM enabled at 0x%08lx\n",
|
||||
dev->resource[PCI_ROM_RESOURCE].start);
|
||||
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
|
||||
--- a/drivers/ide/pci/hpt366.c
|
||||
+++ b/drivers/ide/pci/hpt366.c
|
||||
@@ -1334,9 +1334,13 @@ static int __devinit init_hpt366(struct
|
||||
static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev, const char *name)
|
||||
{
|
||||
int ret = 0;
|
||||
- /* FIXME: Not portable */
|
||||
+
|
||||
+ /*
|
||||
+ * FIXME: Not portable. Also, why do we enable the ROM in the first place?
|
||||
+ * We don't seem to be using it.
|
||||
+ */
|
||||
if (dev->resource[PCI_ROM_RESOURCE].start)
|
||||
- pci_write_config_byte(dev, PCI_ROM_ADDRESS,
|
||||
+ pci_write_config_dword(dev, PCI_ROM_ADDRESS,
|
||||
dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
|
||||
|
||||
pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
|
||||
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
|
||||
--- a/drivers/net/forcedeth.c
|
||||
+++ b/drivers/net/forcedeth.c
|
||||
@@ -1888,6 +1888,9 @@ static int nv_open(struct net_device *de
|
||||
writel(NVREG_MIISTAT_MASK, base + NvRegMIIStatus);
|
||||
dprintk(KERN_INFO "startup: got 0x%08x.\n", miistat);
|
||||
}
|
||||
+ /* set linkspeed to invalid value, thus force nv_update_linkspeed
|
||||
+ * to init hw */
|
||||
+ np->linkspeed = 0;
|
||||
ret = nv_update_linkspeed(dev);
|
||||
nv_start_rx(dev);
|
||||
nv_start_tx(dev);
|
||||
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c
|
||||
--- a/drivers/net/sungem.c
|
||||
+++ b/drivers/net/sungem.c
|
||||
@@ -2816,7 +2816,7 @@ static int gem_ioctl(struct net_device *
|
||||
|
||||
#if (!defined(__sparc__) && !defined(CONFIG_PPC_PMAC))
|
||||
/* Fetch MAC address from vital product data of PCI ROM. */
|
||||
-static void find_eth_addr_in_vpd(void __iomem *rom_base, int len, unsigned char *dev_addr)
|
||||
+static int find_eth_addr_in_vpd(void __iomem *rom_base, int len, unsigned char *dev_addr)
|
||||
{
|
||||
int this_offset;
|
||||
|
||||
@@ -2837,35 +2837,27 @@ static void find_eth_addr_in_vpd(void __
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
dev_addr[i] = readb(p + i);
|
||||
- break;
|
||||
+ return 1;
|
||||
}
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static void get_gem_mac_nonobp(struct pci_dev *pdev, unsigned char *dev_addr)
|
||||
{
|
||||
- u32 rom_reg_orig;
|
||||
- void __iomem *p;
|
||||
-
|
||||
- if (pdev->resource[PCI_ROM_RESOURCE].parent == NULL) {
|
||||
- if (pci_assign_resource(pdev, PCI_ROM_RESOURCE) < 0)
|
||||
- goto use_random;
|
||||
- }
|
||||
-
|
||||
- pci_read_config_dword(pdev, pdev->rom_base_reg, &rom_reg_orig);
|
||||
- pci_write_config_dword(pdev, pdev->rom_base_reg,
|
||||
- rom_reg_orig | PCI_ROM_ADDRESS_ENABLE);
|
||||
+ size_t size;
|
||||
+ void __iomem *p = pci_map_rom(pdev, &size);
|
||||
|
||||
- p = ioremap(pci_resource_start(pdev, PCI_ROM_RESOURCE), (64 * 1024));
|
||||
- if (p != NULL && readb(p) == 0x55 && readb(p + 1) == 0xaa)
|
||||
- find_eth_addr_in_vpd(p, (64 * 1024), dev_addr);
|
||||
+ if (p) {
|
||||
+ int found;
|
||||
|
||||
- if (p != NULL)
|
||||
- iounmap(p);
|
||||
-
|
||||
- pci_write_config_dword(pdev, pdev->rom_base_reg, rom_reg_orig);
|
||||
- return;
|
||||
+ found = readb(p) == 0x55 &&
|
||||
+ readb(p + 1) == 0xaa &&
|
||||
+ find_eth_addr_in_vpd(p, (64 * 1024), dev_addr);
|
||||
+ pci_unmap_rom(pdev, p);
|
||||
+ if (found)
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
-use_random:
|
||||
/* Sun MAC prefix then 3 random bytes. */
|
||||
dev_addr[0] = 0x08;
|
||||
dev_addr[1] = 0x00;
|
||||
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c
|
||||
--- a/drivers/net/sunhme.c
|
||||
+++ b/drivers/net/sunhme.c
|
||||
@@ -2954,7 +2954,7 @@ static int is_quattro_p(struct pci_dev *
|
||||
}
|
||||
|
||||
/* Fetch MAC address from vital product data of PCI ROM. */
|
||||
-static void find_eth_addr_in_vpd(void __iomem *rom_base, int len, int index, unsigned char *dev_addr)
|
||||
+static int find_eth_addr_in_vpd(void __iomem *rom_base, int len, int index, unsigned char *dev_addr)
|
||||
{
|
||||
int this_offset;
|
||||
|
||||
@@ -2977,42 +2977,33 @@ static void find_eth_addr_in_vpd(void __
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
dev_addr[i] = readb(p + i);
|
||||
- break;
|
||||
+ return 1;
|
||||
}
|
||||
index--;
|
||||
}
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static void get_hme_mac_nonsparc(struct pci_dev *pdev, unsigned char *dev_addr)
|
||||
{
|
||||
- u32 rom_reg_orig;
|
||||
- void __iomem *p;
|
||||
- int index;
|
||||
+ size_t size;
|
||||
+ void __iomem *p = pci_map_rom(pdev, &size);
|
||||
|
||||
- index = 0;
|
||||
- if (is_quattro_p(pdev))
|
||||
- index = PCI_SLOT(pdev->devfn);
|
||||
-
|
||||
- if (pdev->resource[PCI_ROM_RESOURCE].parent == NULL) {
|
||||
- if (pci_assign_resource(pdev, PCI_ROM_RESOURCE) < 0)
|
||||
- goto use_random;
|
||||
+ if (p) {
|
||||
+ int index = 0;
|
||||
+ int found;
|
||||
+
|
||||
+ if (is_quattro_p(pdev))
|
||||
+ index = PCI_SLOT(pdev->devfn);
|
||||
+
|
||||
+ found = readb(p) == 0x55 &&
|
||||
+ readb(p + 1) == 0xaa &&
|
||||
+ find_eth_addr_in_vpd(p, (64 * 1024), index, dev_addr);
|
||||
+ pci_unmap_rom(pdev, p);
|
||||
+ if (found)
|
||||
+ return;
|
||||
}
|
||||
|
||||
- pci_read_config_dword(pdev, pdev->rom_base_reg, &rom_reg_orig);
|
||||
- pci_write_config_dword(pdev, pdev->rom_base_reg,
|
||||
- rom_reg_orig | PCI_ROM_ADDRESS_ENABLE);
|
||||
-
|
||||
- p = ioremap(pci_resource_start(pdev, PCI_ROM_RESOURCE), (64 * 1024));
|
||||
- if (p != NULL && readb(p) == 0x55 && readb(p + 1) == 0xaa)
|
||||
- find_eth_addr_in_vpd(p, (64 * 1024), index, dev_addr);
|
||||
-
|
||||
- if (p != NULL)
|
||||
- iounmap(p);
|
||||
-
|
||||
- pci_write_config_dword(pdev, pdev->rom_base_reg, rom_reg_orig);
|
||||
- return;
|
||||
-
|
||||
-use_random:
|
||||
/* Sun MAC prefix then 3 random bytes. */
|
||||
dev_addr[0] = 0x08;
|
||||
dev_addr[1] = 0x00;
|
||||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
|
||||
--- a/drivers/usb/serial/ftdi_sio.c
|
||||
+++ b/drivers/usb/serial/ftdi_sio.c
|
||||
@@ -874,7 +874,7 @@ static void ftdi_determine_type(struct u
|
||||
unsigned interfaces;
|
||||
|
||||
/* Assume it is not the original SIO device for now. */
|
||||
- priv->baud_base = 48000000 / 16;
|
||||
+ priv->baud_base = 48000000 / 2;
|
||||
priv->write_offset = 0;
|
||||
|
||||
version = le16_to_cpu(udev->descriptor.bcdDevice);
|
||||
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
|
||||
--- a/fs/compat_ioctl.c
|
||||
+++ b/fs/compat_ioctl.c
|
||||
@@ -798,13 +798,16 @@ static int routing_ioctl(unsigned int fd
|
||||
r = (void *) &r4;
|
||||
}
|
||||
|
||||
- if (ret)
|
||||
- return -EFAULT;
|
||||
+ if (ret) {
|
||||
+ ret = -EFAULT;
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
set_fs (KERNEL_DS);
|
||||
ret = sys_ioctl (fd, cmd, (unsigned long) r);
|
||||
set_fs (old_fs);
|
||||
|
||||
+out:
|
||||
if (mysock)
|
||||
sockfd_put(mysock);
|
||||
|
||||
diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c
|
||||
--- a/fs/jfs/inode.c
|
||||
+++ b/fs/jfs/inode.c
|
||||
@@ -128,21 +128,21 @@ void jfs_delete_inode(struct inode *inod
|
||||
{
|
||||
jfs_info("In jfs_delete_inode, inode = 0x%p", inode);
|
||||
|
||||
- if (is_bad_inode(inode) ||
|
||||
- (JFS_IP(inode)->fileset != cpu_to_le32(FILESYSTEM_I)))
|
||||
- return;
|
||||
+ if (!is_bad_inode(inode) &&
|
||||
+ (JFS_IP(inode)->fileset == cpu_to_le32(FILESYSTEM_I))) {
|
||||
|
||||
- if (test_cflag(COMMIT_Freewmap, inode))
|
||||
- jfs_free_zero_link(inode);
|
||||
+ if (test_cflag(COMMIT_Freewmap, inode))
|
||||
+ jfs_free_zero_link(inode);
|
||||
|
||||
- diFree(inode);
|
||||
+ diFree(inode);
|
||||
|
||||
- /*
|
||||
- * Free the inode from the quota allocation.
|
||||
- */
|
||||
- DQUOT_INIT(inode);
|
||||
- DQUOT_FREE_INODE(inode);
|
||||
- DQUOT_DROP(inode);
|
||||
+ /*
|
||||
+ * Free the inode from the quota allocation.
|
||||
+ */
|
||||
+ DQUOT_INIT(inode);
|
||||
+ DQUOT_FREE_INODE(inode);
|
||||
+ DQUOT_DROP(inode);
|
||||
+ }
|
||||
|
||||
clear_inode(inode);
|
||||
}
|
||||
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
|
||||
--- a/mm/mempolicy.c
|
||||
+++ b/mm/mempolicy.c
|
||||
@@ -333,8 +333,13 @@ check_range(struct mm_struct *mm, unsign
|
||||
if (prev && prev->vm_end < vma->vm_start)
|
||||
return ERR_PTR(-EFAULT);
|
||||
if ((flags & MPOL_MF_STRICT) && !is_vm_hugetlb_page(vma)) {
|
||||
+ unsigned long endvma = vma->vm_end;
|
||||
+ if (endvma > end)
|
||||
+ endvma = end;
|
||||
+ if (vma->vm_start > start)
|
||||
+ start = vma->vm_start;
|
||||
err = check_pgd_range(vma->vm_mm,
|
||||
- vma->vm_start, vma->vm_end, nodes);
|
||||
+ start, endvma, nodes);
|
||||
if (err) {
|
||||
first = ERR_PTR(err);
|
||||
break;
|
||||
diff --git a/net/ipv4/netfilter/ipt_MASQUERADE.c b/net/ipv4/netfilter/ipt_MASQUERADE.c
|
||||
--- a/net/ipv4/netfilter/ipt_MASQUERADE.c
|
||||
+++ b/net/ipv4/netfilter/ipt_MASQUERADE.c
|
||||
@@ -95,6 +95,12 @@ masquerade_target(struct sk_buff **pskb,
|
||||
IP_NF_ASSERT(ct && (ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED
|
||||
|| ctinfo == IP_CT_RELATED + IP_CT_IS_REPLY));
|
||||
|
||||
+ /* Source address is 0.0.0.0 - locally generated packet that is
|
||||
+ * probably not supposed to be masqueraded.
|
||||
+ */
|
||||
+ if (ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.ip == 0)
|
||||
+ return NF_ACCEPT;
|
||||
+
|
||||
mr = targinfo;
|
||||
rt = (struct rtable *)(*pskb)->dst;
|
||||
newsrc = inet_select_addr(out, rt->rt_gateway, RT_SCOPE_UNIVERSE);
|
|
@ -21,3 +21,4 @@
|
|||
+ tty-locking-fixes9.patch
|
||||
+ version.patch
|
||||
+ powerpc-mv643xx-hotplug-support.patch
|
||||
+ patch-2.6.13.2
|
||||
|
|
Loading…
Reference in New Issue