mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
IB/{hfi1, qib}: Fix a concurrency issue with device name in logging
The get_unit_name() function crafts a string based on the device name and the device unit number. It then stores this in a static variable. This has concurrency issues as can be seen with this log: hfi1 0000:02:00.0: hfi1_1: read_idle_message: read idle message 0x203 hfi1 0000:01:00.0: hfi1_1: read_idle_message: read idle message 0x203 The PCI device ID (0000:02:00.0 vs. 0000:01:00.0) is correct for the message, but the device string hfi1_1 is incorrect (it should be hfi1_0 for the second log message). Remove get_unit_name() function. Instead, use the rvt accessor rvt_get_ibdev_name() to get the IB name string. Clean up any hfi1_early_xx calls that can now use the new path. QIB has the same (qib_get_unit_name()) issue. Updating as necessary. Remove qib_get_unit_name() function. Update log message that has redundant device name. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
db9a2c6f9b
commit
11f0e89710
6 changed files with 18 additions and 35 deletions
|
@ -14920,9 +14920,8 @@ struct hfi1_devdata *hfi1_init_dd(struct pci_dev *pdev,
|
||||||
|
|
||||||
if (num_vls < HFI1_MIN_VLS_SUPPORTED ||
|
if (num_vls < HFI1_MIN_VLS_SUPPORTED ||
|
||||||
num_vls > HFI1_MAX_VLS_SUPPORTED) {
|
num_vls > HFI1_MAX_VLS_SUPPORTED) {
|
||||||
hfi1_early_err(&pdev->dev,
|
dd_dev_err(dd, "Invalid num_vls %u, using %u VLs\n",
|
||||||
"Invalid num_vls %u, using %u VLs\n",
|
num_vls, HFI1_MAX_VLS_SUPPORTED);
|
||||||
num_vls, HFI1_MAX_VLS_SUPPORTED);
|
|
||||||
num_vls = HFI1_MAX_VLS_SUPPORTED;
|
num_vls = HFI1_MAX_VLS_SUPPORTED;
|
||||||
}
|
}
|
||||||
ppd->vls_supported = num_vls;
|
ppd->vls_supported = num_vls;
|
||||||
|
|
|
@ -159,14 +159,6 @@ static int hfi1_caps_get(char *buffer, const struct kernel_param *kp)
|
||||||
return scnprintf(buffer, PAGE_SIZE, "0x%lx", cap_mask);
|
return scnprintf(buffer, PAGE_SIZE, "0x%lx", cap_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *get_unit_name(int unit)
|
|
||||||
{
|
|
||||||
static char iname[16];
|
|
||||||
|
|
||||||
snprintf(iname, sizeof(iname), DRIVER_NAME "_%u", unit);
|
|
||||||
return iname;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct pci_dev *get_pci_dev(struct rvt_dev_info *rdi)
|
struct pci_dev *get_pci_dev(struct rvt_dev_info *rdi)
|
||||||
{
|
{
|
||||||
struct hfi1_ibdev *ibdev = container_of(rdi, struct hfi1_ibdev, rdi);
|
struct hfi1_ibdev *ibdev = container_of(rdi, struct hfi1_ibdev, rdi);
|
||||||
|
|
|
@ -1971,7 +1971,6 @@ int get_platform_config_field(struct hfi1_devdata *dd,
|
||||||
table_type, int table_index, int field_index,
|
table_type, int table_index, int field_index,
|
||||||
u32 *data, u32 len);
|
u32 *data, u32 len);
|
||||||
|
|
||||||
const char *get_unit_name(int unit);
|
|
||||||
struct pci_dev *get_pci_dev(struct rvt_dev_info *rdi);
|
struct pci_dev *get_pci_dev(struct rvt_dev_info *rdi);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2121,39 +2120,42 @@ static inline u64 hfi1_pkt_base_sdma_integrity(struct hfi1_devdata *dd)
|
||||||
|
|
||||||
#define dd_dev_emerg(dd, fmt, ...) \
|
#define dd_dev_emerg(dd, fmt, ...) \
|
||||||
dev_emerg(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_emerg(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), ##__VA_ARGS__)
|
||||||
|
|
||||||
#define dd_dev_err(dd, fmt, ...) \
|
#define dd_dev_err(dd, fmt, ...) \
|
||||||
dev_err(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_err(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), ##__VA_ARGS__)
|
||||||
|
|
||||||
#define dd_dev_err_ratelimited(dd, fmt, ...) \
|
#define dd_dev_err_ratelimited(dd, fmt, ...) \
|
||||||
dev_err_ratelimited(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_err_ratelimited(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), \
|
||||||
|
##__VA_ARGS__)
|
||||||
|
|
||||||
#define dd_dev_warn(dd, fmt, ...) \
|
#define dd_dev_warn(dd, fmt, ...) \
|
||||||
dev_warn(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_warn(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), ##__VA_ARGS__)
|
||||||
|
|
||||||
#define dd_dev_warn_ratelimited(dd, fmt, ...) \
|
#define dd_dev_warn_ratelimited(dd, fmt, ...) \
|
||||||
dev_warn_ratelimited(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_warn_ratelimited(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), \
|
||||||
|
##__VA_ARGS__)
|
||||||
|
|
||||||
#define dd_dev_info(dd, fmt, ...) \
|
#define dd_dev_info(dd, fmt, ...) \
|
||||||
dev_info(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_info(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), ##__VA_ARGS__)
|
||||||
|
|
||||||
#define dd_dev_info_ratelimited(dd, fmt, ...) \
|
#define dd_dev_info_ratelimited(dd, fmt, ...) \
|
||||||
dev_info_ratelimited(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_info_ratelimited(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), \
|
||||||
|
##__VA_ARGS__)
|
||||||
|
|
||||||
#define dd_dev_dbg(dd, fmt, ...) \
|
#define dd_dev_dbg(dd, fmt, ...) \
|
||||||
dev_dbg(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_dbg(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), ##__VA_ARGS__)
|
||||||
|
|
||||||
#define hfi1_dev_porterr(dd, port, fmt, ...) \
|
#define hfi1_dev_porterr(dd, port, fmt, ...) \
|
||||||
dev_err(&(dd)->pcidev->dev, "%s: port %u: " fmt, \
|
dev_err(&(dd)->pcidev->dev, "%s: port %u: " fmt, \
|
||||||
get_unit_name((dd)->unit), (port), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), (port), ##__VA_ARGS__)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* this is used for formatting hw error messages...
|
* this is used for formatting hw error messages...
|
||||||
|
|
|
@ -1428,7 +1428,6 @@ u64 qib_sps_ints(void);
|
||||||
*/
|
*/
|
||||||
dma_addr_t qib_map_page(struct pci_dev *, struct page *, unsigned long,
|
dma_addr_t qib_map_page(struct pci_dev *, struct page *, unsigned long,
|
||||||
size_t, int);
|
size_t, int);
|
||||||
const char *qib_get_unit_name(int unit);
|
|
||||||
struct pci_dev *qib_get_pci_dev(struct rvt_dev_info *rdi);
|
struct pci_dev *qib_get_pci_dev(struct rvt_dev_info *rdi);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1487,15 +1486,15 @@ extern struct mutex qib_mutex;
|
||||||
|
|
||||||
#define qib_dev_err(dd, fmt, ...) \
|
#define qib_dev_err(dd, fmt, ...) \
|
||||||
dev_err(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_err(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
qib_get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), ##__VA_ARGS__)
|
||||||
|
|
||||||
#define qib_dev_warn(dd, fmt, ...) \
|
#define qib_dev_warn(dd, fmt, ...) \
|
||||||
dev_warn(&(dd)->pcidev->dev, "%s: " fmt, \
|
dev_warn(&(dd)->pcidev->dev, "%s: " fmt, \
|
||||||
qib_get_unit_name((dd)->unit), ##__VA_ARGS__)
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), ##__VA_ARGS__)
|
||||||
|
|
||||||
#define qib_dev_porterr(dd, port, fmt, ...) \
|
#define qib_dev_porterr(dd, port, fmt, ...) \
|
||||||
dev_err(&(dd)->pcidev->dev, "%s: IB%u:%u " fmt, \
|
dev_err(&(dd)->pcidev->dev, "%s: IB%u:%u " fmt, \
|
||||||
qib_get_unit_name((dd)->unit), (dd)->unit, (port), \
|
rvt_get_ibdev_name(&(dd)->verbs_dev.rdi), (dd)->unit, (port), \
|
||||||
##__VA_ARGS__)
|
##__VA_ARGS__)
|
||||||
|
|
||||||
#define qib_devinfo(pcidev, fmt, ...) \
|
#define qib_devinfo(pcidev, fmt, ...) \
|
||||||
|
|
|
@ -81,14 +81,6 @@ MODULE_DESCRIPTION("Intel IB driver");
|
||||||
|
|
||||||
struct qlogic_ib_stats qib_stats;
|
struct qlogic_ib_stats qib_stats;
|
||||||
|
|
||||||
const char *qib_get_unit_name(int unit)
|
|
||||||
{
|
|
||||||
static char iname[16];
|
|
||||||
|
|
||||||
snprintf(iname, sizeof(iname), "infinipath%u", unit);
|
|
||||||
return iname;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct pci_dev *qib_get_pci_dev(struct rvt_dev_info *rdi)
|
struct pci_dev *qib_get_pci_dev(struct rvt_dev_info *rdi)
|
||||||
{
|
{
|
||||||
struct qib_ibdev *ibdev = container_of(rdi, struct qib_ibdev, rdi);
|
struct qib_ibdev *ibdev = container_of(rdi, struct qib_ibdev, rdi);
|
||||||
|
|
|
@ -163,8 +163,7 @@ void qib_get_eeprom_info(struct qib_devdata *dd)
|
||||||
if (bguid[6] == 0xff) {
|
if (bguid[6] == 0xff) {
|
||||||
if (bguid[5] == 0xff) {
|
if (bguid[5] == 0xff) {
|
||||||
qib_dev_err(dd,
|
qib_dev_err(dd,
|
||||||
"Can't set %s GUID from base, wraps to OUI!\n",
|
"Can't set GUID from base, wraps to OUI!\n");
|
||||||
qib_get_unit_name(t));
|
|
||||||
dd->base_guid = 0;
|
dd->base_guid = 0;
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue