mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 06:10:56 +00:00
[PATCH] AGPGART: Fix serverworks TLB flush.
[AGPGART] Fix serverworks TLB flush. Go back to what 2.4 kernels used to do here, as if this hits, the kernel just hangs indefinitly. Actually an improvement over 2.4 - we now break; out of the loop instead of just printing messages on timeouts. Signed-off-by: Dave Jones <davej@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
28e52c66f8
commit
73db2c2525
1 changed files with 16 additions and 2 deletions
|
@ -242,13 +242,27 @@ static int serverworks_fetch_size(void)
|
|||
*/
|
||||
static void serverworks_tlbflush(struct agp_memory *temp)
|
||||
{
|
||||
unsigned long timeout;
|
||||
|
||||
writeb(1, serverworks_private.registers+SVWRKS_POSTFLUSH);
|
||||
while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1)
|
||||
timeout = jiffies + 3*HZ;
|
||||
while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1) {
|
||||
cpu_relax();
|
||||
if (time_after(jiffies, timeout)) {
|
||||
printk(KERN_ERR PFX "TLB post flush took more than 3 seconds\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
writel(1, serverworks_private.registers+SVWRKS_DIRFLUSH);
|
||||
while(readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1)
|
||||
timeout = jiffies + 3*HZ;
|
||||
while (readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1) {
|
||||
cpu_relax();
|
||||
if (time_after(jiffies, timeout)) {
|
||||
printk(KERN_ERR PFX "TLB Dir flush took more than 3 seconds\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int serverworks_configure(void)
|
||||
|
|
Loading…
Reference in a new issue