On Mon, Sep 22, 2014 at 05:46:52PM +0300, Octavian Purdila wrote: > Currently the I/O buffer is allocated part of the device status > structure, potentially sharing the same cache line with other members > in this structure. > > Allocate the buffer separately, to avoid the I/O operations corrupting > the device status structure due to cache line sharing. > > Compiled tested only, as I don't have access to hardware. > > Signed-off-by: Octavian Purdila <octavian.purdila@xxxxxxxxx> > --- Change itself looks sane, although the driver's use of a shared buffer and relying on undocumented locking is a different story. However, you do more than your commit message claims below. > drivers/mfd/viperboard.c | 16 ++++++++++------ > include/linux/mfd/viperboard.h | 2 +- > 2 files changed, 11 insertions(+), 7 deletions(-) > > diff --git a/drivers/mfd/viperboard.c b/drivers/mfd/viperboard.c > index e00f534..d27c131 100644 > --- a/drivers/mfd/viperboard.c > +++ b/drivers/mfd/viperboard.c > @@ -59,9 +59,13 @@ static int vprbrd_probe(struct usb_interface *interface, > > /* allocate memory for our device state and initialize it */ > vb = kzalloc(sizeof(*vb), GFP_KERNEL); > - if (vb == NULL) { > - dev_err(&interface->dev, "Out of memory\n"); Here you're also removing a redundant OOM message. > + if (vb == NULL) > return -ENOMEM; > + > + vb->buf = kzalloc(sizeof(struct vprbrd_i2c_write_msg), GFP_KERNEL); > + if (vb->buf == NULL) { > + ret = -ENOMEM; > + goto error; > } > > mutex_init(&vb->lock); > @@ -103,10 +107,9 @@ static int vprbrd_probe(struct usb_interface *interface, > return 0; > > error: > - if (vb) { And cleaning up the error path. > - usb_put_dev(vb->usb_dev); > - kfree(vb); > - } > + usb_put_dev(vb->usb_dev); > + kfree(vb->buf); > + kfree(vb); > > return ret; > } Don't mix fixes and clean ups like this, but rather submit them as separate patches. Johan -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html