drm/amdkfd: Allocate gtt_sa_bitmap in long units
gtt_sa_bitmap is accessed by bitmap functions, which operate on longs. Therefore the array should be allocated in long units. Also round up in case the number of bits is not a multiple of BITS_PER_LONG. Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
This commit is contained in:
parent
735df2ba1d
commit
8625ff9c0b
|
@ -395,7 +395,7 @@ void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry)
|
||||||
static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size,
|
static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size,
|
||||||
unsigned int chunk_size)
|
unsigned int chunk_size)
|
||||||
{
|
{
|
||||||
unsigned int num_of_bits;
|
unsigned int num_of_longs;
|
||||||
|
|
||||||
BUG_ON(buf_size < chunk_size);
|
BUG_ON(buf_size < chunk_size);
|
||||||
BUG_ON(buf_size == 0);
|
BUG_ON(buf_size == 0);
|
||||||
|
@ -404,10 +404,10 @@ static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size,
|
||||||
kfd->gtt_sa_chunk_size = chunk_size;
|
kfd->gtt_sa_chunk_size = chunk_size;
|
||||||
kfd->gtt_sa_num_of_chunks = buf_size / chunk_size;
|
kfd->gtt_sa_num_of_chunks = buf_size / chunk_size;
|
||||||
|
|
||||||
num_of_bits = kfd->gtt_sa_num_of_chunks / BITS_PER_BYTE;
|
num_of_longs = (kfd->gtt_sa_num_of_chunks + BITS_PER_LONG - 1) /
|
||||||
BUG_ON(num_of_bits == 0);
|
BITS_PER_LONG;
|
||||||
|
|
||||||
kfd->gtt_sa_bitmap = kzalloc(num_of_bits, GFP_KERNEL);
|
kfd->gtt_sa_bitmap = kcalloc(num_of_longs, sizeof(long), GFP_KERNEL);
|
||||||
|
|
||||||
if (!kfd->gtt_sa_bitmap)
|
if (!kfd->gtt_sa_bitmap)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
Loading…
Reference in New Issue