All of lore.kernel.org
 help / color / mirror / Atom feed
* re: drm/amdgpu: implement cgs gpu memory callbacks
@ 2015-08-21 16:23 Dan Carpenter
  2015-08-24  7:09 ` Zhou, David(ChunMing)
  0 siblings, 1 reply; 6+ messages in thread
From: Dan Carpenter @ 2015-08-21 16:23 UTC (permalink / raw)
  To: david1.zhou; +Cc: dri-devel

Hello Chunming Zhou,

The patch 57ff96cf471a: "drm/amdgpu: implement cgs gpu memory
callbacks" from Apr 24, 2015, leads to the following static checker
warning:

	drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c:274 amdgpu_cgs_gmap_gpu_mem()
	warn: should 'obj->placements[0]->fpfn << 12' be a 64 bit type?

	drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c:275 amdgpu_cgs_gmap_gpu_mem()
	warn: should 'obj->placements[0]->lpfn << 12' be a 64 bit type?


drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
   265  static int amdgpu_cgs_gmap_gpu_mem(void *cgs_device, cgs_handle_t handle,
   266                                     uint64_t *mcaddr)
   267  {
   268          int r;
   269          u64 min_offset, max_offset;
   270          struct amdgpu_bo *obj = (struct amdgpu_bo *)handle;
   271  
   272          WARN_ON_ONCE(obj->placement.num_placement > 1);
   273  
   274          min_offset = obj->placements[0].fpfn << PAGE_SHIFT;
   275          max_offset = obj->placements[0].lpfn << PAGE_SHIFT;

Both of these.

   276  
   277          r = amdgpu_bo_reserve(obj, false);
   278          if (unlikely(r != 0))
   279                  return r;
   280          r = amdgpu_bo_pin_restricted(obj, AMDGPU_GEM_DOMAIN_GTT,
   281                                       min_offset, max_offset, mcaddr);
   282          amdgpu_bo_unreserve(obj);
   283          return r;
   284  }

There are actually a few of these warnings which were less clear
whether the warning was correct or not so I didn't send them.

drivers/gpu/drm/amd/amdgpu/cz_smc.c:463 cz_smu_populate_single_firmware_entry() warn: should '((header->jt_offset)) << 2' be a 64 bit type?
drivers/gpu/drm/amd/amdgpu/fiji_smc.c:404 fiji_smu_populate_single_firmware_entry() warn: should '((header->jt_offset)) << 2' be a 64 bit type?
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c:724 amdgpu_cgs_get_firmware_info() warn: should '((header->jt_offset)) << 2' be a 64 bit type?
drivers/gpu/drm/amd/amdgpu/tonga_smc.c:406 tonga_smu_populate_single_firmware_entry() warn: should '((header->jt_offset)) << 2' be a 64 bit type?
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:615 amdgpu_gem_op_ioctl() warn: should 'robj->tbo.mem.page_alignment << 12' be a 64 bit type?

regards,
dan carpenter
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: drm/amdgpu: implement cgs gpu memory callbacks
  2015-08-21 16:23 drm/amdgpu: implement cgs gpu memory callbacks Dan Carpenter
@ 2015-08-24  7:09 ` Zhou, David(ChunMing)
  2015-08-24 19:51   ` Dan Carpenter
  0 siblings, 1 reply; 6+ messages in thread
From: Zhou, David(ChunMing) @ 2015-08-24  7:09 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: dri-devel@lists.freedesktop.org

Hi Dan,
Thanks for figuring out that. 
>    274          min_offset = obj->placements[0].fpfn << PAGE_SHIFT;
>    275          max_offset = obj->placements[0].lpfn << PAGE_SHIFT;
Maybe should be:
	min_offset = obj->placements[0].fpfn;
	min_offset <<= PAGE_SHIFT;
	max_offset = obj->placements[0].lpfn;
	max_offset <<= PAGE_SHIFT;

Regards,
  David Zhou

> -----Original Message-----
> From: Dan Carpenter [mailto:dan.carpenter@oracle.com]
> Sent: Saturday, August 22, 2015 12:24 AM
> To: Zhou, David(ChunMing)
> Cc: dri-devel@lists.freedesktop.org
> Subject: re: drm/amdgpu: implement cgs gpu memory callbacks
> 
> Hello Chunming Zhou,
> 
> The patch 57ff96cf471a: "drm/amdgpu: implement cgs gpu memory callbacks"
> from Apr 24, 2015, leads to the following static checker
> warning:
> 
> 	drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c:274
> amdgpu_cgs_gmap_gpu_mem()
> 	warn: should 'obj->placements[0]->fpfn << 12' be a 64 bit type?
> 
> 	drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c:275
> amdgpu_cgs_gmap_gpu_mem()
> 	warn: should 'obj->placements[0]->lpfn << 12' be a 64 bit type?
> 
> 
> drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
>    265  static int amdgpu_cgs_gmap_gpu_mem(void *cgs_device, cgs_handle_t
> handle,
>    266                                     uint64_t *mcaddr)
>    267  {
>    268          int r;
>    269          u64 min_offset, max_offset;
>    270          struct amdgpu_bo *obj = (struct amdgpu_bo *)handle;
>    271
>    272          WARN_ON_ONCE(obj->placement.num_placement > 1);
>    273
>    274          min_offset = obj->placements[0].fpfn << PAGE_SHIFT;
>    275          max_offset = obj->placements[0].lpfn << PAGE_SHIFT;
> 
> Both of these.
> 
>    276
>    277          r = amdgpu_bo_reserve(obj, false);
>    278          if (unlikely(r != 0))
>    279                  return r;
>    280          r = amdgpu_bo_pin_restricted(obj, AMDGPU_GEM_DOMAIN_GTT,
>    281                                       min_offset, max_offset, mcaddr);
>    282          amdgpu_bo_unreserve(obj);
>    283          return r;
>    284  }
> 
> There are actually a few of these warnings which were less clear whether the
> warning was correct or not so I didn't send them.
> 
> drivers/gpu/drm/amd/amdgpu/cz_smc.c:463
> cz_smu_populate_single_firmware_entry() warn: should '((header->jt_offset))
> << 2' be a 64 bit type?
> drivers/gpu/drm/amd/amdgpu/fiji_smc.c:404
> fiji_smu_populate_single_firmware_entry() warn: should '((header->jt_offset))
> << 2' be a 64 bit type?
> drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c:724
> amdgpu_cgs_get_firmware_info() warn: should '((header->jt_offset)) << 2' be a
> 64 bit type?
> drivers/gpu/drm/amd/amdgpu/tonga_smc.c:406
> tonga_smu_populate_single_firmware_entry() warn: should '((header-
> >jt_offset)) << 2' be a 64 bit type?
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:615 amdgpu_gem_op_ioctl()
> warn: should 'robj->tbo.mem.page_alignment << 12' be a 64 bit type?
> 
> regards,
> dan carpenter
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: drm/amdgpu: implement cgs gpu memory callbacks
  2015-08-24  7:09 ` Zhou, David(ChunMing)
@ 2015-08-24 19:51   ` Dan Carpenter
  2015-08-25  2:07     ` Zhou, David(ChunMing)
  0 siblings, 1 reply; 6+ messages in thread
From: Dan Carpenter @ 2015-08-24 19:51 UTC (permalink / raw)
  To: Zhou, David(ChunMing); +Cc: dri-devel@lists.freedesktop.org

On Mon, Aug 24, 2015 at 07:09:15AM +0000, Zhou, David(ChunMing) wrote:
> Hi Dan,
> Thanks for figuring out that. 
> >    274          min_offset = obj->placements[0].fpfn << PAGE_SHIFT;
> >    275          max_offset = obj->placements[0].lpfn << PAGE_SHIFT;
> Maybe should be:
> 	min_offset = obj->placements[0].fpfn;
> 	min_offset <<= PAGE_SHIFT;
> 	max_offset = obj->placements[0].lpfn;
> 	max_offset <<= PAGE_SHIFT;


It's probably just simpler to be:

	min_offset = (u64)obj->placements[0].fpfn << PAGE_SHIFT;
	max_offset = (u64)obj->placements[0].lpfn << PAGE_SHIFT;

But the larger questions aer why is min_offset a u64, and can the shift
actually wrap?  I'm just looking at static checker warnings, and I'm
not very familiar with this code so I don't know the answers.

regards,
dan carpenter

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: drm/amdgpu: implement cgs gpu memory callbacks
  2015-08-24 19:51   ` Dan Carpenter
@ 2015-08-25  2:07     ` Zhou, David(ChunMing)
  2015-08-25  5:50       ` Dan Carpenter
  0 siblings, 1 reply; 6+ messages in thread
From: Zhou, David(ChunMing) @ 2015-08-25  2:07 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: dri-devel@lists.freedesktop.org

Inline...[DZ]

> -----Original Message-----
> From: Dan Carpenter [mailto:dan.carpenter@oracle.com]
> Sent: Tuesday, August 25, 2015 3:51 AM
> To: Zhou, David(ChunMing)
> Cc: dri-devel@lists.freedesktop.org
> Subject: Re: drm/amdgpu: implement cgs gpu memory callbacks
> 
> On Mon, Aug 24, 2015 at 07:09:15AM +0000, Zhou, David(ChunMing) wrote:
> > Hi Dan,
> > Thanks for figuring out that.
> > >    274          min_offset = obj->placements[0].fpfn << PAGE_SHIFT;
> > >    275          max_offset = obj->placements[0].lpfn << PAGE_SHIFT;
> > Maybe should be:
> > 	min_offset = obj->placements[0].fpfn;
> > 	min_offset <<= PAGE_SHIFT;
> > 	max_offset = obj->placements[0].lpfn;
> > 	max_offset <<= PAGE_SHIFT;
> 
> 
> It's probably just simpler to be:
> 
> 	min_offset = (u64)obj->placements[0].fpfn << PAGE_SHIFT;
> 	max_offset = (u64)obj->placements[0].lpfn << PAGE_SHIFT;
> 
> But the larger questions aer why is min_offset a u64,
[DZ] max/min_offset is memory size.
 
>and can the shift actually
> wrap? 
[DZ] of course, adding shift wrap is better. fpfn/lpfn is page number, so <<PAGE_SHIFT is to convert to memory size.

Regards,
  David Zhou
> I'm just looking at static checker warnings, and I'm not very familiar
> with this code so I don't know the answers.
> 
> regards,
> dan carpenter

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: drm/amdgpu: implement cgs gpu memory callbacks
  2015-08-25  2:07     ` Zhou, David(ChunMing)
@ 2015-08-25  5:50       ` Dan Carpenter
  2015-08-25  6:00         ` Zhou, David(ChunMing)
  0 siblings, 1 reply; 6+ messages in thread
From: Dan Carpenter @ 2015-08-25  5:50 UTC (permalink / raw)
  To: Zhou, David(ChunMing); +Cc: dri-devel@lists.freedesktop.org

On Tue, Aug 25, 2015 at 02:07:21AM +0000, Zhou, David(ChunMing) wrote:
> >and can the shift actually
> > wrap? 
> [DZ] of course, adding shift wrap is better. fpfn/lpfn is page number, so <<PAGE_SHIFT is to convert to memory size.

By "Shift wrap" I meant how you shift beyond the end of a 32bit number
and it truncates, or if it's signed then it can wrap around (it's
undefined actually, I probably should use a different word?).

int main(void)
{
	unsigned long long a = 0xf0000000U << 12;
	unsigned long long b = 0xf0000000ULL << 12;

	printf("%llx %llx\n", a, b);

	return 0;
}

regards,
dan carpenter
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: drm/amdgpu: implement cgs gpu memory callbacks
  2015-08-25  5:50       ` Dan Carpenter
@ 2015-08-25  6:00         ` Zhou, David(ChunMing)
  0 siblings, 0 replies; 6+ messages in thread
From: Zhou, David(ChunMing) @ 2015-08-25  6:00 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: dri-devel@lists.freedesktop.org



> -----Original Message-----
> From: Dan Carpenter [mailto:dan.carpenter@oracle.com]
> Sent: Tuesday, August 25, 2015 1:51 PM
> To: Zhou, David(ChunMing)
> Cc: dri-devel@lists.freedesktop.org
> Subject: Re: drm/amdgpu: implement cgs gpu memory callbacks
> 
> On Tue, Aug 25, 2015 at 02:07:21AM +0000, Zhou, David(ChunMing) wrote:
> > >and can the shift actually
> > > wrap?
> > [DZ] of course, adding shift wrap is better. fpfn/lpfn is page number, so
> <<PAGE_SHIFT is to convert to memory size.
> 
> By "Shift wrap" I meant how you shift beyond the end of a 32bit number and it
> truncates, or if it's signed then it can wrap around (it's undefined actually, I
> probably should use a different word?).
> 
> int main(void)
> {
> 	unsigned long long a = 0xf0000000U << 12;
> 	unsigned long long b = 0xf0000000ULL << 12;
> 
> 	printf("%llx %llx\n", a, b);
> 
> 	return 0;
> }
[DZ] oh, I understand your mean, with previous PAGE_SHIFT, I think it should be like 'b' in your example without truncates.

Thanks,
 David Zhou
> 
> regards,
> dan carpenter
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-08-25  6:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-21 16:23 drm/amdgpu: implement cgs gpu memory callbacks Dan Carpenter
2015-08-24  7:09 ` Zhou, David(ChunMing)
2015-08-24 19:51   ` Dan Carpenter
2015-08-25  2:07     ` Zhou, David(ChunMing)
2015-08-25  5:50       ` Dan Carpenter
2015-08-25  6:00         ` Zhou, David(ChunMing)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.