[RESEND] drm/gma500: initialize gma_clock_t structures

Submitted by Arnd Bergmann on Jan. 16, 2018, 2:57 p.m.

Details

Message ID 20180116145720.2348043-1-arnd@arndb.de
State New
Headers show
Series "drm/gma500: initialize gma_clock_t structures" ( rev: 2 ) in DRI devel

Not browsing as part of any series.

Commit Message

Arnd Bergmann Jan. 16, 2018, 2:57 p.m.
The two functions pass a partially initialized structure back to the
caller after a memset() on the destination.

This is not entirely well-defined, most compilers are sensible enough
to either keep the zero-initialization for the uninitialized members,
but gcc-4.4 does not, and it warns about this:

drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_sdvo_find_best_pll':
drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.vco' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.dot' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.p2' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m2' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m1' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_lvds_find_best_pll':
drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.vco' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p2' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m2' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m1' may be used uninitialized in this function
drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.n' may be used uninitialized in this function

This adds an initialization at declaration time to avoid the warning
and make it well-defined on all compiler versions.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
Originally submitted on Sep 15, 2017, but got no reply. Resending unchanged.
---
 drivers/gpu/drm/gma500/oaktrail_crtc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/gma500/oaktrail_crtc.c b/drivers/gpu/drm/gma500/oaktrail_crtc.c
index 0fff269d3fe6..b49fe79c3f44 100644
--- a/drivers/gpu/drm/gma500/oaktrail_crtc.c
+++ b/drivers/gpu/drm/gma500/oaktrail_crtc.c
@@ -134,7 +134,7 @@  static bool mrst_sdvo_find_best_pll(const struct gma_limit_t *limit,
 				    struct drm_crtc *crtc, int target,
 				    int refclk, struct gma_clock_t *best_clock)
 {
-	struct gma_clock_t clock;
+	struct gma_clock_t clock = {};
 	u32 target_vco, actual_freq;
 	s32 freq_error, min_error = 100000;
 
@@ -191,7 +191,7 @@  static bool mrst_lvds_find_best_pll(const struct gma_limit_t *limit,
 				    struct drm_crtc *crtc, int target,
 				    int refclk, struct gma_clock_t *best_clock)
 {
-	struct gma_clock_t clock;
+	struct gma_clock_t clock = {};
 	int err = target;
 
 	memset(best_clock, 0, sizeof(*best_clock));

Comments

On Tue, Jan 16, 2018 at 3:57 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> The two functions pass a partially initialized structure back to the
> caller after a memset() on the destination.
>
> This is not entirely well-defined, most compilers are sensible enough
> to either keep the zero-initialization for the uninitialized members,
> but gcc-4.4 does not, and it warns about this:
>
> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_sdvo_find_best_pll':
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.vco' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.dot' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.p2' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m2' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m1' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_lvds_find_best_pll':
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.vco' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p2' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m2' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m1' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.n' may be used uninitialized in this function
>
> This adds an initialization at declaration time to avoid the warning
> and make it well-defined on all compiler versions.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Dave or Daniel, I'm on sick leave and will be for some time to come.
Can one of you pick up this patch? Thanks.

Reviewed-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>

> ---
> Originally submitted on Sep 15, 2017, but got no reply. Resending unchanged.
> ---
>  drivers/gpu/drm/gma500/oaktrail_crtc.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/gma500/oaktrail_crtc.c b/drivers/gpu/drm/gma500/oaktrail_crtc.c
> index 0fff269d3fe6..b49fe79c3f44 100644
> --- a/drivers/gpu/drm/gma500/oaktrail_crtc.c
> +++ b/drivers/gpu/drm/gma500/oaktrail_crtc.c
> @@ -134,7 +134,7 @@ static bool mrst_sdvo_find_best_pll(const struct gma_limit_t *limit,
>                                     struct drm_crtc *crtc, int target,
>                                     int refclk, struct gma_clock_t *best_clock)
>  {
> -       struct gma_clock_t clock;
> +       struct gma_clock_t clock = {};
>         u32 target_vco, actual_freq;
>         s32 freq_error, min_error = 100000;
>
> @@ -191,7 +191,7 @@ static bool mrst_lvds_find_best_pll(const struct gma_limit_t *limit,
>                                     struct drm_crtc *crtc, int target,
>                                     int refclk, struct gma_clock_t *best_clock)
>  {
> -       struct gma_clock_t clock;
> +       struct gma_clock_t clock = {};
>         int err = target;
>
>         memset(best_clock, 0, sizeof(*best_clock));
> --
> 2.9.0
>
On Tue, Jan 16, 2018 at 03:57:10PM +0100, Arnd Bergmann wrote:
> The two functions pass a partially initialized structure back to the
> caller after a memset() on the destination.
> 
> This is not entirely well-defined, most compilers are sensible enough
> to either keep the zero-initialization for the uninitialized members,
> but gcc-4.4 does not, and it warns about this:
> 
> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_sdvo_find_best_pll':
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.vco' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.dot' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.p2' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m2' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m1' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_lvds_find_best_pll':
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.vco' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p2' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m2' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m1' may be used uninitialized in this function
> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.n' may be used uninitialized in this function
> 
> This adds an initialization at declaration time to avoid the warning
> and make it well-defined on all compiler versions.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Applied to drm-misc-next-fixes for 4.16, thx for your patch. Aside: Still
don't want commit rights? :-)

Cheers, Daniel
> ---
> Originally submitted on Sep 15, 2017, but got no reply. Resending unchanged.
> ---
>  drivers/gpu/drm/gma500/oaktrail_crtc.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/gma500/oaktrail_crtc.c b/drivers/gpu/drm/gma500/oaktrail_crtc.c
> index 0fff269d3fe6..b49fe79c3f44 100644
> --- a/drivers/gpu/drm/gma500/oaktrail_crtc.c
> +++ b/drivers/gpu/drm/gma500/oaktrail_crtc.c
> @@ -134,7 +134,7 @@ static bool mrst_sdvo_find_best_pll(const struct gma_limit_t *limit,
>  				    struct drm_crtc *crtc, int target,
>  				    int refclk, struct gma_clock_t *best_clock)
>  {
> -	struct gma_clock_t clock;
> +	struct gma_clock_t clock = {};
>  	u32 target_vco, actual_freq;
>  	s32 freq_error, min_error = 100000;
>  
> @@ -191,7 +191,7 @@ static bool mrst_lvds_find_best_pll(const struct gma_limit_t *limit,
>  				    struct drm_crtc *crtc, int target,
>  				    int refclk, struct gma_clock_t *best_clock)
>  {
> -	struct gma_clock_t clock;
> +	struct gma_clock_t clock = {};
>  	int err = target;
>  
>  	memset(best_clock, 0, sizeof(*best_clock));
> -- 
> 2.9.0
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
On Wed, Jan 17, 2018 at 9:27 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Tue, Jan 16, 2018 at 03:57:10PM +0100, Arnd Bergmann wrote:
>> The two functions pass a partially initialized structure back to the
>> caller after a memset() on the destination.
>>
>> This is not entirely well-defined, most compilers are sensible enough
>> to either keep the zero-initialization for the uninitialized members,
>> but gcc-4.4 does not, and it warns about this:
>>
>> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_sdvo_find_best_pll':
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.vco' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.dot' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.p2' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m2' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m1' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_lvds_find_best_pll':
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.vco' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p2' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m2' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m1' may be used uninitialized in this function
>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.n' may be used uninitialized in this function
>>
>> This adds an initialization at declaration time to avoid the warning
>> and make it well-defined on all compiler versions.
>>
>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>
> Applied to drm-misc-next-fixes for 4.16, thx for your patch.

Thanks!

> Aside: Still don't want commit rights? :-)

I think I'm fine without. While I do tend to have a backlog on DRM
patches that I'd
like to get merged, they are generally of the kind that I should not
apply myself
without the maintainer being involved in some form, and then they can commit
it themselves.

       Arnd
On Wed, Jan 17, 2018 at 3:36 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> On Wed, Jan 17, 2018 at 9:27 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Tue, Jan 16, 2018 at 03:57:10PM +0100, Arnd Bergmann wrote:
>>> The two functions pass a partially initialized structure back to the
>>> caller after a memset() on the destination.
>>>
>>> This is not entirely well-defined, most compilers are sensible enough
>>> to either keep the zero-initialization for the uninitialized members,
>>> but gcc-4.4 does not, and it warns about this:
>>>
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_sdvo_find_best_pll':
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.vco' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.dot' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.p2' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m2' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m1' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_lvds_find_best_pll':
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.vco' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p2' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m2' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m1' may be used uninitialized in this function
>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.n' may be used uninitialized in this function
>>>
>>> This adds an initialization at declaration time to avoid the warning
>>> and make it well-defined on all compiler versions.
>>>
>>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>>
>> Applied to drm-misc-next-fixes for 4.16, thx for your patch.
>
> Thanks!
>
>> Aside: Still don't want commit rights? :-)
>
> I think I'm fine without. While I do tend to have a backlog on DRM
> patches that I'd
> like to get merged, they are generally of the kind that I should not
> apply myself
> without the maintainer being involved in some form, and then they can commit
> it themselves.

Commit rights isn't for pushing unreviewed stuff (our scripts will
remind you of that if you try). But you could just volunteer someone
to review the entire pile and then push it, instead of nagging every
single slacking maintainer individually.
-Daniel
On Wed, Jan 17, 2018 at 3:55 PM, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Wed, Jan 17, 2018 at 3:36 PM, Arnd Bergmann <arnd@arndb.de> wrote:
>> On Wed, Jan 17, 2018 at 9:27 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
>>> On Tue, Jan 16, 2018 at 03:57:10PM +0100, Arnd Bergmann wrote:
>>>> The two functions pass a partially initialized structure back to the
>>>> caller after a memset() on the destination.
>>>>
>>>> This is not entirely well-defined, most compilers are sensible enough
>>>> to either keep the zero-initialization for the uninitialized members,
>>>> but gcc-4.4 does not, and it warns about this:
>>>>
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_sdvo_find_best_pll':
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.vco' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.dot' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.p2' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m2' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m1' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_lvds_find_best_pll':
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.vco' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p2' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m2' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m1' may be used uninitialized in this function
>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.n' may be used uninitialized in this function
>>>>
>>>> This adds an initialization at declaration time to avoid the warning
>>>> and make it well-defined on all compiler versions.
>>>>
>>>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>>>
>>> Applied to drm-misc-next-fixes for 4.16, thx for your patch.
>>
>> Thanks!
>>
>>> Aside: Still don't want commit rights? :-)
>>
>> I think I'm fine without. While I do tend to have a backlog on DRM
>> patches that I'd
>> like to get merged, they are generally of the kind that I should not
>> apply myself
>> without the maintainer being involved in some form, and then they can commit
>> it themselves.
>
> Commit rights isn't for pushing unreviewed stuff (our scripts will
> remind you of that if you try). But you could just volunteer someone
> to review the entire pile and then push it, instead of nagging every
> single slacking maintainer individually.

I understand, but I could also just nag someone to review and apply
the patches, right? Or do the committer and reviewer also need to
be separate people?

        Arnd
On Wed, Jan 17, 2018 at 8:44 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> On Wed, Jan 17, 2018 at 3:55 PM, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Wed, Jan 17, 2018 at 3:36 PM, Arnd Bergmann <arnd@arndb.de> wrote:
>>> On Wed, Jan 17, 2018 at 9:27 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
>>>> On Tue, Jan 16, 2018 at 03:57:10PM +0100, Arnd Bergmann wrote:
>>>>> The two functions pass a partially initialized structure back to the
>>>>> caller after a memset() on the destination.
>>>>>
>>>>> This is not entirely well-defined, most compilers are sensible enough
>>>>> to either keep the zero-initialization for the uninitialized members,
>>>>> but gcc-4.4 does not, and it warns about this:
>>>>>
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_sdvo_find_best_pll':
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.vco' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.dot' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.p2' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m2' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:175: warning: 'clock.m1' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c: In function 'mrst_lvds_find_best_pll':
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.vco' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.p2' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m2' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.m1' may be used uninitialized in this function
>>>>> drivers/gpu/drm/gma500/oaktrail_crtc.c:208: warning: 'clock.n' may be used uninitialized in this function
>>>>>
>>>>> This adds an initialization at declaration time to avoid the warning
>>>>> and make it well-defined on all compiler versions.
>>>>>
>>>>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>>>>
>>>> Applied to drm-misc-next-fixes for 4.16, thx for your patch.
>>>
>>> Thanks!
>>>
>>>> Aside: Still don't want commit rights? :-)
>>>
>>> I think I'm fine without. While I do tend to have a backlog on DRM
>>> patches that I'd
>>> like to get merged, they are generally of the kind that I should not
>>> apply myself
>>> without the maintainer being involved in some form, and then they can commit
>>> it themselves.
>>
>> Commit rights isn't for pushing unreviewed stuff (our scripts will
>> remind you of that if you try). But you could just volunteer someone
>> to review the entire pile and then push it, instead of nagging every
>> single slacking maintainer individually.
>
> I understand, but I could also just nag someone to review and apply
> the patches, right? Or do the committer and reviewer also need to
> be separate people?

Among author, committer and ackers/reviewers we just insist on 2
different people. So nagging works too, if you don't find that
frustrating.
-Daniel