On Wed, 31 Jul 2024, Matthew Brost <matthew.brost@xxxxxxxxx> wrote: > Useful to determine size of devcoreump before writing it out. I find it useful to have this special case documented, with an example, so it's easier to see how handy this really is. BR, Jani. > > Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > Signed-off-by: Matthew Brost <matthew.brost@xxxxxxxxx> > --- > drivers/gpu/drm/drm_print.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c > index cf24dfdeb6b2..a1a4de9f9c44 100644 > --- a/drivers/gpu/drm/drm_print.c > +++ b/drivers/gpu/drm/drm_print.c > @@ -100,8 +100,9 @@ void __drm_puts_coredump(struct drm_printer *p, const char *str) > copy = iterator->remain; > > /* Copy out the bit of the string that we need */ > - memcpy(iterator->data, > - str + (iterator->start - iterator->offset), copy); > + if (iterator->data) > + memcpy(iterator->data, > + str + (iterator->start - iterator->offset), copy); > > iterator->offset = iterator->start + copy; > iterator->remain -= copy; > @@ -110,7 +111,8 @@ void __drm_puts_coredump(struct drm_printer *p, const char *str) > > len = min_t(ssize_t, strlen(str), iterator->remain); > > - memcpy(iterator->data + pos, str, len); > + if (iterator->data) > + memcpy(iterator->data + pos, str, len); > > iterator->offset += len; > iterator->remain -= len; > @@ -140,8 +142,9 @@ void __drm_printfn_coredump(struct drm_printer *p, struct va_format *vaf) > if ((iterator->offset >= iterator->start) && (len < iterator->remain)) { > ssize_t pos = iterator->offset - iterator->start; > > - snprintf(((char *) iterator->data) + pos, > - iterator->remain, "%pV", vaf); > + if (iterator->data) > + snprintf(((char *) iterator->data) + pos, > + iterator->remain, "%pV", vaf); > > iterator->offset += len; > iterator->remain -= len; -- Jani Nikula, Intel