aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pcie
diff options
context:
space:
mode:
authorHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>2009-09-07 04:11:29 -0400
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-09-09 16:48:19 -0400
commit24dbb7beb2a207f423006c46830dfaacca5a1139 (patch)
tree2a2b7b85c11eb784c691c0857c59e8a6053004ae /drivers/pci/pcie
parent0d465f23502e0810443c90a9cf1cf5686c4af4f2 (diff)
PCI: pcie, aer: remove spinlock in aerdrv_errprint.c
The static buffer errmsg_buff[] is used only for building error message in fixed format, and is protected by a spinlock. This patch removes this buffer and the spinlock. Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> Reviewed-by: Andrew Patterson <andrew.patterson@hp.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/pci/pcie')
-rw-r--r--drivers/pci/pcie/aer/aerdrv_errprint.c28
1 files changed, 8 insertions, 20 deletions
diff --git a/drivers/pci/pcie/aer/aerdrv_errprint.c b/drivers/pci/pcie/aer/aerdrv_errprint.c
index a2a4b3903a7a..95c3f1ca8076 100644
--- a/drivers/pci/pcie/aer/aerdrv_errprint.c
+++ b/drivers/pci/pcie/aer/aerdrv_errprint.c
@@ -152,38 +152,31 @@ static char *aer_agent_string[] = {
152 "Transmitter ID" 152 "Transmitter ID"
153}; 153};
154 154
155static char *aer_get_error_source_name(int severity, 155static void aer_print_error_source(struct aer_err_info *info)
156 unsigned int status,
157 char errmsg_buff[])
158{ 156{
159 int i; 157 int i;
160 char *errmsg = NULL; 158 char *errmsg = NULL;
161 159
162 for (i = 0; i < 32; i++) { 160 for (i = 0; i < 32; i++) {
163 if (!(status & (1 << i))) 161 if (!(info->status & (1 << i)))
164 continue; 162 continue;
165 163
166 if (severity == AER_CORRECTABLE) 164 if (info->severity == AER_CORRECTABLE)
167 errmsg = aer_correctable_error_string[i]; 165 errmsg = aer_correctable_error_string[i];
168 else 166 else
169 errmsg = aer_uncorrectable_error_string[i]; 167 errmsg = aer_uncorrectable_error_string[i];
170 168
171 if (!errmsg) { 169 if (errmsg)
172 sprintf(errmsg_buff, "Unknown Error Bit %2d ", i); 170 AER_PR(info, "%s\t:\n", errmsg);
173 errmsg = errmsg_buff; 171 else
174 } 172 AER_PR(info, "Unknown Error Bit %2d \t:\n", i);
175 173
176 break; 174 break;
177 } 175 }
178
179 return errmsg;
180} 176}
181 177
182static DEFINE_SPINLOCK(logbuf_lock);
183static char errmsg_buff[100];
184void aer_print_error(struct pci_dev *dev, struct aer_err_info *info) 178void aer_print_error(struct pci_dev *dev, struct aer_err_info *info)
185{ 179{
186 char *errmsg;
187 int err_layer, agent; 180 int err_layer, agent;
188 int id = ((dev->bus->number << 8) | dev->devfn); 181 int id = ((dev->bus->number << 8) | dev->devfn);
189 182
@@ -199,12 +192,7 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info)
199 AER_PR(info, "PCIE Bus Error type\t: %s\n", 192 AER_PR(info, "PCIE Bus Error type\t: %s\n",
200 aer_error_layer[err_layer]); 193 aer_error_layer[err_layer]);
201 194
202 spin_lock(&logbuf_lock); 195 aer_print_error_source(info);
203 errmsg = aer_get_error_source_name(info->severity,
204 info->status,
205 errmsg_buff);
206 AER_PR(info, "%s\t:\n", errmsg);
207 spin_unlock(&logbuf_lock);
208 196
209 agent = AER_GET_AGENT(info->severity, info->status); 197 agent = AER_GET_AGENT(info->severity, info->status);
210 AER_PR(info, "%s\t\t: %04x\n", aer_agent_string[agent], id); 198 AER_PR(info, "%s\t\t: %04x\n", aer_agent_string[agent], id);