aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei/client.c
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2013-04-19 15:01:35 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-04-19 16:38:38 -0400
commitfcb136e1ac5774909e0d85189f721b8dfa800e0f (patch)
treeac89a706d67783063d4f752c3acddc04c5ab10e8 /drivers/misc/mei/client.c
parent6e0f180fd8b47fa0884177a142e41a86117edc23 (diff)
mei: fix reading large reposnes
While writting to device is limitted to max_msg_length advertized in client properites the read can be much longer delivered consequiting chunks. We use krealloc to enlarge the buffer when needed. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/mei/client.c')
-rw-r--r--drivers/misc/mei/client.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
index 9541aa90d8f7..71892745e2e8 100644
--- a/drivers/misc/mei/client.c
+++ b/drivers/misc/mei/client.c
@@ -624,7 +624,7 @@ int mei_cl_flow_ctrl_reduce(struct mei_cl *cl)
624 * 624 *
625 * returns 0 on success, <0 on failure. 625 * returns 0 on success, <0 on failure.
626 */ 626 */
627int mei_cl_read_start(struct mei_cl *cl) 627int mei_cl_read_start(struct mei_cl *cl, size_t length)
628{ 628{
629 struct mei_device *dev; 629 struct mei_device *dev;
630 struct mei_cl_cb *cb; 630 struct mei_cl_cb *cb;
@@ -657,8 +657,9 @@ int mei_cl_read_start(struct mei_cl *cl)
657 if (!cb) 657 if (!cb)
658 return -ENOMEM; 658 return -ENOMEM;
659 659
660 rets = mei_io_cb_alloc_resp_buf(cb, 660 /* always allocate at least client max message */
661 dev->me_clients[i].props.max_msg_length); 661 length = max_t(size_t, length, dev->me_clients[i].props.max_msg_length);
662 rets = mei_io_cb_alloc_resp_buf(cb, length);
662 if (rets) 663 if (rets)
663 goto err; 664 goto err;
664 665