Skip to content

Commit 39d3fb4

Browse files
committed
ipmi: Always fetch the guid through ipmi_get_device_id()
This is in preparation for making ipmi_get_device_id() dynamically return the guid and device id. Signed-off-by: Corey Minyard <[email protected]>
1 parent 1e5058e commit 39d3fb4

File tree

1 file changed

+65
-28
lines changed

1 file changed

+65
-28
lines changed

drivers/char/ipmi/ipmi_msghandler.c

Lines changed: 65 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -273,14 +273,15 @@ struct bmc_device {
273273
int dyn_id_set;
274274
unsigned long dyn_id_expiry;
275275
struct mutex dyn_mutex; /* protects id & dyn* fields */
276-
unsigned char guid[16];
276+
u8 guid[16];
277277
int guid_set;
278278
struct kref usecount;
279279
};
280280
#define to_bmc_device(x) container_of((x), struct bmc_device, pdev.dev)
281281

282282
static int bmc_get_device_id(ipmi_smi_t intf, struct bmc_device *bmc,
283-
struct ipmi_device_id *id);
283+
struct ipmi_device_id *id,
284+
bool *guid_set, u8 *guid);
284285

285286
/*
286287
* Various statistics for IPMI, these index stats[] in the ipmi_smi
@@ -1220,7 +1221,7 @@ int ipmi_get_version(ipmi_user_t user,
12201221
struct ipmi_device_id id;
12211222
int rv;
12221223

1223-
rv = bmc_get_device_id(user->intf, NULL, &id);
1224+
rv = bmc_get_device_id(user->intf, NULL, &id, NULL, NULL);
12241225
if (rv)
12251226
return rv;
12261227

@@ -2193,7 +2194,8 @@ static int __get_device_id(ipmi_smi_t intf, struct bmc_device *bmc)
21932194
* this will always return good data;
21942195
*/
21952196
static int bmc_get_device_id(ipmi_smi_t intf, struct bmc_device *bmc,
2196-
struct ipmi_device_id *id)
2197+
struct ipmi_device_id *id,
2198+
bool *guid_set, u8 *guid)
21972199
{
21982200
int rv = 0;
21992201
int prev_dyn_id_set;
@@ -2247,6 +2249,12 @@ static int bmc_get_device_id(ipmi_smi_t intf, struct bmc_device *bmc,
22472249
if (id)
22482250
*id = bmc->id;
22492251

2252+
if (guid_set)
2253+
*guid_set = bmc->guid_set;
2254+
2255+
if (guid && bmc->guid_set)
2256+
memcpy(guid, bmc->guid, 16);
2257+
22502258
mutex_unlock(&bmc->dyn_mutex);
22512259
mutex_unlock(&intf->bmc_reg_mutex);
22522260

@@ -2286,7 +2294,7 @@ static int smi_version_proc_show(struct seq_file *m, void *v)
22862294
struct ipmi_device_id id;
22872295
int rv;
22882296

2289-
rv = bmc_get_device_id(intf, NULL, &id);
2297+
rv = bmc_get_device_id(intf, NULL, &id, NULL, NULL);
22902298
if (rv)
22912299
return rv;
22922300

@@ -2478,7 +2486,7 @@ static ssize_t device_id_show(struct device *dev,
24782486
struct ipmi_device_id id;
24792487
int rv;
24802488

2481-
rv = bmc_get_device_id(NULL, bmc, &id);
2489+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
24822490
if (rv)
24832491
return rv;
24842492

@@ -2494,7 +2502,7 @@ static ssize_t provides_device_sdrs_show(struct device *dev,
24942502
struct ipmi_device_id id;
24952503
int rv;
24962504

2497-
rv = bmc_get_device_id(NULL, bmc, &id);
2505+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
24982506
if (rv)
24992507
return rv;
25002508

@@ -2510,7 +2518,7 @@ static ssize_t revision_show(struct device *dev, struct device_attribute *attr,
25102518
struct ipmi_device_id id;
25112519
int rv;
25122520

2513-
rv = bmc_get_device_id(NULL, bmc, &id);
2521+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
25142522
if (rv)
25152523
return rv;
25162524

@@ -2526,7 +2534,7 @@ static ssize_t firmware_revision_show(struct device *dev,
25262534
struct ipmi_device_id id;
25272535
int rv;
25282536

2529-
rv = bmc_get_device_id(NULL, bmc, &id);
2537+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
25302538
if (rv)
25312539
return rv;
25322540

@@ -2543,7 +2551,7 @@ static ssize_t ipmi_version_show(struct device *dev,
25432551
struct ipmi_device_id id;
25442552
int rv;
25452553

2546-
rv = bmc_get_device_id(NULL, bmc, &id);
2554+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
25472555
if (rv)
25482556
return rv;
25492557

@@ -2561,7 +2569,7 @@ static ssize_t add_dev_support_show(struct device *dev,
25612569
struct ipmi_device_id id;
25622570
int rv;
25632571

2564-
rv = bmc_get_device_id(NULL, bmc, &id);
2572+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
25652573
if (rv)
25662574
return rv;
25672575

@@ -2578,7 +2586,7 @@ static ssize_t manufacturer_id_show(struct device *dev,
25782586
struct ipmi_device_id id;
25792587
int rv;
25802588

2581-
rv = bmc_get_device_id(NULL, bmc, &id);
2589+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
25822590
if (rv)
25832591
return rv;
25842592

@@ -2594,7 +2602,7 @@ static ssize_t product_id_show(struct device *dev,
25942602
struct ipmi_device_id id;
25952603
int rv;
25962604

2597-
rv = bmc_get_device_id(NULL, bmc, &id);
2605+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
25982606
if (rv)
25992607
return rv;
26002608

@@ -2610,7 +2618,7 @@ static ssize_t aux_firmware_rev_show(struct device *dev,
26102618
struct ipmi_device_id id;
26112619
int rv;
26122620

2613-
rv = bmc_get_device_id(NULL, bmc, &id);
2621+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
26142622
if (rv)
26152623
return rv;
26162624

@@ -2626,13 +2634,22 @@ static ssize_t guid_show(struct device *dev, struct device_attribute *attr,
26262634
char *buf)
26272635
{
26282636
struct bmc_device *bmc = to_bmc_device(dev);
2637+
bool guid_set;
2638+
u8 guid[16];
2639+
int rv;
2640+
2641+
rv = bmc_get_device_id(NULL, bmc, NULL, &guid_set, guid);
2642+
if (rv)
2643+
return rv;
2644+
if (!guid_set)
2645+
return -ENOENT;
26292646

26302647
return snprintf(buf, 100,
2631-
"%2.2x%2.2x%2.2x%2.2x-%2.2x%2.2x-%2.2x%2.2x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n",
2632-
bmc->guid[3], bmc->guid[2], bmc->guid[1], bmc->guid[0],
2633-
bmc->guid[5], bmc->guid[4], bmc->guid[7], bmc->guid[6],
2634-
bmc->guid[8], bmc->guid[9], bmc->guid[10], bmc->guid[11],
2635-
bmc->guid[12], bmc->guid[13], bmc->guid[14], bmc->guid[15]);
2648+
"%2.2x%2.2x%2.2x%2.2x-%2.2x%2.2x-%2.2x%2.2x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n",
2649+
guid[3], guid[2], guid[1], guid[0],
2650+
guid[5], guid[4], guid[7], guid[6],
2651+
guid[8], guid[9], guid[10], guid[11],
2652+
guid[12], guid[13], guid[14], guid[15]);
26362653
}
26372654
static DEVICE_ATTR(guid, S_IRUGO, guid_show, NULL);
26382655

@@ -2656,15 +2673,20 @@ static umode_t bmc_dev_attr_is_visible(struct kobject *kobj,
26562673
struct device *dev = kobj_to_dev(kobj);
26572674
struct bmc_device *bmc = to_bmc_device(dev);
26582675
umode_t mode = attr->mode;
2659-
struct ipmi_device_id id;
26602676
int rv;
26612677

26622678
if (attr == &dev_attr_aux_firmware_revision.attr) {
2663-
rv = bmc_get_device_id(NULL, bmc, &id);
2679+
struct ipmi_device_id id;
2680+
2681+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
26642682
return (!rv && id.aux_firmware_revision_set) ? mode : 0;
26652683
}
2666-
if (attr == &dev_attr_guid.attr)
2667-
return bmc->guid_set ? mode : 0;
2684+
if (attr == &dev_attr_guid.attr) {
2685+
bool guid_set;
2686+
2687+
rv = bmc_get_device_id(NULL, bmc, NULL, &guid_set, NULL);
2688+
return (!rv && guid_set) ? mode : 0;
2689+
}
26682690
return mode;
26692691
}
26702692

@@ -2685,11 +2707,20 @@ static const struct device_type bmc_device_type = {
26852707
static int __find_bmc_guid(struct device *dev, void *data)
26862708
{
26872709
unsigned char *id = data;
2710+
struct bmc_device *bmc;
2711+
bool guid_set;
2712+
u8 guid[16];
2713+
int rv;
26882714

26892715
if (dev->type != &bmc_device_type)
26902716
return 0;
26912717

2692-
return memcmp(to_bmc_device(dev)->guid, id, 16) == 0;
2718+
bmc = to_bmc_device(dev);
2719+
rv = bmc_get_device_id(NULL, bmc, NULL, &guid_set, guid);
2720+
if (rv || !guid_set)
2721+
return 0;
2722+
2723+
return memcmp(guid, id, 16) == 0;
26932724
}
26942725

26952726
/*
@@ -2718,15 +2749,21 @@ struct prod_dev_id {
27182749

27192750
static int __find_bmc_prod_dev_id(struct device *dev, void *data)
27202751
{
2721-
struct prod_dev_id *id = data;
2752+
struct prod_dev_id *cid = data;
27222753
struct bmc_device *bmc;
2754+
struct ipmi_device_id id;
2755+
int rv;
27232756

27242757
if (dev->type != &bmc_device_type)
27252758
return 0;
27262759

27272760
bmc = to_bmc_device(dev);
2728-
return (bmc->id.product_id == id->product_id
2729-
&& bmc->id.device_id == id->device_id);
2761+
rv = bmc_get_device_id(NULL, bmc, &id, NULL, NULL);
2762+
if (rv)
2763+
return 0;
2764+
2765+
return (id.product_id == cid->product_id
2766+
&& id.device_id == cid->device_id);
27302767
}
27312768

27322769
/*
@@ -3219,7 +3256,7 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
32193256

32203257
get_guid(intf);
32213258

3222-
rv = bmc_get_device_id(intf, NULL, &id);
3259+
rv = bmc_get_device_id(intf, NULL, &id, NULL, NULL);
32233260
if (rv) {
32243261
dev_err(si_dev, "Unable to get the device id: %d\n", rv);
32253262
goto out;

0 commit comments

Comments
 (0)