]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
intel_th: sth: Sanitize packet callback's return values
authorAlexander Shishkin <alexander.shishkin@linux.intel.com>
Mon, 15 Feb 2016 17:11:58 +0000 (19:11 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Feb 2016 22:09:14 +0000 (14:09 -0800)
According to the stm class interface, the packet callback should return
an error if it is asked to generate packets that it doesn't support.
When it succeeds, it should return number of bytes consumed from its
payload. Currently, for FLAG packet it mistakenly returns 1.

This patch addresses these issues.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/intel_th/sth.c

index 56101c33e10f8d8bc668ef8a8d3a89f6fcd24343..e1aee61dd7b394425c825b649971825bbec33381 100644 (file)
@@ -94,10 +94,13 @@ static ssize_t sth_stm_packet(struct stm_data *stm_data, unsigned int master,
        case STP_PACKET_TRIG:
                if (flags & STP_PACKET_TIMESTAMPED)
                        reg += 4;
-               iowrite8(*payload, sth->base + reg);
+               writeb_relaxed(*payload, sth->base + reg);
                break;
 
        case STP_PACKET_MERR:
+               if (size > 4)
+                       size = 4;
+
                sth_iowrite(&out->MERR, payload, size);
                break;
 
@@ -107,8 +110,8 @@ static ssize_t sth_stm_packet(struct stm_data *stm_data, unsigned int master,
                else
                        outp = (u64 __iomem *)&out->FLAG;
 
-               size = 1;
-               sth_iowrite(outp, payload, size);
+               size = 0;
+               writeb_relaxed(0, outp);
                break;
 
        case STP_PACKET_USER:
@@ -129,6 +132,8 @@ static ssize_t sth_stm_packet(struct stm_data *stm_data, unsigned int master,
 
                sth_iowrite(outp, payload, size);
                break;
+       default:
+               return -ENOTSUPP;
        }
 
        return size;