From: "Winkler, Tomas" <tomas.winkler@intel.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Usyskin, Alexander" <alexander.usyskin@intel.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [char-misc-next 2/2] mei: revamp mei extension header structure layout.
Date: Sat, 19 Jun 2021 20:42:04 +0000 [thread overview]
Message-ID: <31dd3bfbb3e04c9c9a2ccc701b7e56df@intel.com> (raw)
In-Reply-To: <YMs2oemOeLvwwnue@kroah.com>
>
> On Wed, Jun 16, 2021 at 12:15:57AM +0300, Tomas Winkler wrote:
> > The mei extension header was build as array of flexible structures
> > which will not work if actually more headers are added
>
> Why not? What is wrong with what you currently have?
Because it is not possible to create array of flexible structures in C as far as I know.
> And did you forget a '.' here?
Thanks will resend.
>
> > Use basic type u8 for the variable sized extension.
> > Define explicitly mei_ext_hdr_vtag structure.
> > Fix also mei_ext_next() function to point correctly to the end of the
> > header.
> >
> > Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
> > ---
> > drivers/misc/mei/client.c | 16 +++++++++-------
> > drivers/misc/mei/hw.h | 28 ++++++++++++++++++++--------
> > drivers/misc/mei/interrupt.c | 23 ++++++++++-------------
> > 3 files changed, 39 insertions(+), 28 deletions(-)
> >
> > diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
> > index 18e49479d8b0..96f4e59c32a5 100644
> > --- a/drivers/misc/mei/client.c
> > +++ b/drivers/misc/mei/client.c
> > @@ -1726,12 +1726,15 @@ int mei_cl_read_start(struct mei_cl *cl, size_t
> length, const struct file *fp)
> > return rets;
> > }
> >
> > -static inline u8 mei_ext_hdr_set_vtag(struct mei_ext_hdr *ext, u8
> > vtag)
> > +static inline u8 mei_ext_hdr_set_vtag(void *ext, u8 vtag)
> > {
> > - ext->type = MEI_EXT_HDR_VTAG;
> > - ext->ext_payload[0] = vtag;
> > - ext->length = mei_data2slots(sizeof(*ext));
> > - return ext->length;
> > + struct mei_ext_hdr_vtag *vtag_hdr = ext;
> > +
> > + vtag_hdr->hdr.type = MEI_EXT_HDR_VTAG;
> > + vtag_hdr->hdr.length = mei_data2slots(sizeof(*vtag_hdr));
> > + vtag_hdr->vtag = vtag;
> > + vtag_hdr->reserved = 0;
> > + return vtag_hdr->hdr.length;
> > }
> >
> > /**
> > @@ -1745,7 +1748,6 @@ static struct mei_msg_hdr
> > *mei_msg_hdr_init(const struct mei_cl_cb *cb) {
> > size_t hdr_len;
> > struct mei_ext_meta_hdr *meta;
> > - struct mei_ext_hdr *ext;
> > struct mei_msg_hdr *mei_hdr;
> > bool is_ext, is_vtag;
> >
> > @@ -1764,7 +1766,7 @@ static struct mei_msg_hdr
> > *mei_msg_hdr_init(const struct mei_cl_cb *cb)
> >
> > hdr_len += sizeof(*meta);
> > if (is_vtag)
> > - hdr_len += sizeof(*ext);
> > + hdr_len += sizeof(struct mei_ext_hdr_vtag);
> >
> > setup_hdr:
> > mei_hdr = kzalloc(hdr_len, GFP_KERNEL); diff --git
> > a/drivers/misc/mei/hw.h b/drivers/misc/mei/hw.h index
> > b10606550613..dfd60c916da0 100644
> > --- a/drivers/misc/mei/hw.h
> > +++ b/drivers/misc/mei/hw.h
> > @@ -235,9 +235,8 @@ enum mei_ext_hdr_type { struct mei_ext_hdr {
> > u8 type;
> > u8 length;
> > - u8 ext_payload[2];
> > - u8 hdr[];
> > -};
> > + u8 data[];
> > +} __packed;
>
> why packed?
It's an aligned structure but still It's HW interface.
>
> >
> > /**
> > * struct mei_ext_meta_hdr - extend header meta data @@ -250,8
> > +249,21 @@ struct mei_ext_meta_hdr {
> > u8 count;
> > u8 size;
> > u8 reserved[2];
> > - struct mei_ext_hdr hdrs[];
> > -};
> > + u8 hdrs[];
> > +} __packed;
>
> Why packed?
Same here.
>
> > +
> > +/**
> > + * struct mei_ext_hdr_vtag - extend header for vtag
> > + *
> > + * @hdr: standard extend header
> > + * @vtag: virtual tag
> > + * @reserved: reserved
> > + */
> > +struct mei_ext_hdr_vtag {
> > + struct mei_ext_hdr hdr;
> > + u8 vtag;
> > + u8 reserved;
> > +} __packed;
>
> Why packed?
>
> These are not being read directly from hardware are they?
They are.
Thanks
Tomas
prev parent reply other threads:[~2021-06-19 20:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-15 21:15 [char-misc-next 1/2] mei: fix kdoc in the driver Tomas Winkler
2021-06-15 21:15 ` [char-misc-next 2/2] mei: revamp mei extension header structure layout Tomas Winkler
2021-06-17 11:47 ` Greg Kroah-Hartman
2021-06-17 11:48 ` Greg Kroah-Hartman
2021-06-19 20:42 ` Winkler, Tomas [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=31dd3bfbb3e04c9c9a2ccc701b7e56df@intel.com \
--to=tomas.winkler@intel.com \
--cc=alexander.usyskin@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.