On Tue, 19 Feb 2013, David Miller wrote: > diff --git a/arch/sparc/mm/tsb.c b/arch/sparc/mm/tsb.c > index 7f64743..338b406 100644 > --- a/arch/sparc/mm/tsb.c > +++ b/arch/sparc/mm/tsb.c > @@ -288,14 +288,13 @@ static unsigned long tsb_size_to_rss_limit(unsigned long new_size) > * the number of entries that the current TSB can hold at once. Currently, > * we trigger when the RSS hits 3/4 of the TSB capacity. > */ > -void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long rss) > +void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long rss, gfp_t gfp) > { > unsigned long max_tsb_size = 1 * 1024 * 1024; > unsigned long new_size, old_size, flags; > struct tsb *old_tsb, *new_tsb; > unsigned long new_cache_index, old_cache_index; > unsigned long new_rss_limit; > - gfp_t gfp_flags; > > if (max_tsb_size > (PAGE_SIZE << MAX_ORDER)) > max_tsb_size = (PAGE_SIZE << MAX_ORDER); > @@ -312,12 +311,11 @@ void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long rss) > new_rss_limit = ~0UL; > > retry_tsb_alloc: > - gfp_flags = GFP_KERNEL; > if (new_size > (PAGE_SIZE * 2)) > - gfp_flags = __GFP_NOWARN | __GFP_NORETRY; > + gfp = __GFP_NOWARN | __GFP_NORETRY; The existing code here already looks buggy for a different reason, it should be gfp |= __GFP_NOWARN | __GFP_NORETRY; I was wondering if you could get away with just a simple one-liner fix above by doing gfp_flags = rss ? GFP_KERNEL : GFP_NOWAIT; but I agree this is more robust. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html