> Who's tree should this go through? To answer the question: When Rex is ok with that he pushes it to our internal amd-staging-drm-next tree. Alex then pushes that tree to a public server and at some point sends a pull request for inclusion in drm-next. Regards, Christian. Am 17.07.2018 um 08:23 schrieb Zhu, Rex: > Patch is: > Reviewed-by: Rex Zhu<rezhu at amd.com <mailto:rezhu at amd.com>> > > > > Best Regards > Rex > > > ------------------------------------------------------------------------ > *From:* keescook at google.com <keescook at google.com> on behalf of Kees > Cook <keescook at chromium.org> > *Sent:* Tuesday, July 17, 2018 11:59 AM > *To:* Deucher, Alexander > *Cc:* LKML; Koenig, Christian; Zhou, David(ChunMing); David Airlie; > Zhu, Rex; Huang, Ray; Kuehling, Felix; amd-gfx list; Maling list - DRI > developers > *Subject:* Re: [PATCH] drm/amdgpu/pm: Remove VLA usage > On Wed, Jun 20, 2018 at 11:26 AM, Kees Cook <keescook at chromium.org> wrote: > > In the quest to remove all stack VLA usage from the kernel[1], this > > uses the maximum sane buffer size and removes copy/paste code. > > > > [1] > https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA at mail.gmail.com > > > > Signed-off-by: Kees Cook <keescook at chromium.org> > > Friendly ping! Who's tree should this go through? > > Thanks! > > -Kees > > > --- > >Â drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 100 +++++++++++-------------- > >Â 1 file changed, 42 insertions(+), 58 deletions(-) > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > > index b455da487782..5eb98cde22ed 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > > @@ -593,40 +593,59 @@ static ssize_t amdgpu_get_pp_dpm_sclk(struct > device *dev, > >Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â return snprintf(buf, PAGE_SIZE, "\n"); > >Â } > > > > -static ssize_t amdgpu_set_pp_dpm_sclk(struct device *dev, > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â struct device_attribute *attr, > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â const char *buf, > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â size_t count) > > +/* > > + * Worst case: 32 bits individually specified, in octal at 12 > characters > > + * per line (+1 for \n). > > + */ > > +#define AMDGPU_MASK_BUF_MAXÂ Â Â (32 * 13) > > + > > +static ssize_t amdgpu_read_mask(const char *buf, size_t count, > uint32_t *mask) > >Â { > > -Â Â Â Â Â Â struct drm_device *ddev = dev_get_drvdata(dev); > > -Â Â Â Â Â Â struct amdgpu_device *adev = ddev->dev_private; > >Â Â Â Â Â Â Â Â int ret; > >Â Â Â Â Â Â Â Â long level; > > -Â Â Â Â Â Â uint32_t mask = 0; > >Â Â Â Â Â Â Â Â char *sub_str = NULL; > >Â Â Â Â Â Â Â Â char *tmp; > > -Â Â Â Â Â Â char buf_cpy[count]; > > +Â Â Â Â Â Â char buf_cpy[AMDGPU_MASK_BUF_MAX + 1]; > >Â Â Â Â Â Â Â Â const char delimiter[3] = {' ', '\n', '\0'}; > > +Â Â Â Â Â Â size_t bytes; > > > > -Â Â Â Â Â Â memcpy(buf_cpy, buf, count+1); > > +Â Â Â Â Â Â *mask = 0; > > + > > +Â Â Â Â Â Â bytes = min(count, sizeof(buf_cpy) - 1); > > +Â Â Â Â Â Â memcpy(buf_cpy, buf, bytes); > > +Â Â Â Â Â Â buf_cpy[bytes] = '\0'; > >Â Â Â Â Â Â Â Â tmp = buf_cpy; > >Â Â Â Â Â Â Â Â while (tmp[0]) { > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â sub_str =Â strsep(&tmp, delimiter); > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â sub_str = strsep(&tmp, delimiter); > >Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if (strlen(sub_str)) { > >Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â ret = kstrtol(sub_str, 0, &level); > > - > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if (ret) { > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â count = -EINVAL; > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â goto fail; > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â } > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â mask |= 1 << level; > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if (ret) > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â return -EINVAL; > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â *mask |= 1 << level; > >Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â } else > >Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â break; > >Â Â Â Â Â Â Â Â } > > + > > +Â Â Â Â Â Â return 0; > > +} > > + > > +static ssize_t amdgpu_set_pp_dpm_sclk(struct device *dev, > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â struct device_attribute *attr, > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â const char *buf, > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â size_t count) > > +{ > > +Â Â Â Â Â Â struct drm_device *ddev = dev_get_drvdata(dev); > > +Â Â Â Â Â Â struct amdgpu_device *adev = ddev->dev_private; > > +Â Â Â Â Â Â int ret; > > +Â Â Â Â Â Â uint32_t mask = 0; > > + > > +Â Â Â Â Â Â ret = amdgpu_read_mask(buf, count, &mask); > > +Â Â Â Â Â Â if (ret) > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â return ret; > > + > >Â Â Â Â Â Â Â Â if (adev->powerplay.pp_funcs->force_clock_level) > > amdgpu_dpm_force_clock_level(adev, PP_SCLK, mask); > > > > -fail: > >Â Â Â Â Â Â Â Â return count; > >Â } > > > > @@ -651,32 +670,15 @@ static ssize_t amdgpu_set_pp_dpm_mclk(struct > device *dev, > >Â Â Â Â Â Â Â Â struct drm_device *ddev = dev_get_drvdata(dev); > >Â Â Â Â Â Â Â Â struct amdgpu_device *adev = ddev->dev_private; > >Â Â Â Â Â Â Â Â int ret; > > -Â Â Â Â Â Â long level; > >Â Â Â Â Â Â Â Â uint32_t mask = 0; > > -Â Â Â Â Â Â char *sub_str = NULL; > > -Â Â Â Â Â Â char *tmp; > > -Â Â Â Â Â Â char buf_cpy[count]; > > -Â Â Â Â Â Â const char delimiter[3] = {' ', '\n', '\0'}; > > > > -Â Â Â Â Â Â memcpy(buf_cpy, buf, count+1); > > -Â Â Â Â Â Â tmp = buf_cpy; > > -Â Â Â Â Â Â while (tmp[0]) { > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â sub_str =Â strsep(&tmp, delimiter); > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â if (strlen(sub_str)) { > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â ret = kstrtol(sub_str, 0, &level); > > +Â Â Â Â Â Â ret = amdgpu_read_mask(buf, count, &mask); > > +Â Â Â Â Â Â if (ret) > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â return ret; > > > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if (ret) { > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â count = -EINVAL; > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â goto fail; > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â } > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â mask |= 1 << level; > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â } else > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â break; > > -Â Â Â Â Â Â } > >Â Â Â Â Â Â Â Â if (adev->powerplay.pp_funcs->force_clock_level) > > amdgpu_dpm_force_clock_level(adev, PP_MCLK, mask); > > > > -fail: > >Â Â Â Â Â Â Â Â return count; > >Â } > > > > @@ -701,33 +703,15 @@ static ssize_t amdgpu_set_pp_dpm_pcie(struct > device *dev, > >Â Â Â Â Â Â Â Â struct drm_device *ddev = dev_get_drvdata(dev); > >Â Â Â Â Â Â Â Â struct amdgpu_device *adev = ddev->dev_private; > >Â Â Â Â Â Â Â Â int ret; > > -Â Â Â Â Â Â long level; > >Â Â Â Â Â Â Â Â uint32_t mask = 0; > > -Â Â Â Â Â Â char *sub_str = NULL; > > -Â Â Â Â Â Â char *tmp; > > -Â Â Â Â Â Â char buf_cpy[count]; > > -Â Â Â Â Â Â const char delimiter[3] = {' ', '\n', '\0'}; > > - > > -Â Â Â Â Â Â memcpy(buf_cpy, buf, count+1); > > -Â Â Â Â Â Â tmp = buf_cpy; > > > > -Â Â Â Â Â Â while (tmp[0]) { > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â sub_str =Â strsep(&tmp, delimiter); > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â if (strlen(sub_str)) { > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â ret = kstrtol(sub_str, 0, &level); > > +Â Â Â Â Â Â ret = amdgpu_read_mask(buf, count, &mask); > > +Â Â Â Â Â Â if (ret) > > +Â Â Â Â Â Â Â Â Â Â Â Â Â Â return ret; > > > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if (ret) { > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â count = -EINVAL; > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â goto fail; > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â } > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â mask |= 1 << level; > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â } else > > -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â break; > > -Â Â Â Â Â Â } > >Â Â Â Â Â Â Â Â if (adev->powerplay.pp_funcs->force_clock_level) > > amdgpu_dpm_force_clock_level(adev, PP_PCIE, mask); > > > > -fail: > >Â Â Â Â Â Â Â Â return count; > >Â } > > > > -- > > 2.17.1 > > > > > > -- > > Kees Cook > > Pixel Security > > > > -- > Kees Cook > Pixel Security > > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20180717/9170b722/attachment-0001.html>