1
0
Fork 0

gru: support contexts with zero dsrs or cbrs

Support alocation of GRU contexts that contain zero DSR or CBR resources.
Some instructions do not require DSR resources.  Contexts without CBR
resources are useful for diagnostics.

Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
hifive-unleashed-5.1
Jack Steiner 2009-06-17 16:28:23 -07:00 committed by Linus Torvalds
parent 836ce679c0
commit 3eac2e95d7
2 changed files with 4 additions and 6 deletions

View File

@ -135,11 +135,9 @@ static int gru_create_new_context(unsigned long arg)
if (copy_from_user(&req, (void __user *)arg, sizeof(req)))
return -EFAULT;
if (req.data_segment_bytes == 0 ||
req.data_segment_bytes > max_user_dsr_bytes)
if (req.data_segment_bytes > max_user_dsr_bytes)
return -EINVAL;
if (!req.control_blocks || !req.maximum_thread_count ||
req.control_blocks > max_user_cbrs)
if (req.control_blocks > max_user_cbrs || !req.maximum_thread_count)
return -EINVAL;
if (!(req.options & GRU_OPT_MISS_MASK))

View File

@ -150,7 +150,7 @@ static unsigned long reserve_resources(unsigned long *p, int n, int mmax,
unsigned long bits = 0;
int i;
do {
while (n--) {
i = find_first_bit(p, mmax);
if (i == mmax)
BUG();
@ -158,7 +158,7 @@ static unsigned long reserve_resources(unsigned long *p, int n, int mmax,
__set_bit(i, &bits);
if (idx)
*idx++ = i;
} while (--n);
}
return bits;
}