Hello, On Fri, Dec 06, 2013 at 10:21:58AM +0100, Marc Kleine-Budde wrote: > On 12/06/2013 07:45 AM, Peter Chen wrote: > > On Thu, Dec 05, 2013 at 12:32:56PM +0100, Marc Kleine-Budde wrote: > >> Without this patch a seperate chunk of memory is allocated for the regmap > >> array. As the regmap is always used it makes no sense to allocate a seperate > >> memory block for it, this patch moves the regmap array directly into the struct > >> hw_bank. > >> > >> Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> > >> --- > >> drivers/usb/chipidea/ci.h | 66 ++++++++++++++++++++++----------------------- > >> drivers/usb/chipidea/core.c | 8 ------ > >> 2 files changed, 33 insertions(+), 41 deletions(-) > >> > >> diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h > >> index 1c94fc5..ef99d91 100644 > >> --- a/drivers/usb/chipidea/ci.h > >> +++ b/drivers/usb/chipidea/ci.h > >> @@ -26,6 +26,38 @@ > >> #define ENDPT_MAX 32 > >> > >> /****************************************************************************** > >> + * REGISTERS > >> + *****************************************************************************/ > >> +/* register size */ > >> +#define REG_BITS (32) > >> + > >> +/* register indices */ > >> +enum ci_hw_regs { > >> + CAP_CAPLENGTH, > >> + CAP_HCCPARAMS, > >> + CAP_DCCPARAMS, > >> + CAP_TESTMODE, > >> + CAP_LAST = CAP_TESTMODE, > >> + OP_USBCMD, > >> + OP_USBSTS, > >> + OP_USBINTR, > >> + OP_DEVICEADDR, > >> + OP_ENDPTLISTADDR, > >> + OP_PORTSC, > >> + OP_DEVLC, > >> + OP_OTGSC, > >> + OP_USBMODE, > >> + OP_ENDPTSETUPSTAT, > >> + OP_ENDPTPRIME, > >> + OP_ENDPTFLUSH, > >> + OP_ENDPTSTAT, > >> + OP_ENDPTCOMPLETE, > >> + OP_ENDPTCTRL, > >> + /* endptctrl1..15 follow */ > >> + OP_LAST = OP_ENDPTCTRL + ENDPT_MAX / 2, > >> +}; > >> + > >> +/****************************************************************************** > >> * STRUCTURES > >> *****************************************************************************/ > >> /** > >> @@ -98,7 +130,7 @@ struct hw_bank { > >> void __iomem *cap; > >> void __iomem *op; > >> size_t size; > >> - void __iomem **regmap; > >> + void __iomem *regmap[OP_LAST]; > > > > OP_LAST + 1? > > Yes. Why didn't the compiler detect the out of bounds access of the array? I cannot find it in my C book, but IIRC for an array sometype name[20]; in some contexts 20 is an allowed subscript (e.g. for &name[20]). Maybe that's why gcc doesn't warn. But in general don't consider you program to be OK just because you don't get a gcc warning :-) Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ | -- 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