From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH 08/13 v4] drm/i915/intel_i2c: handle zero-length writes Date: Tue, 27 Mar 2012 20:14:04 +0100 Message-ID: <1332875657_117263@CP5-2952> References: <1332873382-29373-1-git-send-email-djkurtz@chromium.org> <1332873382-29373-9-git-send-email-djkurtz@chromium.org> Return-path: In-Reply-To: <1332873382-29373-9-git-send-email-djkurtz@chromium.org> Sender: linux-kernel-owner@vger.kernel.org To: Daniel Vetter , Keith Packard , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Benson Leung , Yufeng Shen , Daniel Kurtz List-Id: dri-devel@lists.freedesktop.org On Wed, 28 Mar 2012 02:36:17 +0800, Daniel Kurtz wrote: > A common method of probing an i2c bus is trying to do a zero-length write. > Handle this case by checking the length first before decrementing it. > > This is actually important, since attempting a zero-length write is one > of the ways that i2cdetect and i2c_new_probed_device detect whether > there is device present on the bus with a given address. > > Signed-off-by: Daniel Kurtz > --- > drivers/gpu/drm/i915/intel_i2c.c | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c > index c12db72..5a94e9b 100644 > --- a/drivers/gpu/drm/i915/intel_i2c.c > +++ b/drivers/gpu/drm/i915/intel_i2c.c > @@ -248,9 +248,10 @@ gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg, > u32 val, loop; > > val = loop = 0; > - do { > + while (len && loop < 4) { while (len-- && loop < 4) > val |= *buf++ << (8 * loop); > - } while (--len && ++loop < 4); > + len -= 1; Otherwise this looks too pythonesque ;-) > + } -- Chris Wilson, Intel Open Source Technology Centre