[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/gntdev: Don't allocate struct gntdev_copy_batch on stack
On 15/01/16 19:43, Boris Ostrovsky wrote: > struct gntdev_copy_batch is over 1300 bytes in size, we shouldn't > put it on stack. > > Some compilers (e.g. 5.2.1) complain: > drivers/xen/gntdev.c: In function âgntdev_ioctl_grant_copy.isra.5â: > drivers/xen/gntdev.c:949:1: warning: the frame size of 1416 bytes > is larger than 1024 bytes [-Wframe-larger-than=] > > Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> > --- > drivers/xen/gntdev.c | 20 +++++++++++++------- > 1 file changed, 13 insertions(+), 7 deletions(-) > > diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c > index dc49538..43a2c1c 100644 > --- a/drivers/xen/gntdev.c > +++ b/drivers/xen/gntdev.c > @@ -915,15 +915,19 @@ static int gntdev_grant_copy_seg(struct > gntdev_copy_batch *batch, > static long gntdev_ioctl_grant_copy(struct gntdev_priv *priv, void __user *u) > { > struct ioctl_gntdev_grant_copy copy; > - struct gntdev_copy_batch batch; > + struct gntdev_copy_batch *batch; > unsigned int i; > int ret = 0; > > if (copy_from_user(©, u, sizeof(copy))) > return -EFAULT; > > - batch.nr_ops = 0; > - batch.nr_pages = 0; > + batch = kmalloc(sizeof(*batch), GFP_KERNEL); > + if (!batch) > + return -ENOMEM; > + > + batch->nr_ops = 0; > + batch->nr_pages = 0; > > for (i = 0; i < copy.count; i++) { > struct gntdev_grant_copy_segment seg; > @@ -933,18 +937,20 @@ static long gntdev_ioctl_grant_copy(struct gntdev_priv > *priv, void __user *u) > goto out; > } > > - ret = gntdev_grant_copy_seg(&batch, &seg, > ©.segments[i].status); > + ret = gntdev_grant_copy_seg(batch, &seg, > + ©.segments[i].status); > if (ret < 0) > goto out; > > cond_resched(); > } > - if (batch.nr_ops) > - ret = gntdev_copy(&batch); > + if (batch->nr_ops) > + ret = gntdev_copy(batch); You presumably want a kfree() here? > return ret; > > out: > - gntdev_put_pages(&batch); > + gntdev_put_pages(batch); > + kfree(batch); > return ret; > } > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |