Removed upstream applied patches.
svn path=/dists/trunk/linux-2.6-2.6.14-rc4/; revision=4497
This commit is contained in:
parent
0d7d2b40e9
commit
a8edfa9b35
|
@ -1,47 +0,0 @@
|
|||
From: Linus Torvalds <torvalds@g5.osdl.org>
|
||||
Date: Sat, 17 Sep 2005 22:41:04 +0000 (-0700)
|
||||
Subject: x86-64/smp: fix random SIGSEGV issues
|
||||
X-Git-Url: http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=bc5e8fdfc622b03acf5ac974a1b8b26da6511c99
|
||||
|
||||
x86-64/smp: fix random SIGSEGV issues
|
||||
|
||||
They seem to have been due to AMD errata 63/122; the fix is to disable
|
||||
TLB flush filtering in SMP configurations.
|
||||
|
||||
Confirmed to fix the problem by Andrew Walrond <andrew@walrond.org>
|
||||
|
||||
[ Let's see if we'll have a better fix eventually, this is the Q&D
|
||||
"let's get this fixed and out there" version ]
|
||||
|
||||
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
|
||||
---
|
||||
|
||||
--- a/arch/x86_64/kernel/setup.c
|
||||
+++ b/arch/x86_64/kernel/setup.c
|
||||
@@ -793,11 +793,26 @@
|
||||
#endif
|
||||
}
|
||||
|
||||
+#define HWCR 0xc0010015
|
||||
+
|
||||
static int __init init_amd(struct cpuinfo_x86 *c)
|
||||
{
|
||||
int r;
|
||||
int level;
|
||||
|
||||
+#ifdef CONFIG_SMP
|
||||
+ unsigned long value;
|
||||
+
|
||||
+ // Disable TLB flush filter by setting HWCR.FFDIS:
|
||||
+ // bit 6 of msr C001_0015
|
||||
+ //
|
||||
+ // Errata 63 for SH-B3 steppings
|
||||
+ // Errata 122 for all(?) steppings
|
||||
+ rdmsrl(HWCR, value);
|
||||
+ value |= 1 << 6;
|
||||
+ wrmsrl(HWCR, value);
|
||||
+#endif
|
||||
+
|
||||
/* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
|
||||
3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
|
||||
clear_bit(0*32+31, &c->x86_capability);
|
|
@ -1,31 +0,0 @@
|
|||
From: Martin Waitz <tali@admingilde.org>
|
||||
Date: Fri, 9 Sep 2005 20:10:17 +0000 (-0700)
|
||||
Subject: [PATCH] DocBook: fix kernel-api documentation generation
|
||||
X-Git-Tag: v2.6.14-rc1
|
||||
X-Git-Url: http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=9d01a82e46a8dd18233121a6bc140e5576649583
|
||||
|
||||
[PATCH] DocBook: fix kernel-api documentation generation
|
||||
|
||||
This patch changes a macro definition so that kernel-doc can understand it.
|
||||
|
||||
Signed-off-by: Martin Waitz <tali@admingilde.org>
|
||||
Signed-off-by: Andrew Morton <akpm@osdl.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
|
||||
---
|
||||
|
||||
--- a/include/sound/pcm.h
|
||||
+++ b/include/sound/pcm.h
|
||||
@@ -910,11 +910,10 @@ int snd_pcm_format_big_endian(snd_pcm_fo
|
||||
* Returns 1 if the given PCM format is CPU-endian, 0 if
|
||||
* opposite, or a negative error code if endian not specified.
|
||||
*/
|
||||
-/* int snd_pcm_format_cpu_endian(snd_pcm_format_t format); */
|
||||
#ifdef SNDRV_LITTLE_ENDIAN
|
||||
-#define snd_pcm_format_cpu_endian snd_pcm_format_little_endian
|
||||
+#define snd_pcm_format_cpu_endian(format) snd_pcm_format_little_endian(format)
|
||||
#else
|
||||
-#define snd_pcm_format_cpu_endian snd_pcm_format_big_endian
|
||||
+#define snd_pcm_format_cpu_endian(format) snd_pcm_format_big_endian(format)
|
||||
#endif
|
||||
int snd_pcm_format_width(snd_pcm_format_t format); /* in bits */
|
||||
int snd_pcm_format_physical_width(snd_pcm_format_t format); /* in bits */
|
File diff suppressed because it is too large
Load Diff
|
@ -1,33 +0,0 @@
|
|||
diff -Naru a/mm/mempolicy.c b/mm/mempolicy.c
|
||||
--- a/mm/mempolicy.c 2005-09-27 13:25:44 -07:00
|
||||
+++ b/mm/mempolicy.c 2005-09-27 13:25:44 -07:00
|
||||
@@ -443,7 +443,7 @@
|
||||
struct mempolicy *new;
|
||||
DECLARE_BITMAP(nodes, MAX_NUMNODES);
|
||||
|
||||
- if (mode > MPOL_MAX)
|
||||
+ if (mode < 0 || mode > MPOL_MAX)
|
||||
return -EINVAL;
|
||||
err = get_nodes(nodes, nmask, maxnode, mode);
|
||||
if (err)
|
||||
# This is a BitKeeper generated diff -Nru style patch.
|
||||
#
|
||||
# ChangeSet
|
||||
# 2005/08/01 21:38:00-07:00 dada1@cosmosbay.com
|
||||
# [PATCH] sys_set_mempolicy() doesnt check if mode < 0
|
||||
#
|
||||
# A kernel BUG() is triggered by a call to set_mempolicy() with a negative
|
||||
# first argument. This is because the mode is declared as an int, and the
|
||||
# validity check doesnt check < 0 values. Alternatively, mode could be
|
||||
# declared as unsigned int or unsigned long.
|
||||
#
|
||||
# Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
|
||||
# Cc: Andi Kleen <ak@suse.de>
|
||||
# Signed-off-by: Andrew Morton <akpm@osdl.org>
|
||||
# Signed-off-by: Linus Torvalds <torvalds@osdl.org>
|
||||
#
|
||||
# GIT: ba17101b41977f124948e0a7797fdcbb59e19f3e
|
||||
#
|
||||
# mm/mempolicy.c
|
||||
# 2005/08/01 21:38:00-07:00 dada1@cosmosbay.com +1 -1
|
||||
#
|
|
@ -1,422 +0,0 @@
|
|||
diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c
|
||||
--- a/arch/i386/pci/common.c
|
||||
+++ b/arch/i386/pci/common.c
|
||||
@@ -165,7 +165,6 @@ static int __init pcibios_init(void)
|
||||
if ((pci_probe & PCI_BIOS_SORT) && !(pci_probe & PCI_NO_SORT))
|
||||
pcibios_sort();
|
||||
#endif
|
||||
- pci_assign_unassigned_resources();
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/arch/i386/pci/i386.c b/arch/i386/pci/i386.c
|
||||
--- a/arch/i386/pci/i386.c
|
||||
+++ b/arch/i386/pci/i386.c
|
||||
@@ -170,43 +170,26 @@ static void __init pcibios_allocate_reso
|
||||
static int __init pcibios_assign_resources(void)
|
||||
{
|
||||
struct pci_dev *dev = NULL;
|
||||
- int idx;
|
||||
- struct resource *r;
|
||||
+ struct resource *r, *pr;
|
||||
|
||||
- for_each_pci_dev(dev) {
|
||||
- int class = dev->class >> 8;
|
||||
-
|
||||
- /* Don't touch classless devices and host bridges */
|
||||
- if (!class || class == PCI_CLASS_BRIDGE_HOST)
|
||||
- continue;
|
||||
-
|
||||
- for(idx=0; idx<6; idx++) {
|
||||
- r = &dev->resource[idx];
|
||||
-
|
||||
- /*
|
||||
- * Don't touch IDE controllers and I/O ports of video cards!
|
||||
- */
|
||||
- if ((class == PCI_CLASS_STORAGE_IDE && idx < 4) ||
|
||||
- (class == PCI_CLASS_DISPLAY_VGA && (r->flags & IORESOURCE_IO)))
|
||||
- continue;
|
||||
-
|
||||
- /*
|
||||
- * We shall assign a new address to this resource, either because
|
||||
- * the BIOS forgot to do so or because we have decided the old
|
||||
- * address was unusable for some reason.
|
||||
- */
|
||||
- if (!r->start && r->end)
|
||||
- pci_assign_resource(dev, idx);
|
||||
- }
|
||||
-
|
||||
- if (pci_probe & PCI_ASSIGN_ROMS) {
|
||||
+ if (!(pci_probe & PCI_ASSIGN_ROMS)) {
|
||||
+ /* Try to use BIOS settings for ROMs, otherwise let
|
||||
+ pci_assign_unassigned_resources() allocate the new
|
||||
+ addresses. */
|
||||
+ for_each_pci_dev(dev) {
|
||||
r = &dev->resource[PCI_ROM_RESOURCE];
|
||||
- r->end -= r->start;
|
||||
- r->start = 0;
|
||||
- if (r->end)
|
||||
- pci_assign_resource(dev, PCI_ROM_RESOURCE);
|
||||
+ if (!r->flags || !r->start)
|
||||
+ continue;
|
||||
+ pr = pci_find_parent_resource(dev, r);
|
||||
+ if (!pr || request_resource(pr, r) < 0) {
|
||||
+ r->end -= r->start;
|
||||
+ r->start = 0;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
+
|
||||
+ pci_assign_unassigned_resources();
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/crypto/cipher.c b/crypto/cipher.c
|
||||
--- a/crypto/cipher.c
|
||||
+++ b/crypto/cipher.c
|
||||
@@ -191,6 +191,8 @@ static unsigned int cbc_process_encrypt(
|
||||
u8 *iv = desc->info;
|
||||
unsigned int done = 0;
|
||||
|
||||
+ nbytes -= bsize;
|
||||
+
|
||||
do {
|
||||
xor(iv, src);
|
||||
fn(crypto_tfm_ctx(tfm), dst, iv);
|
||||
@@ -198,7 +200,7 @@ static unsigned int cbc_process_encrypt(
|
||||
|
||||
src += bsize;
|
||||
dst += bsize;
|
||||
- } while ((done += bsize) < nbytes);
|
||||
+ } while ((done += bsize) <= nbytes);
|
||||
|
||||
return done;
|
||||
}
|
||||
@@ -219,6 +221,8 @@ static unsigned int cbc_process_decrypt(
|
||||
u8 *iv = desc->info;
|
||||
unsigned int done = 0;
|
||||
|
||||
+ nbytes -= bsize;
|
||||
+
|
||||
do {
|
||||
u8 *tmp_dst = *dst_p;
|
||||
|
||||
@@ -230,7 +234,7 @@ static unsigned int cbc_process_decrypt(
|
||||
|
||||
src += bsize;
|
||||
dst += bsize;
|
||||
- } while ((done += bsize) < nbytes);
|
||||
+ } while ((done += bsize) <= nbytes);
|
||||
|
||||
return done;
|
||||
}
|
||||
@@ -243,12 +247,14 @@ static unsigned int ecb_process(const st
|
||||
void (*fn)(void *, u8 *, const u8 *) = desc->crfn;
|
||||
unsigned int done = 0;
|
||||
|
||||
+ nbytes -= bsize;
|
||||
+
|
||||
do {
|
||||
fn(crypto_tfm_ctx(tfm), dst, src);
|
||||
|
||||
src += bsize;
|
||||
dst += bsize;
|
||||
- } while ((done += bsize) < nbytes);
|
||||
+ } while ((done += bsize) <= nbytes);
|
||||
|
||||
return done;
|
||||
}
|
||||
diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c
|
||||
--- a/drivers/char/rtc.c
|
||||
+++ b/drivers/char/rtc.c
|
||||
@@ -938,10 +938,9 @@ found:
|
||||
|
||||
/*
|
||||
* XXX Interrupt pin #7 in Espresso is shared between RTC and
|
||||
- * PCI Slot 2 INTA# (and some INTx# in Slot 1). SA_INTERRUPT here
|
||||
- * is asking for trouble with add-on boards. Change to SA_SHIRQ.
|
||||
+ * PCI Slot 2 INTA# (and some INTx# in Slot 1).
|
||||
*/
|
||||
- if (request_irq(rtc_irq, rtc_interrupt, SA_INTERRUPT, "rtc", (void *)&rtc_port)) {
|
||||
+ if (request_irq(rtc_irq, rtc_interrupt, SA_SHIRQ, "rtc", (void *)&rtc_port)) {
|
||||
/*
|
||||
* Standard way for sparc to print irq's is to use
|
||||
* __irq_itoa(). I think for EBus it's ok to use %d.
|
||||
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
|
||||
--- a/drivers/media/video/Kconfig
|
||||
+++ b/drivers/media/video/Kconfig
|
||||
@@ -254,6 +254,7 @@ config VIDEO_SAA7134_DVB
|
||||
select VIDEO_BUF_DVB
|
||||
select DVB_MT352
|
||||
select DVB_CX22702
|
||||
+ select DVB_TDA1004X
|
||||
---help---
|
||||
This adds support for DVB cards based on the
|
||||
Philips saa7134 chip.
|
||||
diff --git a/drivers/pci/rom.c b/drivers/pci/rom.c
|
||||
--- a/drivers/pci/rom.c
|
||||
+++ b/drivers/pci/rom.c
|
||||
@@ -21,13 +21,21 @@
|
||||
* between the ROM and other resources, so enabling it may disable access
|
||||
* to MMIO registers or other card memory.
|
||||
*/
|
||||
-static void pci_enable_rom(struct pci_dev *pdev)
|
||||
+static int pci_enable_rom(struct pci_dev *pdev)
|
||||
{
|
||||
+ struct resource *res = pdev->resource + PCI_ROM_RESOURCE;
|
||||
+ struct pci_bus_region region;
|
||||
u32 rom_addr;
|
||||
|
||||
+ if (!res->flags)
|
||||
+ return -1;
|
||||
+
|
||||
+ pcibios_resource_to_bus(pdev, ®ion, res);
|
||||
pci_read_config_dword(pdev, pdev->rom_base_reg, &rom_addr);
|
||||
- rom_addr |= PCI_ROM_ADDRESS_ENABLE;
|
||||
+ rom_addr &= ~PCI_ROM_ADDRESS_MASK;
|
||||
+ rom_addr |= region.start | PCI_ROM_ADDRESS_ENABLE;
|
||||
pci_write_config_dword(pdev, pdev->rom_base_reg, rom_addr);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -71,19 +79,21 @@ void __iomem *pci_map_rom(struct pci_dev
|
||||
} else {
|
||||
if (res->flags & IORESOURCE_ROM_COPY) {
|
||||
*size = pci_resource_len(pdev, PCI_ROM_RESOURCE);
|
||||
- return (void __iomem *)pci_resource_start(pdev, PCI_ROM_RESOURCE);
|
||||
+ return (void __iomem *)pci_resource_start(pdev,
|
||||
+ PCI_ROM_RESOURCE);
|
||||
} else {
|
||||
/* assign the ROM an address if it doesn't have one */
|
||||
- if (res->parent == NULL)
|
||||
- pci_assign_resource(pdev, PCI_ROM_RESOURCE);
|
||||
-
|
||||
+ if (res->parent == NULL &&
|
||||
+ pci_assign_resource(pdev,PCI_ROM_RESOURCE))
|
||||
+ return NULL;
|
||||
start = pci_resource_start(pdev, PCI_ROM_RESOURCE);
|
||||
*size = pci_resource_len(pdev, PCI_ROM_RESOURCE);
|
||||
if (*size == 0)
|
||||
return NULL;
|
||||
|
||||
/* Enable ROM space decodes */
|
||||
- pci_enable_rom(pdev);
|
||||
+ if (pci_enable_rom(pdev))
|
||||
+ return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
|
||||
--- a/drivers/pci/setup-bus.c
|
||||
+++ b/drivers/pci/setup-bus.c
|
||||
@@ -40,7 +40,7 @@
|
||||
* FIXME: IO should be max 256 bytes. However, since we may
|
||||
* have a P2P bridge below a cardbus bridge, we need 4K.
|
||||
*/
|
||||
-#define CARDBUS_IO_SIZE (256)
|
||||
+#define CARDBUS_IO_SIZE (4*1024)
|
||||
#define CARDBUS_MEM_SIZE (32*1024*1024)
|
||||
|
||||
static void __devinit
|
||||
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
|
||||
--- a/drivers/scsi/aacraid/aachba.c
|
||||
+++ b/drivers/scsi/aacraid/aachba.c
|
||||
@@ -968,7 +968,7 @@ static int aac_read(struct scsi_cmnd * s
|
||||
fibsize = sizeof(struct aac_read64) +
|
||||
((le32_to_cpu(readcmd->sg.count) - 1) *
|
||||
sizeof (struct sgentry64));
|
||||
- BUG_ON (fibsize > (sizeof(struct hw_fib) -
|
||||
+ BUG_ON (fibsize > (dev->max_fib_size -
|
||||
sizeof(struct aac_fibhdr)));
|
||||
/*
|
||||
* Now send the Fib to the adapter
|
||||
diff --git a/include/net/compat.h b/include/net/compat.h
|
||||
--- a/include/net/compat.h
|
||||
+++ b/include/net/compat.h
|
||||
@@ -33,7 +33,8 @@ extern asmlinkage long compat_sys_sendms
|
||||
extern asmlinkage long compat_sys_recvmsg(int,struct compat_msghdr __user *,unsigned);
|
||||
extern asmlinkage long compat_sys_getsockopt(int, int, int, char __user *, int __user *);
|
||||
extern int put_cmsg_compat(struct msghdr*, int, int, int, void *);
|
||||
-extern int cmsghdr_from_user_compat_to_kern(struct msghdr *, unsigned char *,
|
||||
- int);
|
||||
+
|
||||
+struct sock;
|
||||
+extern int cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *, unsigned char *, int);
|
||||
|
||||
#endif /* NET_COMPAT_H */
|
||||
diff --git a/net/compat.c b/net/compat.c
|
||||
--- a/net/compat.c
|
||||
+++ b/net/compat.c
|
||||
@@ -135,13 +135,14 @@ static inline struct compat_cmsghdr __us
|
||||
* thus placement) of cmsg headers and length are different for
|
||||
* 32-bit apps. -DaveM
|
||||
*/
|
||||
-int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg,
|
||||
+int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk,
|
||||
unsigned char *stackbuf, int stackbuf_size)
|
||||
{
|
||||
struct compat_cmsghdr __user *ucmsg;
|
||||
struct cmsghdr *kcmsg, *kcmsg_base;
|
||||
compat_size_t ucmlen;
|
||||
__kernel_size_t kcmlen, tmp;
|
||||
+ int err = -EFAULT;
|
||||
|
||||
kcmlen = 0;
|
||||
kcmsg_base = kcmsg = (struct cmsghdr *)stackbuf;
|
||||
@@ -156,6 +157,7 @@ int cmsghdr_from_user_compat_to_kern(str
|
||||
|
||||
tmp = ((ucmlen - CMSG_COMPAT_ALIGN(sizeof(*ucmsg))) +
|
||||
CMSG_ALIGN(sizeof(struct cmsghdr)));
|
||||
+ tmp = CMSG_ALIGN(tmp);
|
||||
kcmlen += tmp;
|
||||
ucmsg = cmsg_compat_nxthdr(kmsg, ucmsg, ucmlen);
|
||||
}
|
||||
@@ -167,30 +169,34 @@ int cmsghdr_from_user_compat_to_kern(str
|
||||
* until we have successfully copied over all of the data
|
||||
* from the user.
|
||||
*/
|
||||
- if(kcmlen > stackbuf_size)
|
||||
- kcmsg_base = kcmsg = kmalloc(kcmlen, GFP_KERNEL);
|
||||
- if(kcmsg == NULL)
|
||||
+ if (kcmlen > stackbuf_size)
|
||||
+ kcmsg_base = kcmsg = sock_kmalloc(sk, kcmlen, GFP_KERNEL);
|
||||
+ if (kcmsg == NULL)
|
||||
return -ENOBUFS;
|
||||
|
||||
/* Now copy them over neatly. */
|
||||
memset(kcmsg, 0, kcmlen);
|
||||
ucmsg = CMSG_COMPAT_FIRSTHDR(kmsg);
|
||||
while(ucmsg != NULL) {
|
||||
- __get_user(ucmlen, &ucmsg->cmsg_len);
|
||||
+ if (__get_user(ucmlen, &ucmsg->cmsg_len))
|
||||
+ goto Efault;
|
||||
+ if (!CMSG_COMPAT_OK(ucmlen, ucmsg, kmsg))
|
||||
+ goto Einval;
|
||||
tmp = ((ucmlen - CMSG_COMPAT_ALIGN(sizeof(*ucmsg))) +
|
||||
CMSG_ALIGN(sizeof(struct cmsghdr)));
|
||||
+ if ((char *)kcmsg_base + kcmlen - (char *)kcmsg < CMSG_ALIGN(tmp))
|
||||
+ goto Einval;
|
||||
kcmsg->cmsg_len = tmp;
|
||||
- __get_user(kcmsg->cmsg_level, &ucmsg->cmsg_level);
|
||||
- __get_user(kcmsg->cmsg_type, &ucmsg->cmsg_type);
|
||||
-
|
||||
- /* Copy over the data. */
|
||||
- if(copy_from_user(CMSG_DATA(kcmsg),
|
||||
- CMSG_COMPAT_DATA(ucmsg),
|
||||
- (ucmlen - CMSG_COMPAT_ALIGN(sizeof(*ucmsg)))))
|
||||
- goto out_free_efault;
|
||||
+ tmp = CMSG_ALIGN(tmp);
|
||||
+ if (__get_user(kcmsg->cmsg_level, &ucmsg->cmsg_level) ||
|
||||
+ __get_user(kcmsg->cmsg_type, &ucmsg->cmsg_type) ||
|
||||
+ copy_from_user(CMSG_DATA(kcmsg),
|
||||
+ CMSG_COMPAT_DATA(ucmsg),
|
||||
+ (ucmlen - CMSG_COMPAT_ALIGN(sizeof(*ucmsg)))))
|
||||
+ goto Efault;
|
||||
|
||||
/* Advance. */
|
||||
- kcmsg = (struct cmsghdr *)((char *)kcmsg + CMSG_ALIGN(tmp));
|
||||
+ kcmsg = (struct cmsghdr *)((char *)kcmsg + tmp);
|
||||
ucmsg = cmsg_compat_nxthdr(kmsg, ucmsg, ucmlen);
|
||||
}
|
||||
|
||||
@@ -199,10 +205,12 @@ int cmsghdr_from_user_compat_to_kern(str
|
||||
kmsg->msg_controllen = kcmlen;
|
||||
return 0;
|
||||
|
||||
-out_free_efault:
|
||||
- if(kcmsg_base != (struct cmsghdr *)stackbuf)
|
||||
- kfree(kcmsg_base);
|
||||
- return -EFAULT;
|
||||
+Einval:
|
||||
+ err = -EINVAL;
|
||||
+Efault:
|
||||
+ if (kcmsg_base != (struct cmsghdr *)stackbuf)
|
||||
+ sock_kfree_s(sk, kcmsg_base, kcmlen);
|
||||
+ return err;
|
||||
}
|
||||
|
||||
int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *data)
|
||||
diff --git a/net/core/filter.c b/net/core/filter.c
|
||||
--- a/net/core/filter.c
|
||||
+++ b/net/core/filter.c
|
||||
@@ -182,7 +182,7 @@ int sk_run_filter(struct sk_buff *skb, s
|
||||
A = ntohl(*(u32 *)ptr);
|
||||
continue;
|
||||
}
|
||||
- return 0;
|
||||
+ break;
|
||||
case BPF_LD|BPF_H|BPF_ABS:
|
||||
k = fentry->k;
|
||||
load_h:
|
||||
@@ -191,7 +191,7 @@ int sk_run_filter(struct sk_buff *skb, s
|
||||
A = ntohs(*(u16 *)ptr);
|
||||
continue;
|
||||
}
|
||||
- return 0;
|
||||
+ break;
|
||||
case BPF_LD|BPF_B|BPF_ABS:
|
||||
k = fentry->k;
|
||||
load_b:
|
||||
@@ -200,7 +200,7 @@ load_b:
|
||||
A = *(u8 *)ptr;
|
||||
continue;
|
||||
}
|
||||
- return 0;
|
||||
+ break;
|
||||
case BPF_LD|BPF_W|BPF_LEN:
|
||||
A = skb->len;
|
||||
continue;
|
||||
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
|
||||
--- a/net/ipv4/ip_fragment.c
|
||||
+++ b/net/ipv4/ip_fragment.c
|
||||
@@ -457,7 +457,7 @@ static void ip_frag_queue(struct ipq *qp
|
||||
|
||||
if (pskb_pull(skb, ihl) == NULL)
|
||||
goto err;
|
||||
- if (pskb_trim(skb, end-offset))
|
||||
+ if (pskb_trim_rcsum(skb, end-offset))
|
||||
goto err;
|
||||
|
||||
/* Find out which fragments are in front and at the back of us
|
||||
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
|
||||
--- a/net/ipv4/raw.c
|
||||
+++ b/net/ipv4/raw.c
|
||||
@@ -358,7 +358,7 @@ static void raw_probe_proto_opt(struct f
|
||||
|
||||
if (type && code) {
|
||||
get_user(fl->fl_icmp_type, type);
|
||||
- __get_user(fl->fl_icmp_code, code);
|
||||
+ get_user(fl->fl_icmp_code, code);
|
||||
probed = 1;
|
||||
}
|
||||
break;
|
||||
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
|
||||
--- a/net/ipv6/raw.c
|
||||
+++ b/net/ipv6/raw.c
|
||||
@@ -619,7 +619,7 @@ static void rawv6_probe_proto_opt(struct
|
||||
|
||||
if (type && code) {
|
||||
get_user(fl->fl_icmp_type, type);
|
||||
- __get_user(fl->fl_icmp_code, code);
|
||||
+ get_user(fl->fl_icmp_code, code);
|
||||
probed = 1;
|
||||
}
|
||||
break;
|
||||
diff --git a/net/socket.c b/net/socket.c
|
||||
--- a/net/socket.c
|
||||
+++ b/net/socket.c
|
||||
@@ -1739,10 +1739,11 @@ asmlinkage long sys_sendmsg(int fd, stru
|
||||
goto out_freeiov;
|
||||
ctl_len = msg_sys.msg_controllen;
|
||||
if ((MSG_CMSG_COMPAT & flags) && ctl_len) {
|
||||
- err = cmsghdr_from_user_compat_to_kern(&msg_sys, ctl, sizeof(ctl));
|
||||
+ err = cmsghdr_from_user_compat_to_kern(&msg_sys, sock->sk, ctl, sizeof(ctl));
|
||||
if (err)
|
||||
goto out_freeiov;
|
||||
ctl_buf = msg_sys.msg_control;
|
||||
+ ctl_len = msg_sys.msg_controllen;
|
||||
} else if (ctl_len) {
|
||||
if (ctl_len > sizeof(ctl))
|
||||
{
|
|
@ -1,328 +0,0 @@
|
|||
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);
|
|
@ -1,420 +0,0 @@
|
|||
diff --git a/arch/um/kernel/skas/include/mmu-skas.h b/arch/um/kernel/skas/include/mmu-skas.h
|
||||
--- a/arch/um/kernel/skas/include/mmu-skas.h
|
||||
+++ b/arch/um/kernel/skas/include/mmu-skas.h
|
||||
@@ -6,11 +6,15 @@
|
||||
#ifndef __SKAS_MMU_H
|
||||
#define __SKAS_MMU_H
|
||||
|
||||
+#include "linux/config.h"
|
||||
#include "mm_id.h"
|
||||
|
||||
struct mmu_context_skas {
|
||||
struct mm_id id;
|
||||
unsigned long last_page_table;
|
||||
+#ifdef CONFIG_3_LEVEL_PGTABLES
|
||||
+ unsigned long last_pmd;
|
||||
+#endif
|
||||
};
|
||||
|
||||
extern void switch_mm_skas(struct mm_id * mm_idp);
|
||||
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
|
||||
--- a/arch/um/kernel/skas/mmu.c
|
||||
+++ b/arch/um/kernel/skas/mmu.c
|
||||
@@ -56,6 +56,9 @@ static int init_stub_pte(struct mm_struc
|
||||
*/
|
||||
|
||||
mm->context.skas.last_page_table = pmd_page_kernel(*pmd);
|
||||
+#ifdef CONFIG_3_LEVEL_PGTABLES
|
||||
+ mm->context.skas.last_pmd = (unsigned long) __va(pud_val(*pud));
|
||||
+#endif
|
||||
|
||||
*pte = mk_pte(virt_to_page(kernel), __pgprot(_PAGE_PRESENT));
|
||||
*pte = pte_mkexec(*pte);
|
||||
@@ -140,6 +143,10 @@ void destroy_context_skas(struct mm_stru
|
||||
else {
|
||||
os_kill_ptraced_process(mmu->id.u.pid, 1);
|
||||
free_page(mmu->id.stack);
|
||||
- free_page(mmu->last_page_table);
|
||||
+ pte_free_kernel((pte_t *) mmu->last_page_table);
|
||||
+ dec_page_state(nr_page_table_pages);
|
||||
+#ifdef CONFIG_3_LEVEL_PGTABLES
|
||||
+ pmd_free((pmd_t *) mmu->last_pmd);
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
diff --git a/drivers/net/skge.c b/drivers/net/skge.c
|
||||
--- a/drivers/net/skge.c
|
||||
+++ b/drivers/net/skge.c
|
||||
@@ -2828,21 +2828,29 @@ static void skge_netpoll(struct net_devi
|
||||
static int skge_set_mac_address(struct net_device *dev, void *p)
|
||||
{
|
||||
struct skge_port *skge = netdev_priv(dev);
|
||||
- struct sockaddr *addr = p;
|
||||
- int err = 0;
|
||||
+ struct skge_hw *hw = skge->hw;
|
||||
+ unsigned port = skge->port;
|
||||
+ const struct sockaddr *addr = p;
|
||||
|
||||
if (!is_valid_ether_addr(addr->sa_data))
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
- skge_down(dev);
|
||||
+ spin_lock_bh(&hw->phy_lock);
|
||||
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
|
||||
- memcpy_toio(skge->hw->regs + B2_MAC_1 + skge->port*8,
|
||||
+ memcpy_toio(hw->regs + B2_MAC_1 + port*8,
|
||||
dev->dev_addr, ETH_ALEN);
|
||||
- memcpy_toio(skge->hw->regs + B2_MAC_2 + skge->port*8,
|
||||
+ memcpy_toio(hw->regs + B2_MAC_2 + port*8,
|
||||
dev->dev_addr, ETH_ALEN);
|
||||
- if (dev->flags & IFF_UP)
|
||||
- err = skge_up(dev);
|
||||
- return err;
|
||||
+
|
||||
+ if (hw->chip_id == CHIP_ID_GENESIS)
|
||||
+ xm_outaddr(hw, port, XM_SA, dev->dev_addr);
|
||||
+ else {
|
||||
+ gma_set_addr(hw, port, GM_SRC_ADDR_1L, dev->dev_addr);
|
||||
+ gma_set_addr(hw, port, GM_SRC_ADDR_2L, dev->dev_addr);
|
||||
+ }
|
||||
+ spin_unlock_bh(&hw->phy_lock);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static const struct {
|
||||
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
|
||||
--- a/drivers/pcmcia/yenta_socket.c
|
||||
+++ b/drivers/pcmcia/yenta_socket.c
|
||||
@@ -976,7 +976,18 @@ static int __devinit yenta_probe (struct
|
||||
{
|
||||
struct yenta_socket *socket;
|
||||
int ret;
|
||||
-
|
||||
+
|
||||
+ /*
|
||||
+ * If we failed to assign proper bus numbers for this cardbus
|
||||
+ * controller during PCI probe, its subordinate pci_bus is NULL.
|
||||
+ * Bail out if so.
|
||||
+ */
|
||||
+ if (!dev->subordinate) {
|
||||
+ printk(KERN_ERR "Yenta: no bus associated with %s! "
|
||||
+ "(try 'pci=assign-busses')\n", pci_name(dev));
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
socket = kmalloc(sizeof(struct yenta_socket), GFP_KERNEL);
|
||||
if (!socket)
|
||||
return -ENOMEM;
|
||||
diff --git a/fs/exec.c b/fs/exec.c
|
||||
--- a/fs/exec.c
|
||||
+++ b/fs/exec.c
|
||||
@@ -745,8 +745,8 @@ static inline int de_thread(struct task_
|
||||
}
|
||||
|
||||
/*
|
||||
- * Now there are really no other threads at all,
|
||||
- * so it's safe to stop telling them to kill themselves.
|
||||
+ * There may be one thread left which is just exiting,
|
||||
+ * but it's safe to stop telling the group to kill themselves.
|
||||
*/
|
||||
sig->flags = 0;
|
||||
|
||||
@@ -785,7 +785,6 @@ no_thread_group:
|
||||
kmem_cache_free(sighand_cachep, oldsighand);
|
||||
}
|
||||
|
||||
- BUG_ON(!thread_group_empty(current));
|
||||
BUG_ON(!thread_group_leader(current));
|
||||
return 0;
|
||||
}
|
||||
diff --git a/include/asm-um/pgalloc.h b/include/asm-um/pgalloc.h
|
||||
--- a/include/asm-um/pgalloc.h
|
||||
+++ b/include/asm-um/pgalloc.h
|
||||
@@ -42,11 +42,13 @@ static inline void pte_free(struct page
|
||||
#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
|
||||
|
||||
#ifdef CONFIG_3_LEVEL_PGTABLES
|
||||
-/*
|
||||
- * In the 3-level case we free the pmds as part of the pgd.
|
||||
- */
|
||||
-#define pmd_free(x) do { } while (0)
|
||||
-#define __pmd_free_tlb(tlb,x) do { } while (0)
|
||||
+
|
||||
+extern __inline__ void pmd_free(pmd_t *pmd)
|
||||
+{
|
||||
+ free_page((unsigned long)pmd);
|
||||
+}
|
||||
+
|
||||
+#define __pmd_free_tlb(tlb,x) tlb_remove_page((tlb),virt_to_page(x))
|
||||
#endif
|
||||
|
||||
#define check_pgt_cache() do { } while (0)
|
||||
diff --git a/include/asm-um/pgtable-3level.h b/include/asm-um/pgtable-3level.h
|
||||
--- a/include/asm-um/pgtable-3level.h
|
||||
+++ b/include/asm-um/pgtable-3level.h
|
||||
@@ -98,14 +98,11 @@ static inline pmd_t *pmd_alloc_one(struc
|
||||
return pmd;
|
||||
}
|
||||
|
||||
-static inline void pmd_free(pmd_t *pmd){
|
||||
- free_page((unsigned long) pmd);
|
||||
+extern inline void pud_clear (pud_t *pud)
|
||||
+{
|
||||
+ set_pud(pud, __pud(0));
|
||||
}
|
||||
|
||||
-#define __pmd_free_tlb(tlb,x) do { } while (0)
|
||||
-
|
||||
-static inline void pud_clear (pud_t * pud) { }
|
||||
-
|
||||
#define pud_page(pud) \
|
||||
((struct page *) __va(pud_val(pud) & PAGE_MASK))
|
||||
|
||||
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
|
||||
--- a/include/net/ip_vs.h
|
||||
+++ b/include/net/ip_vs.h
|
||||
@@ -84,6 +84,7 @@
|
||||
#define IP_VS_CONN_F_IN_SEQ 0x0400 /* must do input seq adjust */
|
||||
#define IP_VS_CONN_F_SEQ_MASK 0x0600 /* in/out sequence mask */
|
||||
#define IP_VS_CONN_F_NO_CPORT 0x0800 /* no client port set yet */
|
||||
+#define IP_VS_CONN_F_TEMPLATE 0x1000 /* template, not connection */
|
||||
|
||||
/* Move it to better place one day, for now keep it unique */
|
||||
#define NFC_IPVS_PROPERTY 0x10000
|
||||
@@ -740,6 +741,8 @@ enum {
|
||||
|
||||
extern struct ip_vs_conn *ip_vs_conn_in_get
|
||||
(int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port);
|
||||
+extern struct ip_vs_conn *ip_vs_ct_in_get
|
||||
+(int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port);
|
||||
extern struct ip_vs_conn *ip_vs_conn_out_get
|
||||
(int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port);
|
||||
|
||||
diff --git a/net/ipv4/ipvs/ip_vs_conn.c b/net/ipv4/ipvs/ip_vs_conn.c
|
||||
--- a/net/ipv4/ipvs/ip_vs_conn.c
|
||||
+++ b/net/ipv4/ipvs/ip_vs_conn.c
|
||||
@@ -196,6 +196,7 @@ static inline struct ip_vs_conn *__ip_vs
|
||||
list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) {
|
||||
if (s_addr==cp->caddr && s_port==cp->cport &&
|
||||
d_port==cp->vport && d_addr==cp->vaddr &&
|
||||
+ ((!s_port) ^ (!(cp->flags & IP_VS_CONN_F_NO_CPORT))) &&
|
||||
protocol==cp->protocol) {
|
||||
/* HIT */
|
||||
atomic_inc(&cp->refcnt);
|
||||
@@ -227,6 +228,40 @@ struct ip_vs_conn *ip_vs_conn_in_get
|
||||
return cp;
|
||||
}
|
||||
|
||||
+/* Get reference to connection template */
|
||||
+struct ip_vs_conn *ip_vs_ct_in_get
|
||||
+(int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port)
|
||||
+{
|
||||
+ unsigned hash;
|
||||
+ struct ip_vs_conn *cp;
|
||||
+
|
||||
+ hash = ip_vs_conn_hashkey(protocol, s_addr, s_port);
|
||||
+
|
||||
+ ct_read_lock(hash);
|
||||
+
|
||||
+ list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) {
|
||||
+ if (s_addr==cp->caddr && s_port==cp->cport &&
|
||||
+ d_port==cp->vport && d_addr==cp->vaddr &&
|
||||
+ cp->flags & IP_VS_CONN_F_TEMPLATE &&
|
||||
+ protocol==cp->protocol) {
|
||||
+ /* HIT */
|
||||
+ atomic_inc(&cp->refcnt);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+ cp = NULL;
|
||||
+
|
||||
+ out:
|
||||
+ ct_read_unlock(hash);
|
||||
+
|
||||
+ IP_VS_DBG(7, "template lookup/in %s %u.%u.%u.%u:%d->%u.%u.%u.%u:%d %s\n",
|
||||
+ ip_vs_proto_name(protocol),
|
||||
+ NIPQUAD(s_addr), ntohs(s_port),
|
||||
+ NIPQUAD(d_addr), ntohs(d_port),
|
||||
+ cp?"hit":"not hit");
|
||||
+
|
||||
+ return cp;
|
||||
+}
|
||||
|
||||
/*
|
||||
* Gets ip_vs_conn associated with supplied parameters in the ip_vs_conn_tab.
|
||||
@@ -367,7 +402,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, s
|
||||
atomic_read(&dest->refcnt));
|
||||
|
||||
/* Update the connection counters */
|
||||
- if (cp->cport || (cp->flags & IP_VS_CONN_F_NO_CPORT)) {
|
||||
+ if (!(cp->flags & IP_VS_CONN_F_TEMPLATE)) {
|
||||
/* It is a normal connection, so increase the inactive
|
||||
connection counter because it is in TCP SYNRECV
|
||||
state (inactive) or other protocol inacive state */
|
||||
@@ -406,7 +441,7 @@ static inline void ip_vs_unbind_dest(str
|
||||
atomic_read(&dest->refcnt));
|
||||
|
||||
/* Update the connection counters */
|
||||
- if (cp->cport || (cp->flags & IP_VS_CONN_F_NO_CPORT)) {
|
||||
+ if (!(cp->flags & IP_VS_CONN_F_TEMPLATE)) {
|
||||
/* It is a normal connection, so decrease the inactconns
|
||||
or activeconns counter */
|
||||
if (cp->flags & IP_VS_CONN_F_INACTIVE) {
|
||||
@@ -776,7 +811,7 @@ void ip_vs_random_dropentry(void)
|
||||
ct_write_lock_bh(hash);
|
||||
|
||||
list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) {
|
||||
- if (!cp->cport && !(cp->flags & IP_VS_CONN_F_NO_CPORT))
|
||||
+ if (cp->flags & IP_VS_CONN_F_TEMPLATE)
|
||||
/* connection template */
|
||||
continue;
|
||||
|
||||
diff --git a/net/ipv4/ipvs/ip_vs_core.c b/net/ipv4/ipvs/ip_vs_core.c
|
||||
--- a/net/ipv4/ipvs/ip_vs_core.c
|
||||
+++ b/net/ipv4/ipvs/ip_vs_core.c
|
||||
@@ -242,10 +242,10 @@ ip_vs_sched_persist(struct ip_vs_service
|
||||
if (ports[1] == svc->port) {
|
||||
/* Check if a template already exists */
|
||||
if (svc->port != FTPPORT)
|
||||
- ct = ip_vs_conn_in_get(iph->protocol, snet, 0,
|
||||
+ ct = ip_vs_ct_in_get(iph->protocol, snet, 0,
|
||||
iph->daddr, ports[1]);
|
||||
else
|
||||
- ct = ip_vs_conn_in_get(iph->protocol, snet, 0,
|
||||
+ ct = ip_vs_ct_in_get(iph->protocol, snet, 0,
|
||||
iph->daddr, 0);
|
||||
|
||||
if (!ct || !ip_vs_check_template(ct)) {
|
||||
@@ -271,14 +271,14 @@ ip_vs_sched_persist(struct ip_vs_service
|
||||
iph->daddr,
|
||||
ports[1],
|
||||
dest->addr, dest->port,
|
||||
- 0,
|
||||
+ IP_VS_CONN_F_TEMPLATE,
|
||||
dest);
|
||||
else
|
||||
ct = ip_vs_conn_new(iph->protocol,
|
||||
snet, 0,
|
||||
iph->daddr, 0,
|
||||
dest->addr, 0,
|
||||
- 0,
|
||||
+ IP_VS_CONN_F_TEMPLATE,
|
||||
dest);
|
||||
if (ct == NULL)
|
||||
return NULL;
|
||||
@@ -297,10 +297,10 @@ ip_vs_sched_persist(struct ip_vs_service
|
||||
* port zero template: <protocol,caddr,0,vaddr,0,daddr,0>
|
||||
*/
|
||||
if (svc->fwmark)
|
||||
- ct = ip_vs_conn_in_get(IPPROTO_IP, snet, 0,
|
||||
+ ct = ip_vs_ct_in_get(IPPROTO_IP, snet, 0,
|
||||
htonl(svc->fwmark), 0);
|
||||
else
|
||||
- ct = ip_vs_conn_in_get(iph->protocol, snet, 0,
|
||||
+ ct = ip_vs_ct_in_get(iph->protocol, snet, 0,
|
||||
iph->daddr, 0);
|
||||
|
||||
if (!ct || !ip_vs_check_template(ct)) {
|
||||
@@ -325,14 +325,14 @@ ip_vs_sched_persist(struct ip_vs_service
|
||||
snet, 0,
|
||||
htonl(svc->fwmark), 0,
|
||||
dest->addr, 0,
|
||||
- 0,
|
||||
+ IP_VS_CONN_F_TEMPLATE,
|
||||
dest);
|
||||
else
|
||||
ct = ip_vs_conn_new(iph->protocol,
|
||||
snet, 0,
|
||||
iph->daddr, 0,
|
||||
dest->addr, 0,
|
||||
- 0,
|
||||
+ IP_VS_CONN_F_TEMPLATE,
|
||||
dest);
|
||||
if (ct == NULL)
|
||||
return NULL;
|
||||
diff --git a/net/ipv4/ipvs/ip_vs_sync.c b/net/ipv4/ipvs/ip_vs_sync.c
|
||||
--- a/net/ipv4/ipvs/ip_vs_sync.c
|
||||
+++ b/net/ipv4/ipvs/ip_vs_sync.c
|
||||
@@ -297,16 +297,24 @@ static void ip_vs_process_message(const
|
||||
|
||||
p = (char *)buffer + sizeof(struct ip_vs_sync_mesg);
|
||||
for (i=0; i<m->nr_conns; i++) {
|
||||
+ unsigned flags;
|
||||
+
|
||||
s = (struct ip_vs_sync_conn *)p;
|
||||
- cp = ip_vs_conn_in_get(s->protocol,
|
||||
- s->caddr, s->cport,
|
||||
- s->vaddr, s->vport);
|
||||
+ flags = ntohs(s->flags);
|
||||
+ if (!(flags & IP_VS_CONN_F_TEMPLATE))
|
||||
+ cp = ip_vs_conn_in_get(s->protocol,
|
||||
+ s->caddr, s->cport,
|
||||
+ s->vaddr, s->vport);
|
||||
+ else
|
||||
+ cp = ip_vs_ct_in_get(s->protocol,
|
||||
+ s->caddr, s->cport,
|
||||
+ s->vaddr, s->vport);
|
||||
if (!cp) {
|
||||
cp = ip_vs_conn_new(s->protocol,
|
||||
s->caddr, s->cport,
|
||||
s->vaddr, s->vport,
|
||||
s->daddr, s->dport,
|
||||
- ntohs(s->flags), NULL);
|
||||
+ flags, NULL);
|
||||
if (!cp) {
|
||||
IP_VS_ERR("ip_vs_conn_new failed\n");
|
||||
return;
|
||||
@@ -315,11 +323,11 @@ static void ip_vs_process_message(const
|
||||
} else if (!cp->dest) {
|
||||
/* it is an entry created by the synchronization */
|
||||
cp->state = ntohs(s->state);
|
||||
- cp->flags = ntohs(s->flags) | IP_VS_CONN_F_HASHED;
|
||||
+ cp->flags = flags | IP_VS_CONN_F_HASHED;
|
||||
} /* Note that we don't touch its state and flags
|
||||
if it is a normal entry. */
|
||||
|
||||
- if (ntohs(s->flags) & IP_VS_CONN_F_SEQ_MASK) {
|
||||
+ if (flags & IP_VS_CONN_F_SEQ_MASK) {
|
||||
opt = (struct ip_vs_sync_conn_options *)&s[1];
|
||||
memcpy(&cp->in_seq, opt, sizeof(*opt));
|
||||
p += FULL_CONN_SIZE;
|
||||
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -350,8 +350,6 @@ static void tcp_clamp_window(struct sock
|
||||
app_win -= tp->ack.rcv_mss;
|
||||
app_win = max(app_win, 2U*tp->advmss);
|
||||
|
||||
- if (!ofo_win)
|
||||
- tp->window_clamp = min(tp->window_clamp, app_win);
|
||||
tp->rcv_ssthresh = min(tp->window_clamp, 2U*tp->advmss);
|
||||
}
|
||||
}
|
||||
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
|
||||
--- a/net/ipv4/tcp_minisocks.c
|
||||
+++ b/net/ipv4/tcp_minisocks.c
|
||||
@@ -774,7 +774,7 @@ struct sock *tcp_create_openreq_child(st
|
||||
newtp->frto_counter = 0;
|
||||
newtp->frto_highmark = 0;
|
||||
|
||||
- newtp->ca_ops = &tcp_reno;
|
||||
+ newtp->ca_ops = &tcp_init_congestion_ops;
|
||||
|
||||
tcp_set_ca_state(newtp, TCP_CA_Open);
|
||||
tcp_init_xmit_timers(newsk);
|
||||
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
|
||||
--- a/net/ipv6/udp.c
|
||||
+++ b/net/ipv6/udp.c
|
||||
@@ -404,9 +404,8 @@ static struct sock *udp_v6_mcast_next(st
|
||||
continue;
|
||||
|
||||
if (!ipv6_addr_any(&np->rcv_saddr)) {
|
||||
- if (ipv6_addr_equal(&np->rcv_saddr, loc_addr))
|
||||
- return s;
|
||||
- continue;
|
||||
+ if (!ipv6_addr_equal(&np->rcv_saddr, loc_addr))
|
||||
+ continue;
|
||||
}
|
||||
if(!inet6_mc_check(s, loc_addr, rmt_addr))
|
||||
continue;
|
|
@ -1,369 +0,0 @@
|
|||
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S
|
||||
--- a/arch/sparc64/kernel/entry.S
|
||||
+++ b/arch/sparc64/kernel/entry.S
|
||||
@@ -186,7 +186,7 @@ vmalloc_addr:
|
||||
/* This is trivial with the new code... */
|
||||
.globl do_fpdis
|
||||
do_fpdis:
|
||||
- sethi %hi(TSTATE_PEF), %g4 ! IEU0
|
||||
+ sethi %hi(TSTATE_PEF), %g4
|
||||
rdpr %tstate, %g5
|
||||
andcc %g5, %g4, %g0
|
||||
be,pt %xcc, 1f
|
||||
@@ -203,18 +203,18 @@ do_fpdis:
|
||||
add %g0, %g0, %g0
|
||||
ba,a,pt %xcc, rtrap_clr_l6
|
||||
|
||||
-1: ldub [%g6 + TI_FPSAVED], %g5 ! Load Group
|
||||
- wr %g0, FPRS_FEF, %fprs ! LSU Group+4bubbles
|
||||
- andcc %g5, FPRS_FEF, %g0 ! IEU1 Group
|
||||
- be,a,pt %icc, 1f ! CTI
|
||||
- clr %g7 ! IEU0
|
||||
- ldx [%g6 + TI_GSR], %g7 ! Load Group
|
||||
-1: andcc %g5, FPRS_DL, %g0 ! IEU1
|
||||
- bne,pn %icc, 2f ! CTI
|
||||
- fzero %f0 ! FPA
|
||||
- andcc %g5, FPRS_DU, %g0 ! IEU1 Group
|
||||
- bne,pn %icc, 1f ! CTI
|
||||
- fzero %f2 ! FPA
|
||||
+1: ldub [%g6 + TI_FPSAVED], %g5
|
||||
+ wr %g0, FPRS_FEF, %fprs
|
||||
+ andcc %g5, FPRS_FEF, %g0
|
||||
+ be,a,pt %icc, 1f
|
||||
+ clr %g7
|
||||
+ ldx [%g6 + TI_GSR], %g7
|
||||
+1: andcc %g5, FPRS_DL, %g0
|
||||
+ bne,pn %icc, 2f
|
||||
+ fzero %f0
|
||||
+ andcc %g5, FPRS_DU, %g0
|
||||
+ bne,pn %icc, 1f
|
||||
+ fzero %f2
|
||||
faddd %f0, %f2, %f4
|
||||
fmuld %f0, %f2, %f6
|
||||
faddd %f0, %f2, %f8
|
||||
@@ -257,8 +257,10 @@ cplus_fptrap_insn_1:
|
||||
add %g6, TI_FPREGS + 0xc0, %g2
|
||||
faddd %f0, %f2, %f8
|
||||
fmuld %f0, %f2, %f10
|
||||
- ldda [%g1] ASI_BLK_S, %f32 ! grrr, where is ASI_BLK_NUCLEUS 8-(
|
||||
+ membar #Sync
|
||||
+ ldda [%g1] ASI_BLK_S, %f32
|
||||
ldda [%g2] ASI_BLK_S, %f48
|
||||
+ membar #Sync
|
||||
faddd %f0, %f2, %f12
|
||||
fmuld %f0, %f2, %f14
|
||||
faddd %f0, %f2, %f16
|
||||
@@ -269,7 +271,6 @@ cplus_fptrap_insn_1:
|
||||
fmuld %f0, %f2, %f26
|
||||
faddd %f0, %f2, %f28
|
||||
fmuld %f0, %f2, %f30
|
||||
- membar #Sync
|
||||
b,pt %xcc, fpdis_exit
|
||||
nop
|
||||
2: andcc %g5, FPRS_DU, %g0
|
||||
@@ -286,8 +287,10 @@ cplus_fptrap_insn_2:
|
||||
add %g6, TI_FPREGS + 0x40, %g2
|
||||
faddd %f32, %f34, %f36
|
||||
fmuld %f32, %f34, %f38
|
||||
- ldda [%g1] ASI_BLK_S, %f0 ! grrr, where is ASI_BLK_NUCLEUS 8-(
|
||||
+ membar #Sync
|
||||
+ ldda [%g1] ASI_BLK_S, %f0
|
||||
ldda [%g2] ASI_BLK_S, %f16
|
||||
+ membar #Sync
|
||||
faddd %f32, %f34, %f40
|
||||
fmuld %f32, %f34, %f42
|
||||
faddd %f32, %f34, %f44
|
||||
@@ -300,7 +303,6 @@ cplus_fptrap_insn_2:
|
||||
fmuld %f32, %f34, %f58
|
||||
faddd %f32, %f34, %f60
|
||||
fmuld %f32, %f34, %f62
|
||||
- membar #Sync
|
||||
ba,pt %xcc, fpdis_exit
|
||||
nop
|
||||
3: mov SECONDARY_CONTEXT, %g3
|
||||
@@ -311,7 +313,8 @@ cplus_fptrap_insn_3:
|
||||
stxa %g2, [%g3] ASI_DMMU
|
||||
membar #Sync
|
||||
mov 0x40, %g2
|
||||
- ldda [%g1] ASI_BLK_S, %f0 ! grrr, where is ASI_BLK_NUCLEUS 8-(
|
||||
+ membar #Sync
|
||||
+ ldda [%g1] ASI_BLK_S, %f0
|
||||
ldda [%g1 + %g2] ASI_BLK_S, %f16
|
||||
add %g1, 0x80, %g1
|
||||
ldda [%g1] ASI_BLK_S, %f32
|
||||
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S
|
||||
--- a/arch/sparc64/kernel/rtrap.S
|
||||
+++ b/arch/sparc64/kernel/rtrap.S
|
||||
@@ -310,32 +310,33 @@ kern_fpucheck: ldub [%g6 + TI_FPDEPTH]
|
||||
wr %g1, FPRS_FEF, %fprs
|
||||
ldx [%o1 + %o5], %g1
|
||||
add %g6, TI_XFSR, %o1
|
||||
- membar #StoreLoad | #LoadLoad
|
||||
sll %o0, 8, %o2
|
||||
add %g6, TI_FPREGS, %o3
|
||||
brz,pn %l6, 1f
|
||||
add %g6, TI_FPREGS+0x40, %o4
|
||||
|
||||
+ membar #Sync
|
||||
ldda [%o3 + %o2] ASI_BLK_P, %f0
|
||||
ldda [%o4 + %o2] ASI_BLK_P, %f16
|
||||
+ membar #Sync
|
||||
1: andcc %l2, FPRS_DU, %g0
|
||||
be,pn %icc, 1f
|
||||
wr %g1, 0, %gsr
|
||||
add %o2, 0x80, %o2
|
||||
+ membar #Sync
|
||||
ldda [%o3 + %o2] ASI_BLK_P, %f32
|
||||
ldda [%o4 + %o2] ASI_BLK_P, %f48
|
||||
-
|
||||
1: membar #Sync
|
||||
ldx [%o1 + %o5], %fsr
|
||||
2: stb %l5, [%g6 + TI_FPDEPTH]
|
||||
ba,pt %xcc, rt_continue
|
||||
nop
|
||||
5: wr %g0, FPRS_FEF, %fprs
|
||||
- membar #StoreLoad | #LoadLoad
|
||||
sll %o0, 8, %o2
|
||||
|
||||
add %g6, TI_FPREGS+0x80, %o3
|
||||
add %g6, TI_FPREGS+0xc0, %o4
|
||||
+ membar #Sync
|
||||
ldda [%o3 + %o2] ASI_BLK_P, %f32
|
||||
ldda [%o4 + %o2] ASI_BLK_P, %f48
|
||||
membar #Sync
|
||||
diff --git a/arch/sparc64/lib/VISsave.S b/arch/sparc64/lib/VISsave.S
|
||||
--- a/arch/sparc64/lib/VISsave.S
|
||||
+++ b/arch/sparc64/lib/VISsave.S
|
||||
@@ -59,15 +59,17 @@ vis1: ldub [%g6 + TI_FPSAVED], %g3
|
||||
be,pn %icc, 9b
|
||||
add %g6, TI_FPREGS, %g2
|
||||
andcc %o5, FPRS_DL, %g0
|
||||
- membar #StoreStore | #LoadStore
|
||||
|
||||
be,pn %icc, 4f
|
||||
add %g6, TI_FPREGS+0x40, %g3
|
||||
+ membar #Sync
|
||||
stda %f0, [%g2 + %g1] ASI_BLK_P
|
||||
stda %f16, [%g3 + %g1] ASI_BLK_P
|
||||
+ membar #Sync
|
||||
andcc %o5, FPRS_DU, %g0
|
||||
be,pn %icc, 5f
|
||||
4: add %g1, 128, %g1
|
||||
+ membar #Sync
|
||||
stda %f32, [%g2 + %g1] ASI_BLK_P
|
||||
|
||||
stda %f48, [%g3 + %g1] ASI_BLK_P
|
||||
@@ -87,7 +89,7 @@ vis1: ldub [%g6 + TI_FPSAVED], %g3
|
||||
sll %g1, 5, %g1
|
||||
add %g6, TI_FPREGS+0xc0, %g3
|
||||
wr %g0, FPRS_FEF, %fprs
|
||||
- membar #StoreStore | #LoadStore
|
||||
+ membar #Sync
|
||||
stda %f32, [%g2 + %g1] ASI_BLK_P
|
||||
stda %f48, [%g3 + %g1] ASI_BLK_P
|
||||
membar #Sync
|
||||
@@ -128,8 +130,8 @@ VISenterhalf:
|
||||
be,pn %icc, 4f
|
||||
add %g6, TI_FPREGS, %g2
|
||||
|
||||
- membar #StoreStore | #LoadStore
|
||||
add %g6, TI_FPREGS+0x40, %g3
|
||||
+ membar #Sync
|
||||
stda %f0, [%g2 + %g1] ASI_BLK_P
|
||||
stda %f16, [%g3 + %g1] ASI_BLK_P
|
||||
membar #Sync
|
||||
diff --git a/drivers/char/drm/drm_stub.c b/drivers/char/drm/drm_stub.c
|
||||
--- a/drivers/char/drm/drm_stub.c
|
||||
+++ b/drivers/char/drm/drm_stub.c
|
||||
@@ -47,7 +47,7 @@ MODULE_PARM_DESC(cards_limit, "Maximum n
|
||||
MODULE_PARM_DESC(debug, "Enable debug output");
|
||||
|
||||
module_param_named(cards_limit, drm_cards_limit, int, 0444);
|
||||
-module_param_named(debug, drm_debug, int, 0666);
|
||||
+module_param_named(debug, drm_debug, int, 0600);
|
||||
|
||||
drm_head_t **drm_heads;
|
||||
struct drm_sysfs_class *drm_class;
|
||||
diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c
|
||||
--- a/drivers/ieee1394/sbp2.c
|
||||
+++ b/drivers/ieee1394/sbp2.c
|
||||
@@ -596,6 +596,11 @@ static void sbp2util_mark_command_comple
|
||||
spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
|
||||
}
|
||||
|
||||
+static inline int sbp2util_node_is_available(struct scsi_id_instance_data *scsi_id)
|
||||
+{
|
||||
+ return scsi_id && scsi_id->ne && !scsi_id->ne->in_limbo;
|
||||
+}
|
||||
+
|
||||
|
||||
|
||||
/*********************************************
|
||||
@@ -631,11 +636,23 @@ static int sbp2_remove(struct device *de
|
||||
{
|
||||
struct unit_directory *ud;
|
||||
struct scsi_id_instance_data *scsi_id;
|
||||
+ struct scsi_device *sdev;
|
||||
|
||||
SBP2_DEBUG("sbp2_remove");
|
||||
|
||||
ud = container_of(dev, struct unit_directory, device);
|
||||
scsi_id = ud->device.driver_data;
|
||||
+ if (!scsi_id)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Trigger shutdown functions in scsi's highlevel. */
|
||||
+ if (scsi_id->scsi_host)
|
||||
+ scsi_unblock_requests(scsi_id->scsi_host);
|
||||
+ sdev = scsi_id->sdev;
|
||||
+ if (sdev) {
|
||||
+ scsi_id->sdev = NULL;
|
||||
+ scsi_remove_device(sdev);
|
||||
+ }
|
||||
|
||||
sbp2_logout_device(scsi_id);
|
||||
sbp2_remove_device(scsi_id);
|
||||
@@ -944,6 +961,7 @@ alloc_fail:
|
||||
SBP2_ERR("scsi_add_device failed");
|
||||
return PTR_ERR(sdev);
|
||||
}
|
||||
+ scsi_device_put(sdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -2480,7 +2498,7 @@ static int sbp2scsi_queuecommand(struct
|
||||
* If scsi_id is null, it means there is no device in this slot,
|
||||
* so we should return selection timeout.
|
||||
*/
|
||||
- if (!scsi_id) {
|
||||
+ if (!sbp2util_node_is_available(scsi_id)) {
|
||||
SCpnt->result = DID_NO_CONNECT << 16;
|
||||
done (SCpnt);
|
||||
return 0;
|
||||
@@ -2683,6 +2701,18 @@ static void sbp2scsi_complete_command(st
|
||||
}
|
||||
|
||||
|
||||
+static int sbp2scsi_slave_alloc(struct scsi_device *sdev)
|
||||
+{
|
||||
+ ((struct scsi_id_instance_data *)sdev->host->hostdata[0])->sdev = sdev;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void sbp2scsi_slave_destroy(struct scsi_device *sdev)
|
||||
+{
|
||||
+ ((struct scsi_id_instance_data *)sdev->host->hostdata[0])->sdev = NULL;
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
static int sbp2scsi_slave_configure (struct scsi_device *sdev)
|
||||
{
|
||||
blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
|
||||
@@ -2705,7 +2735,7 @@ static int sbp2scsi_abort(struct scsi_cm
|
||||
SBP2_ERR("aborting sbp2 command");
|
||||
scsi_print_command(SCpnt);
|
||||
|
||||
- if (scsi_id) {
|
||||
+ if (sbp2util_node_is_available(scsi_id)) {
|
||||
|
||||
/*
|
||||
* Right now, just return any matching command structures
|
||||
@@ -2749,7 +2779,7 @@ static int __sbp2scsi_reset(struct scsi_
|
||||
|
||||
SBP2_ERR("reset requested");
|
||||
|
||||
- if (scsi_id) {
|
||||
+ if (sbp2util_node_is_available(scsi_id)) {
|
||||
SBP2_ERR("Generating sbp2 fetch agent reset");
|
||||
sbp2_agent_reset(scsi_id, 0);
|
||||
}
|
||||
@@ -2817,7 +2847,9 @@ static struct scsi_host_template scsi_dr
|
||||
.eh_device_reset_handler = sbp2scsi_reset,
|
||||
.eh_bus_reset_handler = sbp2scsi_reset,
|
||||
.eh_host_reset_handler = sbp2scsi_reset,
|
||||
+ .slave_alloc = sbp2scsi_slave_alloc,
|
||||
.slave_configure = sbp2scsi_slave_configure,
|
||||
+ .slave_destroy = sbp2scsi_slave_destroy,
|
||||
.this_id = -1,
|
||||
.sg_tablesize = SG_ALL,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c
|
||||
--- a/drivers/net/wireless/orinoco.c
|
||||
+++ b/drivers/net/wireless/orinoco.c
|
||||
@@ -502,9 +502,14 @@ static int orinoco_xmit(struct sk_buff *
|
||||
return 0;
|
||||
}
|
||||
|
||||
- /* Length of the packet body */
|
||||
- /* FIXME: what if the skb is smaller than this? */
|
||||
- len = max_t(int,skb->len - ETH_HLEN, ETH_ZLEN - ETH_HLEN);
|
||||
+ /* Check packet length, pad short packets, round up odd length */
|
||||
+ len = max_t(int, ALIGN(skb->len, 2), ETH_ZLEN);
|
||||
+ if (skb->len < len) {
|
||||
+ skb = skb_padto(skb, len);
|
||||
+ if (skb == NULL)
|
||||
+ goto fail;
|
||||
+ }
|
||||
+ len -= ETH_HLEN;
|
||||
|
||||
eh = (struct ethhdr *)skb->data;
|
||||
|
||||
@@ -556,8 +561,7 @@ static int orinoco_xmit(struct sk_buff *
|
||||
p = skb->data;
|
||||
}
|
||||
|
||||
- /* Round up for odd length packets */
|
||||
- err = hermes_bap_pwrite(hw, USER_BAP, p, ALIGN(data_len, 2),
|
||||
+ err = hermes_bap_pwrite(hw, USER_BAP, p, data_len,
|
||||
txfid, data_off);
|
||||
if (err) {
|
||||
printk(KERN_ERR "%s: Error %d writing packet to BAP\n",
|
||||
diff --git a/fs/namei.c b/fs/namei.c
|
||||
--- a/fs/namei.c
|
||||
+++ b/fs/namei.c
|
||||
@@ -1557,19 +1557,19 @@ do_link:
|
||||
if (nd->last_type != LAST_NORM)
|
||||
goto exit;
|
||||
if (nd->last.name[nd->last.len]) {
|
||||
- putname(nd->last.name);
|
||||
+ __putname(nd->last.name);
|
||||
goto exit;
|
||||
}
|
||||
error = -ELOOP;
|
||||
if (count++==32) {
|
||||
- putname(nd->last.name);
|
||||
+ __putname(nd->last.name);
|
||||
goto exit;
|
||||
}
|
||||
dir = nd->dentry;
|
||||
down(&dir->d_inode->i_sem);
|
||||
path.dentry = __lookup_hash(&nd->last, nd->dentry, nd);
|
||||
path.mnt = nd->mnt;
|
||||
- putname(nd->last.name);
|
||||
+ __putname(nd->last.name);
|
||||
goto do_last;
|
||||
}
|
||||
|
||||
diff --git a/net/ipv4/tcp_bic.c b/net/ipv4/tcp_bic.c
|
||||
--- a/net/ipv4/tcp_bic.c
|
||||
+++ b/net/ipv4/tcp_bic.c
|
||||
@@ -136,7 +136,7 @@ static inline void bictcp_update(struct
|
||||
else if (cwnd < ca->last_max_cwnd + max_increment*(BICTCP_B-1))
|
||||
/* slow start */
|
||||
ca->cnt = (cwnd * (BICTCP_B-1))
|
||||
- / cwnd-ca->last_max_cwnd;
|
||||
+ / (cwnd - ca->last_max_cwnd);
|
||||
else
|
||||
/* linear increase */
|
||||
ca->cnt = cwnd / max_increment;
|
||||
diff --git a/security/keys/request_key_auth.c b/security/keys/request_key_auth.c
|
||||
--- a/security/keys/request_key_auth.c
|
||||
+++ b/security/keys/request_key_auth.c
|
||||
@@ -96,6 +96,7 @@ static void request_key_auth_destroy(str
|
||||
kenter("{%d}", key->serial);
|
||||
|
||||
key_put(rka->target_key);
|
||||
+ kfree(rka);
|
||||
|
||||
} /* end request_key_auth_destroy() */
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
# Description: checks if ppc_md.feature_call is present before using it.
|
||||
# Patch author: David Woodhouse <dwmw2@infradead.org>
|
||||
# Upstream status: submitted.
|
||||
|
||||
We shouldn't be assuming that ppc_md.feature_call will be present.
|
||||
|
||||
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
|
||||
|
||||
--- linux-2.6.12/sound/ppc/pmac.c.orig 2005-08-17 11:19:46.000000000 +0100
|
||||
+++ linux-2.6.12/sound/ppc/pmac.c 2005-08-17 11:20:05.000000000 +0100
|
||||
@@ -765,7 +765,8 @@ snd_pmac_ctrl_intr(int irq, void *devid,
|
||||
*/
|
||||
static void snd_pmac_sound_feature(pmac_t *chip, int enable)
|
||||
{
|
||||
- ppc_md.feature_call(PMAC_FTR_SOUND_CHIP_ENABLE, chip->node, 0, enable);
|
||||
+ if (ppc_md.feature_call)
|
||||
+ ppc_md.feature_call(PMAC_FTR_SOUND_CHIP_ENABLE, chip->node, 0, enable);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
--
|
||||
dwmw2
|
||||
|
||||
---------------------------------------------------------------------------------------
|
||||
Wanadoo vous informe que cet e-mail a ete controle par l'anti-virus mail.
|
||||
Aucun virus connu a ce jour par nos services n'a ete detecte.
|
||||
|
||||
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
# Subject: [patch 059/167] ppc64: override command line AS/LD/CC variables when adding -m64 and co for biarch compilers
|
||||
# To: torvalds@osdl.org
|
||||
# Cc: akpm@osdl.org, sven.luther@wanadoo.fr, anton@samba.org,
|
||||
# benh@kernel.crashing.org, paulus@samba.org
|
||||
# From: akpm@osdl.org
|
||||
#
|
||||
# The following kind of calls currently fails :
|
||||
#
|
||||
# make ARCH=ppc64 CC="gcc-3.4"
|
||||
#
|
||||
# Since the code for detecting a biarch compiler and adding the needed 64bit
|
||||
# magic argument fails if the AS/LD/CC commands are overriden in the command
|
||||
# line.
|
||||
#
|
||||
# The attached patch fixes this by using the make override and += directive,
|
||||
# but i am not 100% sure this will work without gmake, as i am no Makefile
|
||||
# expert.
|
||||
#
|
||||
# Cc: Paul Mackerras <paulus@samba.org>
|
||||
# Cc: Anton Blanchard <anton@samba.org>
|
||||
# Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
# Signed-off-by: Andrew Morton <akpm@osdl.org>
|
||||
# ---
|
||||
#
|
||||
# arch/ppc64/Makefile | 6 +++---
|
||||
# 1 files changed, 3 insertions(+), 3 deletions(-)
|
||||
#
|
||||
diff -puN arch/ppc64/Makefile~ppc64-override-command-line-as-ld-cc-variables-when-adding-m64-and-co-for-biarch-compilers arch/ppc64/Makefile
|
||||
--- 25/arch/ppc64/Makefile~ppc64-override-command-line-as-ld-cc-variables-when-adding-m64-and-co-for-biarch-compilers 2005-06-21 16:29:10.000000000 -0700
|
||||
+++ 25-akpm/arch/ppc64/Makefile 2005-06-21 16:29:10.000000000 -0700
|
||||
@@ -35,9 +35,9 @@ CROSS32AS := $(AS) -a32
|
||||
CROSS32LD := $(LD) -m elf32ppc
|
||||
CROSS32OBJCOPY := $(OBJCOPY)
|
||||
endif
|
||||
-AS := $(AS) -a64
|
||||
-LD := $(LD) -m elf64ppc
|
||||
-CC := $(CC) -m64
|
||||
+override AS += -a64
|
||||
+override LD += -m elf64ppc
|
||||
+override CC += -m64
|
||||
endif
|
||||
|
||||
export CROSS32CC CROSS32AS CROSS32LD CROSS32OBJCOPY
|
||||
_
|
Loading…
Reference in New Issue