aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwtracing/intel_th
diff options
context:
space:
mode:
authorAlexander Shishkin <alexander.shishkin@linux.intel.com>2016-02-15 12:11:58 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-02-20 17:09:14 -0500
commit97007500ec3f9b08913ebec986068b9d250a6eed (patch)
tree798be73b21b415367120196171e936b2bca1ff06 /drivers/hwtracing/intel_th
parent2bed074aade2caa9c350121837c55189a8fd197e (diff)
intel_th: sth: Sanitize packet callback's return values
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>
Diffstat (limited to 'drivers/hwtracing/intel_th')
-rw-r--r--drivers/hwtracing/intel_th/sth.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/hwtracing/intel_th/sth.c b/drivers/hwtracing/intel_th/sth.c
index 56101c33e10f..e1aee61dd7b3 100644
--- a/drivers/hwtracing/intel_th/sth.c
+++ b/drivers/hwtracing/intel_th/sth.c
@@ -94,10 +94,13 @@ static ssize_t sth_stm_packet(struct stm_data *stm_data, unsigned int master,
94 case STP_PACKET_TRIG: 94 case STP_PACKET_TRIG:
95 if (flags & STP_PACKET_TIMESTAMPED) 95 if (flags & STP_PACKET_TIMESTAMPED)
96 reg += 4; 96 reg += 4;
97 iowrite8(*payload, sth->base + reg); 97 writeb_relaxed(*payload, sth->base + reg);
98 break; 98 break;
99 99
100 case STP_PACKET_MERR: 100 case STP_PACKET_MERR:
101 if (size > 4)
102 size = 4;
103
101 sth_iowrite(&out->MERR, payload, size); 104 sth_iowrite(&out->MERR, payload, size);
102 break; 105 break;
103 106
@@ -107,8 +110,8 @@ static ssize_t sth_stm_packet(struct stm_data *stm_data, unsigned int master,
107 else 110 else
108 outp = (u64 __iomem *)&out->FLAG; 111 outp = (u64 __iomem *)&out->FLAG;
109 112
110 size = 1; 113 size = 0;
111 sth_iowrite(outp, payload, size); 114 writeb_relaxed(0, outp);
112 break; 115 break;
113 116
114 case STP_PACKET_USER: 117 case STP_PACKET_USER:
@@ -129,6 +132,8 @@ static ssize_t sth_stm_packet(struct stm_data *stm_data, unsigned int master,
129 132
130 sth_iowrite(outp, payload, size); 133 sth_iowrite(outp, payload, size);
131 break; 134 break;
135 default:
136 return -ENOTSUPP;
132 } 137 }
133 138
134 return size; 139 return size;