Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 86807
b: refs/heads/master
c: 23d7e03
h: refs/heads/master
i:
  86805: e77ef38
  86803: 995bb2b
  86799: 7f4a75d
v: v3
  • Loading branch information
FUJITA Tomonori authored and Linus Torvalds committed Mar 5, 2008
1 parent 03ba4d5 commit 1f9fdab
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3c5f1def7dd50b792f56dcf7378c2684c06947f3
refs/heads/master: 23d7e0390ab57cf15a5cfe8d6806192f0997e5a8
28 changes: 15 additions & 13 deletions trunk/arch/alpha/kernel/pci_iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,15 @@ iommu_arena_find_pages(struct pci_iommu_arena *arena, long n, long mask)
{
unsigned long *ptes;
long i, p, nent;
int pass = 0;

/* Search forward for the first mask-aligned sequence of N free ptes */
ptes = arena->ptes;
nent = arena->size >> PAGE_SHIFT;
p = ALIGN(arena->next_entry, mask + 1);
i = 0;

again:
while (i < n && p+i < nent) {
if (ptes[p+i])
p = ALIGN(p + i + 1, mask + 1), i = 0;
Expand All @@ -146,19 +149,18 @@ iommu_arena_find_pages(struct pci_iommu_arena *arena, long n, long mask)
}

if (i < n) {
/* Reached the end. Flush the TLB and restart the
search from the beginning. */
alpha_mv.mv_pci_tbi(arena->hose, 0, -1);

p = 0, i = 0;
while (i < n && p+i < nent) {
if (ptes[p+i])
p = ALIGN(p + i + 1, mask + 1), i = 0;
else
i = i + 1;
}

if (i < n)
if (pass < 1) {
/*
* Reached the end. Flush the TLB and restart
* the search from the beginning.
*/
alpha_mv.mv_pci_tbi(arena->hose, 0, -1);

pass++;
p = 0;
i = 0;
goto again;
} else
return -1;
}

Expand Down

0 comments on commit 1f9fdab

Please sign in to comment.