Currently the function heap allocates when we have any payload. Where in
many case the payload is 1 byte - ouch.

>From casual observation, vast majority of the payloads are smaller than
8 bytes - so use a stack array tx[8] to avoid the senseless kmalloc and
kfree dance.

Cc: Jani Nikula <jani.nik...@intel.com>
Cc: Thierry Reding <tred...@nvidia.com>
Signed-off-by: Emil Velikov <emil.veli...@collabora.com>
---
 drivers/gpu/drm/drm_mipi_dsi.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index 55531895dde6..b96d5b4629d7 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -748,26 +748,26 @@ ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, 
u8 cmd,
 {
        ssize_t err;
        size_t size;
+       u8 stack_tx[8];
        u8 *tx;
 
-       if (len > 0) {
-               size = 1 + len;
-
+       size = 1 + len;
+       if (len > ARRAY_SIZE(stack_tx) - 1) {
                tx = kmalloc(size, GFP_KERNEL);
                if (!tx)
                        return -ENOMEM;
-
-               /* concatenate the DCS command byte and the payload */
-               tx[0] = cmd;
-               memcpy(&tx[1], data, len);
        } else {
-               tx = &cmd;
-               size = 1;
+               tx = stack_tx;
        }
 
+       /* concatenate the DCS command byte and the payload */
+       tx[0] = cmd;
+       if (data)
+               memcpy(&tx[1], data, len);
+
        err = mipi_dsi_dcs_write_buffer(dsi, tx, size);
 
-       if (len > 0)
+       if (tx != stack_tx)
                kfree(tx);
 
        return err;
-- 
2.25.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to