Re: 2.6.26-rc5-mm2 lockup up on Intel G33+ICH9R+Core2Duo, -mm1 okay

Andrew Morton
2008-06-10T18:19:27Z

On Tue, 10 Jun 2008 20:20:09 +1000 Grant Coady <grant_lkml@dodo.com.au> wrote:

> On Mon, 9 Jun 2008 22:31:45 -0700, Andrew Morton <akpm@linux-foundation.org> wrote:
>
> >
> >ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.26-rc5/2.6.26-rc5-mm2/
> >
> >- This is a bugfixed version of 2.6.26-rc5-mm1 - mainly to repair a
> > vmscan.c bug which would have prevented testing of the other vmscan.c
> > bugs^Wchanges.
>
> No it's not :)
>
> -mm1 worked fine here but -mm2 locks up just after saying:
> agpgart: Detected 7164K stolen memory.
>
> Nothing in logs (session not recorded - hit reset to restart).
>
> config and dmseg for -mm1 at (same .config for mm2):
>
> http://bugsplatter.mine.nu/test/boxen/pooh/config-2.6.26-rc5-mm1a.gz
> http://bugsplatter.mine.nu/test/boxen/pooh/dmesg-2.6.26-rc5-mm1a.gz
>
> Grant.

hm, intel-agp gtt stuff.

Can you please see whether reverting Keith's stuff fixes it?

drivers/char/agp/agp.h | 3 ---
drivers/char/agp/backend.c | 2 --
drivers/char/agp/generic.c | 28 ----------------------------
drivers/char/agp/intel-agp.c | 5 -----
include/linux/agp_backend.h | 5 -----
5 files changed, 43 deletions(-)

diff -puN drivers/char/agp/agp.h~revert-intel-agp-rewrite-gtt-on-resume drivers/char/agp/agp.h
--- a/drivers/char/agp/agp.h~revert-intel-agp-rewrite-gtt-on-resume
+++ a/drivers/char/agp/agp.h
@@ -148,9 +148,6 @@ struct agp_bridge_data {
char minor_version;
struct list_head list;
u32 apbase_config;
- /* list of agp_memory mapped to the aperture */
- struct list_head mapped_list;
- spinlock_t mapped_lock;
};

#define KB(x) ((x) * 1024)
diff -puN drivers/char/agp/backend.c~revert-intel-agp-rewrite-gtt-on-resume drivers/char/agp/backend.c
--- a/drivers/char/agp/backend.c~revert-intel-agp-rewrite-gtt-on-resume
+++ a/drivers/char/agp/backend.c
@@ -183,8 +183,6 @@ static int agp_backend_initialize(struct
rc = -EINVAL;
goto err_out;
}
- INIT_LIST_HEAD(&bridge->mapped_list);
- spin_lock_init(&bridge->mapped_lock);

return 0;

diff -puN drivers/char/agp/generic.c~revert-intel-agp-rewrite-gtt-on-resume drivers/char/agp/generic.c
--- a/drivers/char/agp/generic.c~revert-intel-agp-rewrite-gtt-on-resume
+++ a/drivers/char/agp/generic.c
@@ -426,10 +426,6 @@ int agp_bind_memory(struct agp_memory *c

curr->is_bound = TRUE;
curr->pg_start = pg_start;
- spin_lock(&agp_bridge->mapped_lock);
- list_add(&curr->mapped_list, &agp_bridge->mapped_list);
- spin_unlock(&agp_bridge->mapped_lock);
-
return 0;
}
EXPORT_SYMBOL(agp_bind_memory);
@@ -462,34 +458,10 @@ int agp_unbind_memory(struct agp_memory

curr->is_bound = FALSE;
curr->pg_start = 0;
- spin_lock(&curr->bridge->mapped_lock);
- list_del(&curr->mapped_list);
- spin_unlock(&curr->bridge->mapped_lock);
return 0;
}
EXPORT_SYMBOL(agp_unbind_memory);

-/**
- * agp_rebind_emmory - Rewrite the entire GATT, useful on resume
- */
-int agp_rebind_memory(void)
-{
- struct agp_memory *curr;
- int ret_val = 0;
-
- spin_lock(&agp_bridge->mapped_lock);
- list_for_each_entry(curr, &agp_bridge->mapped_list, mapped_list) {
- ret_val = curr->bridge->driver->insert_memory(curr,
- curr->pg_start,
- curr->type);
- if (ret_val != 0)
- break;
- }
- spin_unlock(&agp_bridge->mapped_lock);
- return ret_val;
-}
-EXPORT_SYMBOL(agp_rebind_memory);
-
/* End - Routines for handling swapping of agp_memory into the GATT */

diff -puN drivers/char/agp/intel-agp.c~revert-intel-agp-rewrite-gtt-on-resume drivers/char/agp/intel-agp.c
--- a/drivers/char/agp/intel-agp.c~revert-intel-agp-rewrite-gtt-on-resume
+++ a/drivers/char/agp/intel-agp.c
@@ -2176,7 +2176,6 @@ static void __devexit agp_intel_remove(s
static int agp_intel_resume(struct pci_dev *pdev)
{
struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
- int ret_val;

pci_restore_state(pdev);

@@ -2204,10 +2203,6 @@ static int agp_intel_resume(struct pci_d
else if (bridge->driver == &intel_i965_driver)
intel_i915_configure();

- ret_val = agp_rebind_memory();
- if (ret_val != 0)
- return ret_val;
-
return 0;
}
#endif
diff -puN include/linux/agp_backend.h~revert-intel-agp-rewrite-gtt-on-resume include/linux/agp_backend.h
--- a/include/linux/agp_backend.h~revert-intel-agp-rewrite-gtt-on-resume
+++ a/include/linux/agp_backend.h
@@ -30,8 +30,6 @@
#ifndef _AGP_BACKEND_H
#define _AGP_BACKEND_H 1

-#include <linux/list.h>
-
#ifndef TRUE
#define TRUE 1
#endif
@@ -88,8 +86,6 @@ struct agp_memory {
u8 is_bound;
u8 is_flushed;
u8 vmalloc_flag;
- /* list of agp_memory mapped to the aperture */
- struct list_head mapped_list;
};

#define AGP_NORMAL_MEMORY 0
@@ -108,7 +104,6 @@ extern struct agp_memory *agp_allocate_m
extern int agp_copy_info(struct agp_bridge_data *, struct agp_kern_info *);
extern int agp_bind_memory(struct agp_memory *, off_t);
extern int agp_unbind_memory(struct agp_memory *);
-extern int agp_rebind_memory(void);
extern void agp_enable(struct agp_bridge_data *, u32);
extern struct agp_bridge_data *agp_backend_acquire(struct pci_dev *);
extern void agp_backend_release(struct agp_bridge_data *);
_