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 <[email protected]>
> >> ---
> >> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html