diff options
| author | Dave Airlie <airlied@starflyer.(none)> | 2005-10-22 01:24:35 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@linux.ie> | 2005-10-22 01:24:35 -0400 |
| commit | 23bfc1a339e98510f2ce25a2764a0cfe195faa9e (patch) | |
| tree | 51652ad15f85d9d1367ae6f9b8641dfe46b4c501 | |
| parent | 312f5726055534be1dc9dd369be13aabd2943fcb (diff) | |
| parent | 63172cb3d5ef762dcb60a292bc7f016b85cf6e1f (diff) | |
merge linus head to drm-mm branch
| -rw-r--r-- | arch/arm/mach-integrator/impd1.c | 15 | ||||
| -rw-r--r-- | arch/arm/mach-pxa/generic.c | 20 | ||||
| -rw-r--r-- | arch/arm/mach-s3c2410/mach-bast.c | 6 | ||||
| -rw-r--r-- | arch/i386/kernel/cpu/cpufreq/powernow-k8.c | 30 | ||||
| -rw-r--r-- | arch/ppc64/kernel/iSeries_htab.c | 2 | ||||
| -rw-r--r-- | arch/ppc64/kernel/time.c | 2 | ||||
| -rw-r--r-- | arch/ppc64/mm/init.c | 3 | ||||
| -rw-r--r-- | drivers/char/drm/mga_drv.h | 2 | ||||
| -rw-r--r-- | drivers/char/drm/mga_state.c | 2 | ||||
| -rw-r--r-- | drivers/message/fusion/mptsas.c | 12 | ||||
| -rw-r--r-- | include/asm-arm/arch-s3c2410/regs-clock.h | 21 | ||||
| -rw-r--r-- | include/linux/hugetlb.h | 16 | ||||
| -rw-r--r-- | kernel/exit.c | 1 | ||||
| -rw-r--r-- | kernel/posix-cpu-timers.c | 28 | ||||
| -rw-r--r-- | kernel/posix-timers.c | 2 | ||||
| -rw-r--r-- | kernel/signal.c | 14 | ||||
| -rw-r--r-- | mm/hugetlb.c | 22 | ||||
| -rw-r--r-- | mm/memory.c | 14 | ||||
| -rw-r--r-- | net/dccp/ipv4.c | 2 | ||||
| -rw-r--r-- | net/dccp/output.c | 10 | ||||
| -rw-r--r-- | net/dccp/proto.c | 2 | ||||
| -rw-r--r-- | net/ipv4/tcp_output.c | 12 |
22 files changed, 135 insertions, 103 deletions
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c index c3c2f17d030e..a1b153d1626c 100644 --- a/arch/arm/mach-integrator/impd1.c +++ b/arch/arm/mach-integrator/impd1.c | |||
| @@ -67,7 +67,7 @@ static void impd1_setvco(struct clk *clk, struct icst525_vco vco) | |||
| 67 | } | 67 | } |
| 68 | writel(0, impd1->base + IMPD1_LOCK); | 68 | writel(0, impd1->base + IMPD1_LOCK); |
| 69 | 69 | ||
| 70 | #if DEBUG | 70 | #ifdef DEBUG |
| 71 | vco.v = val & 0x1ff; | 71 | vco.v = val & 0x1ff; |
| 72 | vco.r = (val >> 9) & 0x7f; | 72 | vco.r = (val >> 9) & 0x7f; |
| 73 | vco.s = (val >> 16) & 7; | 73 | vco.s = (val >> 16) & 7; |
| @@ -427,17 +427,18 @@ static int impd1_probe(struct lm_device *dev) | |||
| 427 | return ret; | 427 | return ret; |
| 428 | } | 428 | } |
| 429 | 429 | ||
| 430 | static int impd1_remove_one(struct device *dev, void *data) | ||
| 431 | { | ||
| 432 | device_unregister(dev); | ||
| 433 | return 0; | ||
| 434 | } | ||
| 435 | |||
| 430 | static void impd1_remove(struct lm_device *dev) | 436 | static void impd1_remove(struct lm_device *dev) |
| 431 | { | 437 | { |
| 432 | struct impd1_module *impd1 = lm_get_drvdata(dev); | 438 | struct impd1_module *impd1 = lm_get_drvdata(dev); |
| 433 | struct list_head *l, *n; | ||
| 434 | int i; | 439 | int i; |
| 435 | 440 | ||
| 436 | list_for_each_safe(l, n, &dev->dev.children) { | 441 | device_for_each_child(&dev->dev, NULL, impd1_remove_one); |
| 437 | struct device *d = list_to_dev(l); | ||
| 438 | |||
| 439 | device_unregister(d); | ||
| 440 | } | ||
| 441 | 442 | ||
| 442 | for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++) | 443 | for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++) |
| 443 | clk_unregister(&impd1->vcos[i]); | 444 | clk_unregister(&impd1->vcos[i]); |
diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c index d327c127eddb..1d7677669a76 100644 --- a/arch/arm/mach-pxa/generic.c +++ b/arch/arm/mach-pxa/generic.c | |||
| @@ -250,6 +250,25 @@ void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info) | |||
| 250 | i2c_device.dev.platform_data = info; | 250 | i2c_device.dev.platform_data = info; |
| 251 | } | 251 | } |
| 252 | 252 | ||
| 253 | static struct resource i2s_resources[] = { | ||
| 254 | { | ||
| 255 | .start = 0x40400000, | ||
| 256 | .end = 0x40400083, | ||
| 257 | .flags = IORESOURCE_MEM, | ||
| 258 | }, { | ||
| 259 | .start = IRQ_I2S, | ||
| 260 | .end = IRQ_I2S, | ||
| 261 | .flags = IORESOURCE_IRQ, | ||
| 262 | }, | ||
| 263 | }; | ||
| 264 | |||
| 265 | static struct platform_device i2s_device = { | ||
| 266 | .name = "pxa2xx-i2s", | ||
| 267 | .id = -1, | ||
| 268 | .resource = i2c_resources, | ||
| 269 | .num_resources = ARRAY_SIZE(i2s_resources), | ||
| 270 | }; | ||
| 271 | |||
| 253 | static struct platform_device *devices[] __initdata = { | 272 | static struct platform_device *devices[] __initdata = { |
| 254 | &pxamci_device, | 273 | &pxamci_device, |
| 255 | &udc_device, | 274 | &udc_device, |
| @@ -258,6 +277,7 @@ static struct platform_device *devices[] __initdata = { | |||
| 258 | &btuart_device, | 277 | &btuart_device, |
| 259 | &stuart_device, | 278 | &stuart_device, |
| 260 | &i2c_device, | 279 | &i2c_device, |
| 280 | &i2s_device, | ||
| 261 | }; | 281 | }; |
| 262 | 282 | ||
| 263 | static int __init pxa_init(void) | 283 | static int __init pxa_init(void) |
diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c index 8ca955984645..7b51bfd0ba6d 100644 --- a/arch/arm/mach-s3c2410/mach-bast.c +++ b/arch/arm/mach-s3c2410/mach-bast.c | |||
| @@ -307,9 +307,9 @@ static void bast_nand_select(struct s3c2410_nand_set *set, int slot) | |||
| 307 | } | 307 | } |
| 308 | 308 | ||
| 309 | static struct s3c2410_platform_nand bast_nand_info = { | 309 | static struct s3c2410_platform_nand bast_nand_info = { |
| 310 | .tacls = 40, | 310 | .tacls = 30, |
| 311 | .twrph0 = 80, | 311 | .twrph0 = 60, |
| 312 | .twrph1 = 80, | 312 | .twrph1 = 60, |
| 313 | .nr_sets = ARRAY_SIZE(bast_nand_sets), | 313 | .nr_sets = ARRAY_SIZE(bast_nand_sets), |
| 314 | .sets = bast_nand_sets, | 314 | .sets = bast_nand_sets, |
| 315 | .select_chip = bast_nand_select, | 315 | .select_chip = bast_nand_select, |
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c index ab6e0611303d..58ca98fdc2ca 100644 --- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c | |||
| @@ -44,7 +44,7 @@ | |||
| 44 | 44 | ||
| 45 | #define PFX "powernow-k8: " | 45 | #define PFX "powernow-k8: " |
| 46 | #define BFX PFX "BIOS error: " | 46 | #define BFX PFX "BIOS error: " |
| 47 | #define VERSION "version 1.50.3" | 47 | #define VERSION "version 1.50.4" |
| 48 | #include "powernow-k8.h" | 48 | #include "powernow-k8.h" |
| 49 | 49 | ||
| 50 | /* serialize freq changes */ | 50 | /* serialize freq changes */ |
| @@ -111,8 +111,8 @@ static int query_current_values_with_pending_wait(struct powernow_k8_data *data) | |||
| 111 | u32 i = 0; | 111 | u32 i = 0; |
| 112 | 112 | ||
| 113 | do { | 113 | do { |
| 114 | if (i++ > 0x1000000) { | 114 | if (i++ > 10000) { |
| 115 | printk(KERN_ERR PFX "detected change pending stuck\n"); | 115 | dprintk("detected change pending stuck\n"); |
| 116 | return 1; | 116 | return 1; |
| 117 | } | 117 | } |
| 118 | rdmsr(MSR_FIDVID_STATUS, lo, hi); | 118 | rdmsr(MSR_FIDVID_STATUS, lo, hi); |
| @@ -159,6 +159,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid) | |||
| 159 | { | 159 | { |
| 160 | u32 lo; | 160 | u32 lo; |
| 161 | u32 savevid = data->currvid; | 161 | u32 savevid = data->currvid; |
| 162 | u32 i = 0; | ||
| 162 | 163 | ||
| 163 | if ((fid & INVALID_FID_MASK) || (data->currvid & INVALID_VID_MASK)) { | 164 | if ((fid & INVALID_FID_MASK) || (data->currvid & INVALID_VID_MASK)) { |
| 164 | printk(KERN_ERR PFX "internal error - overflow on fid write\n"); | 165 | printk(KERN_ERR PFX "internal error - overflow on fid write\n"); |
| @@ -170,10 +171,13 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid) | |||
| 170 | dprintk("writing fid 0x%x, lo 0x%x, hi 0x%x\n", | 171 | dprintk("writing fid 0x%x, lo 0x%x, hi 0x%x\n", |
| 171 | fid, lo, data->plllock * PLL_LOCK_CONVERSION); | 172 | fid, lo, data->plllock * PLL_LOCK_CONVERSION); |
| 172 | 173 | ||
| 173 | wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION); | 174 | do { |
| 174 | 175 | wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION); | |
| 175 | if (query_current_values_with_pending_wait(data)) | 176 | if (i++ > 100) { |
| 176 | return 1; | 177 | printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); |
| 178 | return 1; | ||
| 179 | } | ||
| 180 | } while (query_current_values_with_pending_wait(data)); | ||
| 177 | 181 | ||
| 178 | count_off_irt(data); | 182 | count_off_irt(data); |
| 179 | 183 | ||
| @@ -197,6 +201,7 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid) | |||
| 197 | { | 201 | { |
| 198 | u32 lo; | 202 | u32 lo; |
| 199 | u32 savefid = data->currfid; | 203 | u32 savefid = data->currfid; |
| 204 | int i = 0; | ||
| 200 | 205 | ||
| 201 | if ((data->currfid & INVALID_FID_MASK) || (vid & INVALID_VID_MASK)) { | 206 | if ((data->currfid & INVALID_FID_MASK) || (vid & INVALID_VID_MASK)) { |
| 202 | printk(KERN_ERR PFX "internal error - overflow on vid write\n"); | 207 | printk(KERN_ERR PFX "internal error - overflow on vid write\n"); |
| @@ -208,10 +213,13 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid) | |||
| 208 | dprintk("writing vid 0x%x, lo 0x%x, hi 0x%x\n", | 213 | dprintk("writing vid 0x%x, lo 0x%x, hi 0x%x\n", |
| 209 | vid, lo, STOP_GRANT_5NS); | 214 | vid, lo, STOP_GRANT_5NS); |
| 210 | 215 | ||
| 211 | wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS); | 216 | do { |
| 212 | 217 | wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS); | |
| 213 | if (query_current_values_with_pending_wait(data)) | 218 | if (i++ > 100) { |
| 214 | return 1; | 219 | printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); |
| 220 | return 1; | ||
| 221 | } | ||
| 222 | } while (query_current_values_with_pending_wait(data)); | ||
| 215 | 223 | ||
| 216 | if (savefid != data->currfid) { | 224 | if (savefid != data->currfid) { |
| 217 | printk(KERN_ERR PFX "fid changed on vid trans, old 0x%x new 0x%x\n", | 225 | printk(KERN_ERR PFX "fid changed on vid trans, old 0x%x new 0x%x\n", |
diff --git a/arch/ppc64/kernel/iSeries_htab.c b/arch/ppc64/kernel/iSeries_htab.c index 2192055a90a0..073b76661747 100644 --- a/arch/ppc64/kernel/iSeries_htab.c +++ b/arch/ppc64/kernel/iSeries_htab.c | |||
| @@ -66,7 +66,7 @@ static long iSeries_hpte_insert(unsigned long hpte_group, unsigned long va, | |||
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | if (slot < 0) { /* MSB set means secondary group */ | 68 | if (slot < 0) { /* MSB set means secondary group */ |
| 69 | vflags |= HPTE_V_VALID; | 69 | vflags |= HPTE_V_SECONDARY; |
| 70 | secondary = 1; | 70 | secondary = 1; |
| 71 | slot &= 0x7fffffffffffffff; | 71 | slot &= 0x7fffffffffffffff; |
| 72 | } | 72 | } |
diff --git a/arch/ppc64/kernel/time.c b/arch/ppc64/kernel/time.c index 9939c206afa4..b56c6a324e17 100644 --- a/arch/ppc64/kernel/time.c +++ b/arch/ppc64/kernel/time.c | |||
| @@ -870,7 +870,7 @@ void div128_by_32( unsigned long dividend_high, unsigned long dividend_low, | |||
| 870 | rb = ((ra + b) - (x * divisor)) << 32; | 870 | rb = ((ra + b) - (x * divisor)) << 32; |
| 871 | 871 | ||
| 872 | y = (rb + c)/divisor; | 872 | y = (rb + c)/divisor; |
| 873 | rc = ((rb + b) - (y * divisor)) << 32; | 873 | rc = ((rb + c) - (y * divisor)) << 32; |
| 874 | 874 | ||
| 875 | z = (rc + d)/divisor; | 875 | z = (rc + d)/divisor; |
| 876 | 876 | ||
diff --git a/arch/ppc64/mm/init.c b/arch/ppc64/mm/init.c index c2157c9c3acb..be64b157afce 100644 --- a/arch/ppc64/mm/init.c +++ b/arch/ppc64/mm/init.c | |||
| @@ -799,8 +799,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long ea, | |||
| 799 | if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp)) | 799 | if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp)) |
| 800 | local = 1; | 800 | local = 1; |
| 801 | 801 | ||
| 802 | __hash_page(ea, pte_val(pte) & (_PAGE_USER|_PAGE_RW), vsid, ptep, | 802 | __hash_page(ea, 0, vsid, ptep, 0x300, local); |
| 803 | 0x300, local); | ||
| 804 | local_irq_restore(flags); | 803 | local_irq_restore(flags); |
| 805 | } | 804 | } |
| 806 | 805 | ||
diff --git a/drivers/char/drm/mga_drv.h b/drivers/char/drm/mga_drv.h index 474853deecfa..461728e6a58a 100644 --- a/drivers/char/drm/mga_drv.h +++ b/drivers/char/drm/mga_drv.h | |||
| @@ -228,7 +228,7 @@ static inline u32 _MGA_READ(u32 * addr) | |||
| 228 | #define MGA_EMIT_STATE( dev_priv, dirty ) \ | 228 | #define MGA_EMIT_STATE( dev_priv, dirty ) \ |
| 229 | do { \ | 229 | do { \ |
| 230 | if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \ | 230 | if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \ |
| 231 | if ( dev_priv->chipset == MGA_CARD_TYPE_G400 ) { \ | 231 | if ( dev_priv->chipset >= MGA_CARD_TYPE_G400 ) { \ |
| 232 | mga_g400_emit_state( dev_priv ); \ | 232 | mga_g400_emit_state( dev_priv ); \ |
| 233 | } else { \ | 233 | } else { \ |
| 234 | mga_g200_emit_state( dev_priv ); \ | 234 | mga_g200_emit_state( dev_priv ); \ |
diff --git a/drivers/char/drm/mga_state.c b/drivers/char/drm/mga_state.c index ee77685069d0..47f54b5ae956 100644 --- a/drivers/char/drm/mga_state.c +++ b/drivers/char/drm/mga_state.c | |||
| @@ -53,7 +53,7 @@ static void mga_emit_clip_rect(drm_mga_private_t * dev_priv, | |||
| 53 | 53 | ||
| 54 | /* Force reset of DWGCTL on G400 (eliminates clip disable bit). | 54 | /* Force reset of DWGCTL on G400 (eliminates clip disable bit). |
| 55 | */ | 55 | */ |
| 56 | if (dev_priv->chipset == MGA_CARD_TYPE_G400) { | 56 | if (dev_priv->chipset >= MGA_CARD_TYPE_G400) { |
| 57 | DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl, | 57 | DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl, |
| 58 | MGA_LEN + MGA_EXEC, 0x80000000, | 58 | MGA_LEN + MGA_EXEC, 0x80000000, |
| 59 | MGA_DWGCTL, ctx->dwgctl, | 59 | MGA_DWGCTL, ctx->dwgctl, |
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index 429820e48c69..7de19a84dc74 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
| @@ -257,8 +257,8 @@ static void mptsas_print_device_pg0(SasDevicePage0_t *pg0) | |||
| 257 | printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address)); | 257 | printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address)); |
| 258 | printk("Target ID=0x%X\n", pg0->TargetID); | 258 | printk("Target ID=0x%X\n", pg0->TargetID); |
| 259 | printk("Bus=0x%X\n", pg0->Bus); | 259 | printk("Bus=0x%X\n", pg0->Bus); |
| 260 | printk("PhyNum=0x%X\n", pg0->PhyNum); | 260 | printk("Parent Phy Num=0x%X\n", pg0->PhyNum); |
| 261 | printk("AccessStatus=0x%X\n", le16_to_cpu(pg0->AccessStatus)); | 261 | printk("Access Status=0x%X\n", le16_to_cpu(pg0->AccessStatus)); |
| 262 | printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo)); | 262 | printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo)); |
| 263 | printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags)); | 263 | printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags)); |
| 264 | printk("Physical Port=0x%X\n", pg0->PhysicalPort); | 264 | printk("Physical Port=0x%X\n", pg0->PhysicalPort); |
| @@ -270,7 +270,7 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1) | |||
| 270 | printk("---- SAS EXPANDER PAGE 1 ------------\n"); | 270 | printk("---- SAS EXPANDER PAGE 1 ------------\n"); |
| 271 | 271 | ||
| 272 | printk("Physical Port=0x%X\n", pg1->PhysicalPort); | 272 | printk("Physical Port=0x%X\n", pg1->PhysicalPort); |
| 273 | printk("PHY Identifier=0x%X\n", pg1->Phy); | 273 | printk("PHY Identifier=0x%X\n", pg1->PhyIdentifier); |
| 274 | printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate); | 274 | printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate); |
| 275 | printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate); | 275 | printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate); |
| 276 | printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate); | 276 | printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate); |
| @@ -604,7 +604,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, | |||
| 604 | mptsas_print_expander_pg1(buffer); | 604 | mptsas_print_expander_pg1(buffer); |
| 605 | 605 | ||
| 606 | /* save config data */ | 606 | /* save config data */ |
| 607 | phy_info->phy_id = buffer->Phy; | 607 | phy_info->phy_id = buffer->PhyIdentifier; |
| 608 | phy_info->port_id = buffer->PhysicalPort; | 608 | phy_info->port_id = buffer->PhysicalPort; |
| 609 | phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate; | 609 | phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate; |
| 610 | phy_info->programmed_link_rate = buffer->ProgrammedLinkRate; | 610 | phy_info->programmed_link_rate = buffer->ProgrammedLinkRate; |
| @@ -825,6 +825,8 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index) | |||
| 825 | mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, | 825 | mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, |
| 826 | (MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE << | 826 | (MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE << |
| 827 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle); | 827 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle); |
| 828 | port_info->phy_info[i].identify.phy_id = | ||
| 829 | port_info->phy_info[i].phy_id; | ||
| 828 | handle = port_info->phy_info[i].identify.handle; | 830 | handle = port_info->phy_info[i].identify.handle; |
| 829 | 831 | ||
| 830 | if (port_info->phy_info[i].attached.handle) { | 832 | if (port_info->phy_info[i].attached.handle) { |
| @@ -881,6 +883,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index) | |||
| 881 | (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << | 883 | (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << |
| 882 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), | 884 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), |
| 883 | port_info->phy_info[i].identify.handle); | 885 | port_info->phy_info[i].identify.handle); |
| 886 | port_info->phy_info[i].identify.phy_id = | ||
| 887 | port_info->phy_info[i].phy_id; | ||
| 884 | } | 888 | } |
| 885 | 889 | ||
| 886 | if (port_info->phy_info[i].attached.handle) { | 890 | if (port_info->phy_info[i].attached.handle) { |
diff --git a/include/asm-arm/arch-s3c2410/regs-clock.h b/include/asm-arm/arch-s3c2410/regs-clock.h index 16f4c3cc1388..34360706e016 100644 --- a/include/asm-arm/arch-s3c2410/regs-clock.h +++ b/include/asm-arm/arch-s3c2410/regs-clock.h | |||
| @@ -18,7 +18,9 @@ | |||
| 18 | * 10-Feb-2005 Ben Dooks Fixed CAMDIVN address (Guillaume Gourat) | 18 | * 10-Feb-2005 Ben Dooks Fixed CAMDIVN address (Guillaume Gourat) |
| 19 | * 10-Mar-2005 Lucas Villa Real Changed S3C2410_VA to S3C24XX_VA | 19 | * 10-Mar-2005 Lucas Villa Real Changed S3C2410_VA to S3C24XX_VA |
| 20 | * 27-Aug-2005 Ben Dooks Add clock-slow info | 20 | * 27-Aug-2005 Ben Dooks Add clock-slow info |
| 21 | */ | 21 | * 20-Oct-2005 Ben Dooks Fixed overflow in PLL (Guillaume Gourat) |
| 22 | * 20-Oct-2005 Ben Dooks Add masks for DCLK (Guillaume Gourat) | ||
| 23 | */ | ||
| 22 | 24 | ||
| 23 | #ifndef __ASM_ARM_REGS_CLOCK | 25 | #ifndef __ASM_ARM_REGS_CLOCK |
| 24 | #define __ASM_ARM_REGS_CLOCK "$Id: clock.h,v 1.4 2003/04/30 14:50:51 ben Exp $" | 26 | #define __ASM_ARM_REGS_CLOCK "$Id: clock.h,v 1.4 2003/04/30 14:50:51 ben Exp $" |
| @@ -66,11 +68,16 @@ | |||
| 66 | #define S3C2410_DCLKCON_DCLK0_UCLK (1<<1) | 68 | #define S3C2410_DCLKCON_DCLK0_UCLK (1<<1) |
| 67 | #define S3C2410_DCLKCON_DCLK0_DIV(x) (((x) - 1 )<<4) | 69 | #define S3C2410_DCLKCON_DCLK0_DIV(x) (((x) - 1 )<<4) |
| 68 | #define S3C2410_DCLKCON_DCLK0_CMP(x) (((x) - 1 )<<8) | 70 | #define S3C2410_DCLKCON_DCLK0_CMP(x) (((x) - 1 )<<8) |
| 71 | #define S3C2410_DCLKCON_DCLK0_DIV_MASK ((0xf)<<4) | ||
| 72 | #define S3C2410_DCLKCON_DCLK0_CMP_MASK ((0xf)<<8) | ||
| 69 | 73 | ||
| 70 | #define S3C2410_DCLKCON_DCLK1EN (1<<16) | 74 | #define S3C2410_DCLKCON_DCLK1EN (1<<16) |
| 71 | #define S3C2410_DCLKCON_DCLK1_PCLK (0<<17) | 75 | #define S3C2410_DCLKCON_DCLK1_PCLK (0<<17) |
| 72 | #define S3C2410_DCLKCON_DCLK1_UCLK (1<<17) | 76 | #define S3C2410_DCLKCON_DCLK1_UCLK (1<<17) |
| 73 | #define S3C2410_DCLKCON_DCLK1_DIV(x) (((x) - 1) <<20) | 77 | #define S3C2410_DCLKCON_DCLK1_DIV(x) (((x) - 1) <<20) |
| 78 | #define S3C2410_DCLKCON_DCLK1_CMP(x) (((x) - 1) <<24) | ||
| 79 | #define S3C2410_DCLKCON_DCLK1_DIV_MASK ((0xf) <<20) | ||
| 80 | #define S3C2410_DCLKCON_DCLK1_CMP_MASK ((0xf) <<24) | ||
| 74 | 81 | ||
| 75 | #define S3C2410_CLKDIVN_PDIVN (1<<0) | 82 | #define S3C2410_CLKDIVN_PDIVN (1<<0) |
| 76 | #define S3C2410_CLKDIVN_HDIVN (1<<1) | 83 | #define S3C2410_CLKDIVN_HDIVN (1<<1) |
| @@ -83,10 +90,13 @@ | |||
| 83 | 90 | ||
| 84 | #ifndef __ASSEMBLY__ | 91 | #ifndef __ASSEMBLY__ |
| 85 | 92 | ||
| 93 | #include <asm/div64.h> | ||
| 94 | |||
| 86 | static inline unsigned int | 95 | static inline unsigned int |
| 87 | s3c2410_get_pll(int pllval, int baseclk) | 96 | s3c2410_get_pll(unsigned int pllval, unsigned int baseclk) |
| 88 | { | 97 | { |
| 89 | int mdiv, pdiv, sdiv; | 98 | unsigned int mdiv, pdiv, sdiv; |
| 99 | uint64_t fvco; | ||
| 90 | 100 | ||
| 91 | mdiv = pllval >> S3C2410_PLLCON_MDIVSHIFT; | 101 | mdiv = pllval >> S3C2410_PLLCON_MDIVSHIFT; |
| 92 | pdiv = pllval >> S3C2410_PLLCON_PDIVSHIFT; | 102 | pdiv = pllval >> S3C2410_PLLCON_PDIVSHIFT; |
| @@ -96,7 +106,10 @@ s3c2410_get_pll(int pllval, int baseclk) | |||
| 96 | pdiv &= S3C2410_PLLCON_PDIVMASK; | 106 | pdiv &= S3C2410_PLLCON_PDIVMASK; |
| 97 | sdiv &= S3C2410_PLLCON_SDIVMASK; | 107 | sdiv &= S3C2410_PLLCON_SDIVMASK; |
| 98 | 108 | ||
| 99 | return (baseclk * (mdiv + 8)) / ((pdiv + 2) << sdiv); | 109 | fvco = (uint64_t)baseclk * (mdiv + 8); |
| 110 | do_div(fvco, (pdiv + 2) << sdiv); | ||
| 111 | |||
| 112 | return (unsigned int)fvco; | ||
| 100 | } | 113 | } |
| 101 | 114 | ||
| 102 | #endif /* __ASSEMBLY__ */ | 115 | #endif /* __ASSEMBLY__ */ |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 42cb7d70f9ac..d664330d900e 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
| @@ -25,6 +25,8 @@ int is_hugepage_mem_enough(size_t); | |||
| 25 | unsigned long hugetlb_total_pages(void); | 25 | unsigned long hugetlb_total_pages(void); |
| 26 | struct page *alloc_huge_page(void); | 26 | struct page *alloc_huge_page(void); |
| 27 | void free_huge_page(struct page *); | 27 | void free_huge_page(struct page *); |
| 28 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | ||
| 29 | unsigned long address, int write_access); | ||
| 28 | 30 | ||
| 29 | extern unsigned long max_huge_pages; | 31 | extern unsigned long max_huge_pages; |
| 30 | extern const unsigned long hugetlb_zero, hugetlb_infinity; | 32 | extern const unsigned long hugetlb_zero, hugetlb_infinity; |
| @@ -99,6 +101,7 @@ static inline unsigned long hugetlb_total_pages(void) | |||
| 99 | do { } while (0) | 101 | do { } while (0) |
| 100 | #define alloc_huge_page() ({ NULL; }) | 102 | #define alloc_huge_page() ({ NULL; }) |
| 101 | #define free_huge_page(p) ({ (void)(p); BUG(); }) | 103 | #define free_huge_page(p) ({ (void)(p); BUG(); }) |
| 104 | #define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; }) | ||
| 102 | 105 | ||
| 103 | #ifndef HPAGE_MASK | 106 | #ifndef HPAGE_MASK |
| 104 | #define HPAGE_MASK 0 /* Keep the compiler happy */ | 107 | #define HPAGE_MASK 0 /* Keep the compiler happy */ |
| @@ -155,24 +158,11 @@ static inline void set_file_hugepages(struct file *file) | |||
| 155 | { | 158 | { |
| 156 | file->f_op = &hugetlbfs_file_operations; | 159 | file->f_op = &hugetlbfs_file_operations; |
| 157 | } | 160 | } |
| 158 | |||
| 159 | static inline int valid_hugetlb_file_off(struct vm_area_struct *vma, | ||
| 160 | unsigned long address) | ||
| 161 | { | ||
| 162 | struct inode *inode = vma->vm_file->f_dentry->d_inode; | ||
| 163 | loff_t file_off = address - vma->vm_start; | ||
| 164 | |||
| 165 | file_off += (vma->vm_pgoff << PAGE_SHIFT); | ||
| 166 | |||
| 167 | return (file_off < inode->i_size); | ||
| 168 | } | ||
| 169 | |||
| 170 | #else /* !CONFIG_HUGETLBFS */ | 161 | #else /* !CONFIG_HUGETLBFS */ |
| 171 | 162 | ||
| 172 | #define is_file_hugepages(file) 0 | 163 | #define is_file_hugepages(file) 0 |
| 173 | #define set_file_hugepages(file) BUG() | 164 | #define set_file_hugepages(file) BUG() |
| 174 | #define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS) | 165 | #define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS) |
| 175 | #define valid_hugetlb_file_off(vma, address) 0 | ||
| 176 | 166 | ||
| 177 | #endif /* !CONFIG_HUGETLBFS */ | 167 | #endif /* !CONFIG_HUGETLBFS */ |
| 178 | 168 | ||
diff --git a/kernel/exit.c b/kernel/exit.c index 43077732619b..3b25b182d2be 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -843,6 +843,7 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 843 | group_dead = atomic_dec_and_test(&tsk->signal->live); | 843 | group_dead = atomic_dec_and_test(&tsk->signal->live); |
| 844 | if (group_dead) { | 844 | if (group_dead) { |
| 845 | del_timer_sync(&tsk->signal->real_timer); | 845 | del_timer_sync(&tsk->signal->real_timer); |
| 846 | exit_itimers(tsk->signal); | ||
| 846 | acct_process(code); | 847 | acct_process(code); |
| 847 | } | 848 | } |
| 848 | exit_mm(tsk); | 849 | exit_mm(tsk); |
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index b3f3edc475de..7a51a5597c33 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
| @@ -387,19 +387,25 @@ int posix_cpu_timer_del(struct k_itimer *timer) | |||
| 387 | if (unlikely(p == NULL)) | 387 | if (unlikely(p == NULL)) |
| 388 | return 0; | 388 | return 0; |
| 389 | 389 | ||
| 390 | spin_lock(&p->sighand->siglock); | ||
| 391 | if (!list_empty(&timer->it.cpu.entry)) { | 390 | if (!list_empty(&timer->it.cpu.entry)) { |
| 392 | /* | 391 | read_lock(&tasklist_lock); |
| 393 | * Take us off the task's timer list. We don't need to | 392 | if (unlikely(p->signal == NULL)) { |
| 394 | * take tasklist_lock and check for the task being reaped. | 393 | /* |
| 395 | * If it was reaped, it already called posix_cpu_timers_exit | 394 | * We raced with the reaping of the task. |
| 396 | * and posix_cpu_timers_exit_group to clear all the timers | 395 | * The deletion should have cleared us off the list. |
| 397 | * that pointed to it. | 396 | */ |
| 398 | */ | 397 | BUG_ON(!list_empty(&timer->it.cpu.entry)); |
| 399 | list_del(&timer->it.cpu.entry); | 398 | } else { |
| 400 | put_task_struct(p); | 399 | /* |
| 400 | * Take us off the task's timer list. | ||
| 401 | */ | ||
| 402 | spin_lock(&p->sighand->siglock); | ||
| 403 | list_del(&timer->it.cpu.entry); | ||
| 404 | spin_unlock(&p->sighand->siglock); | ||
| 405 | } | ||
| 406 | read_unlock(&tasklist_lock); | ||
| 401 | } | 407 | } |
| 402 | spin_unlock(&p->sighand->siglock); | 408 | put_task_struct(p); |
| 403 | 409 | ||
| 404 | return 0; | 410 | return 0; |
| 405 | } | 411 | } |
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index b7b532acd9fc..dda3cda73c77 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c | |||
| @@ -1157,7 +1157,7 @@ retry_delete: | |||
| 1157 | } | 1157 | } |
| 1158 | 1158 | ||
| 1159 | /* | 1159 | /* |
| 1160 | * This is called by __exit_signal, only when there are no more | 1160 | * This is called by do_exit or de_thread, only when there are no more |
| 1161 | * references to the shared signal_struct. | 1161 | * references to the shared signal_struct. |
| 1162 | */ | 1162 | */ |
| 1163 | void exit_itimers(struct signal_struct *sig) | 1163 | void exit_itimers(struct signal_struct *sig) |
diff --git a/kernel/signal.c b/kernel/signal.c index 50c992643771..f2b96b08fb44 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -397,20 +397,8 @@ void __exit_signal(struct task_struct *tsk) | |||
| 397 | flush_sigqueue(&tsk->pending); | 397 | flush_sigqueue(&tsk->pending); |
| 398 | if (sig) { | 398 | if (sig) { |
| 399 | /* | 399 | /* |
| 400 | * We are cleaning up the signal_struct here. We delayed | 400 | * We are cleaning up the signal_struct here. |
| 401 | * calling exit_itimers until after flush_sigqueue, just in | ||
| 402 | * case our thread-local pending queue contained a queued | ||
| 403 | * timer signal that would have been cleared in | ||
| 404 | * exit_itimers. When that called sigqueue_free, it would | ||
| 405 | * attempt to re-take the tasklist_lock and deadlock. This | ||
| 406 | * can never happen if we ensure that all queues the | ||
| 407 | * timer's signal might be queued on have been flushed | ||
| 408 | * first. The shared_pending queue, and our own pending | ||
| 409 | * queue are the only queues the timer could be on, since | ||
| 410 | * there are no other threads left in the group and timer | ||
| 411 | * signals are constrained to threads inside the group. | ||
| 412 | */ | 401 | */ |
| 413 | exit_itimers(sig); | ||
| 414 | exit_thread_group_keys(sig); | 402 | exit_thread_group_keys(sig); |
| 415 | kmem_cache_free(signal_cachep, sig); | 403 | kmem_cache_free(signal_cachep, sig); |
| 416 | } | 404 | } |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index a1b30d45459e..61d380678030 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
| @@ -394,6 +394,28 @@ out: | |||
| 394 | return ret; | 394 | return ret; |
| 395 | } | 395 | } |
| 396 | 396 | ||
| 397 | /* | ||
| 398 | * On ia64 at least, it is possible to receive a hugetlb fault from a | ||
| 399 | * stale zero entry left in the TLB from earlier hardware prefetching. | ||
| 400 | * Low-level arch code should already have flushed the stale entry as | ||
| 401 | * part of its fault handling, but we do need to accept this minor fault | ||
| 402 | * and return successfully. Whereas the "normal" case is that this is | ||
| 403 | * an access to a hugetlb page which has been truncated off since mmap. | ||
| 404 | */ | ||
| 405 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | ||
| 406 | unsigned long address, int write_access) | ||
| 407 | { | ||
| 408 | int ret = VM_FAULT_SIGBUS; | ||
| 409 | pte_t *pte; | ||
| 410 | |||
| 411 | spin_lock(&mm->page_table_lock); | ||
| 412 | pte = huge_pte_offset(mm, address); | ||
| 413 | if (pte && !pte_none(*pte)) | ||
| 414 | ret = VM_FAULT_MINOR; | ||
| 415 | spin_unlock(&mm->page_table_lock); | ||
| 416 | return ret; | ||
| 417 | } | ||
| 418 | |||
| 397 | int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, | 419 | int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, |
| 398 | struct page **pages, struct vm_area_struct **vmas, | 420 | struct page **pages, struct vm_area_struct **vmas, |
| 399 | unsigned long *position, int *length, int i) | 421 | unsigned long *position, int *length, int i) |
diff --git a/mm/memory.c b/mm/memory.c index 8c88b973abc5..1db40e935e55 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
| @@ -2045,18 +2045,8 @@ int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct * vma, | |||
| 2045 | 2045 | ||
| 2046 | inc_page_state(pgfault); | 2046 | inc_page_state(pgfault); |
| 2047 | 2047 | ||
| 2048 | if (unlikely(is_vm_hugetlb_page(vma))) { | 2048 | if (unlikely(is_vm_hugetlb_page(vma))) |
| 2049 | if (valid_hugetlb_file_off(vma, address)) | 2049 | return hugetlb_fault(mm, vma, address, write_access); |
| 2050 | /* We get here only if there was a stale(zero) TLB entry | ||
| 2051 | * (because of HW prefetching). | ||
| 2052 | * Low-level arch code (if needed) should have already | ||
| 2053 | * purged the stale entry as part of this fault handling. | ||
| 2054 | * Here we just return. | ||
| 2055 | */ | ||
| 2056 | return VM_FAULT_MINOR; | ||
| 2057 | else | ||
| 2058 | return VM_FAULT_SIGBUS; /* mapping truncation does this. */ | ||
| 2059 | } | ||
| 2060 | 2050 | ||
| 2061 | /* | 2051 | /* |
| 2062 | * We need the page table lock to synchronize with kswapd | 2052 | * We need the page table lock to synchronize with kswapd |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index ae088d1347af..6298cf58ff9e 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
| @@ -463,6 +463,7 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req, | |||
| 463 | if (skb != NULL) { | 463 | if (skb != NULL) { |
| 464 | const struct inet_request_sock *ireq = inet_rsk(req); | 464 | const struct inet_request_sock *ireq = inet_rsk(req); |
| 465 | 465 | ||
| 466 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
| 466 | err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, | 467 | err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, |
| 467 | ireq->rmt_addr, | 468 | ireq->rmt_addr, |
| 468 | ireq->opt); | 469 | ireq->opt); |
| @@ -647,6 +648,7 @@ int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code) | |||
| 647 | if (skb != NULL) { | 648 | if (skb != NULL) { |
| 648 | const struct inet_sock *inet = inet_sk(sk); | 649 | const struct inet_sock *inet = inet_sk(sk); |
| 649 | 650 | ||
| 651 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
| 650 | err = ip_build_and_send_pkt(skb, sk, | 652 | err = ip_build_and_send_pkt(skb, sk, |
| 651 | inet->saddr, inet->daddr, NULL); | 653 | inet->saddr, inet->daddr, NULL); |
| 652 | if (err == NET_XMIT_CN) | 654 | if (err == NET_XMIT_CN) |
diff --git a/net/dccp/output.c b/net/dccp/output.c index 4786bdcddcc9..29250749f16f 100644 --- a/net/dccp/output.c +++ b/net/dccp/output.c | |||
| @@ -62,10 +62,8 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) | |||
| 62 | 62 | ||
| 63 | skb->h.raw = skb_push(skb, dccp_header_size); | 63 | skb->h.raw = skb_push(skb, dccp_header_size); |
| 64 | dh = dccp_hdr(skb); | 64 | dh = dccp_hdr(skb); |
| 65 | /* | 65 | |
| 66 | * Data packets are not cloned as they are never retransmitted | 66 | if (!skb->sk) |
| 67 | */ | ||
| 68 | if (skb_cloned(skb)) | ||
| 69 | skb_set_owner_w(skb, sk); | 67 | skb_set_owner_w(skb, sk); |
| 70 | 68 | ||
| 71 | /* Build DCCP header and checksum it. */ | 69 | /* Build DCCP header and checksum it. */ |
| @@ -102,6 +100,7 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) | |||
| 102 | 100 | ||
| 103 | DCCP_INC_STATS(DCCP_MIB_OUTSEGS); | 101 | DCCP_INC_STATS(DCCP_MIB_OUTSEGS); |
| 104 | 102 | ||
| 103 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
| 105 | err = ip_queue_xmit(skb, 0); | 104 | err = ip_queue_xmit(skb, 0); |
| 106 | if (err <= 0) | 105 | if (err <= 0) |
| 107 | return err; | 106 | return err; |
| @@ -243,7 +242,8 @@ int dccp_write_xmit(struct sock *sk, struct sk_buff *skb, long *timeo) | |||
| 243 | 242 | ||
| 244 | err = dccp_transmit_skb(sk, skb); | 243 | err = dccp_transmit_skb(sk, skb); |
| 245 | ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len); | 244 | ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len); |
| 246 | } | 245 | } else |
| 246 | kfree_skb(skb); | ||
| 247 | 247 | ||
| 248 | return err; | 248 | return err; |
| 249 | } | 249 | } |
diff --git a/net/dccp/proto.c b/net/dccp/proto.c index a1cfd0e9e3bc..a021c3422f67 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c | |||
| @@ -402,8 +402,6 @@ int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
| 402 | * This bug was _quickly_ found & fixed by just looking at an OSTRA | 402 | * This bug was _quickly_ found & fixed by just looking at an OSTRA |
| 403 | * generated callgraph 8) -acme | 403 | * generated callgraph 8) -acme |
| 404 | */ | 404 | */ |
| 405 | if (rc != 0) | ||
| 406 | goto out_discard; | ||
| 407 | out_release: | 405 | out_release: |
| 408 | release_sock(sk); | 406 | release_sock(sk); |
| 409 | return rc ? : len; | 407 | return rc ? : len; |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 7114031fdc70..b907456a79f4 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -435,17 +435,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss | |||
| 435 | int nsize, old_factor; | 435 | int nsize, old_factor; |
| 436 | u16 flags; | 436 | u16 flags; |
| 437 | 437 | ||
| 438 | if (unlikely(len >= skb->len)) { | 438 | BUG_ON(len > skb->len); |
| 439 | if (net_ratelimit()) { | ||
| 440 | printk(KERN_DEBUG "TCP: seg_size=%u, mss=%u, seq=%u, " | ||
| 441 | "end_seq=%u, skb->len=%u.\n", len, mss_now, | ||
| 442 | TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq, | ||
| 443 | skb->len); | ||
| 444 | WARN_ON(1); | ||
| 445 | } | ||
| 446 | return 0; | ||
| 447 | } | ||
| 448 | |||
| 449 | nsize = skb_headlen(skb) - len; | 439 | nsize = skb_headlen(skb) - len; |
| 450 | if (nsize < 0) | 440 | if (nsize < 0) |
| 451 | nsize = 0; | 441 | nsize = 0; |
