IPMI update for 5.8
A few small fixes for things, nothing earth shattering. -corey -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE/Q1c5nzg9ZpmiCaGYfOMkJGb/4EFAl7ZQ+UACgkQYfOMkJGb /4GJYg//dOy9/1GQ2jKuOGuS9K9dJdDVrnazR0tlHhBfQnhaNZRE6lWhwfpQSd/3 D1hHD7+DOU0ytFyx3lJN6bSA7jW+yw5ZRtDzATFZOKuPDWXaO+zsB+e/L+z2z2S7 Gw9RiJ6FzzEv3T33K6JoKU4Db4nGSCUbg5UK9gOrzPr4MFopAU1AiDLThPjsrrao Snt9Cyd1lLGfJuREkMWKYutsCYqB+BeMSfIe8HC+0vKxGmFX8T60A+bNtjfAtPx+ pQ4BkmaV/p9K5BSI3O4Io60qj4VTH+7TUKszwAOy8zjC+WG0mkLMFJgjO2uLiBbo UvkRMbxRB7v/VEDOjpS8z5cSVVBZ2GotnBFoMDgLbQIbu6R5Dz3gMgFRY3kx3wqe eHWAOh/XFXGul4h76rvTp8RDSoe4DXWbLLemsbWZrYq0tbyKyyhCgIcP9+Qh/8yC CrKVeVF0RvHpKpDY7uT5KFQ/PS7GFf5SyK9YdbQqlRS66rn5JCE3kAW+6aeUF4Vz ZdArNIEEZMZxwZr4wqHTF9ZL7C4+zw5Y3q7HKUAkXK9GRGdp1BYUvgzPtLKz7FWM 9JvuNRO4RhMWk0a0BkvwxlHl2odPe9mQiOjMB4ld/msukmSlileKn58JHHxAYlwK Qotqfaq5Iq6UKujdBV95Z6SOXDpjG/0QY9zrAziSTClm7tQML14= =nuZ5 -----END PGP SIGNATURE----- Merge tag 'for-linus-5.8-1' of git://github.com/cminyard/linux-ipmi Pull IPMI updates from Corey Minyard: "A few small fixes for things, nothing earth shattering" * tag 'for-linus-5.8-1' of git://github.com/cminyard/linux-ipmi: ipmi:ssif: Remove dynamic platform device handing Try to load acpi_ipmi when an SSIF ACPI IPMI interface is added ipmi_si: Load acpi_ipmi when ACPI IPMI interface added ipmi:bt-bmc: Fix error handling and status check ipmi: Replace guid_copy() with import_guid() where it makes sense ipmi: use vzalloc instead of kmalloc for user creation ipmi:bt-bmc: Fix some format issue of the code ipmi:bt-bmc: Avoid unnecessary check
This commit is contained in:
Коммит
1f2dc7f5b6
|
@ -399,15 +399,15 @@ static int bt_bmc_config_irq(struct bt_bmc *bt_bmc,
|
|||
struct device *dev = &pdev->dev;
|
||||
int rc;
|
||||
|
||||
bt_bmc->irq = platform_get_irq(pdev, 0);
|
||||
if (!bt_bmc->irq)
|
||||
return -ENODEV;
|
||||
bt_bmc->irq = platform_get_irq_optional(pdev, 0);
|
||||
if (bt_bmc->irq < 0)
|
||||
return bt_bmc->irq;
|
||||
|
||||
rc = devm_request_irq(dev, bt_bmc->irq, bt_bmc_irq, IRQF_SHARED,
|
||||
DEVICE_NAME, bt_bmc);
|
||||
if (rc < 0) {
|
||||
dev_warn(dev, "Unable to request IRQ %d\n", bt_bmc->irq);
|
||||
bt_bmc->irq = 0;
|
||||
bt_bmc->irq = rc;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -430,9 +430,6 @@ static int bt_bmc_probe(struct platform_device *pdev)
|
|||
struct device *dev;
|
||||
int rc;
|
||||
|
||||
if (!pdev || !pdev->dev.of_node)
|
||||
return -ENODEV;
|
||||
|
||||
dev = &pdev->dev;
|
||||
dev_info(dev, "Found bt bmc device\n");
|
||||
|
||||
|
@ -466,9 +463,9 @@ static int bt_bmc_probe(struct platform_device *pdev)
|
|||
init_waitqueue_head(&bt_bmc->queue);
|
||||
|
||||
bt_bmc->miscdev.minor = MISC_DYNAMIC_MINOR,
|
||||
bt_bmc->miscdev.name = DEVICE_NAME,
|
||||
bt_bmc->miscdev.fops = &bt_bmc_fops,
|
||||
bt_bmc->miscdev.parent = dev;
|
||||
bt_bmc->miscdev.name = DEVICE_NAME,
|
||||
bt_bmc->miscdev.fops = &bt_bmc_fops,
|
||||
bt_bmc->miscdev.parent = dev;
|
||||
rc = misc_register(&bt_bmc->miscdev);
|
||||
if (rc) {
|
||||
dev_err(dev, "Unable to register misc device\n");
|
||||
|
@ -477,7 +474,7 @@ static int bt_bmc_probe(struct platform_device *pdev)
|
|||
|
||||
bt_bmc_config_irq(bt_bmc, pdev);
|
||||
|
||||
if (bt_bmc->irq) {
|
||||
if (bt_bmc->irq >= 0) {
|
||||
dev_info(dev, "Using IRQ %d\n", bt_bmc->irq);
|
||||
} else {
|
||||
dev_info(dev, "No IRQ; using timer\n");
|
||||
|
@ -503,7 +500,7 @@ static int bt_bmc_remove(struct platform_device *pdev)
|
|||
struct bt_bmc *bt_bmc = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
misc_deregister(&bt_bmc->miscdev);
|
||||
if (!bt_bmc->irq)
|
||||
if (bt_bmc->irq < 0)
|
||||
del_timer_sync(&bt_bmc->poll_timer);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include <linux/workqueue.h>
|
||||
#include <linux/uuid.h>
|
||||
#include <linux/nospec.h>
|
||||
#include <linux/vmalloc.h>
|
||||
|
||||
#define IPMI_DRIVER_VERSION "39.2"
|
||||
|
||||
|
@ -1153,7 +1154,7 @@ static void free_user_work(struct work_struct *work)
|
|||
remove_work);
|
||||
|
||||
cleanup_srcu_struct(&user->release_barrier);
|
||||
kfree(user);
|
||||
vfree(user);
|
||||
}
|
||||
|
||||
int ipmi_create_user(unsigned int if_num,
|
||||
|
@ -1185,7 +1186,7 @@ int ipmi_create_user(unsigned int if_num,
|
|||
if (rv)
|
||||
return rv;
|
||||
|
||||
new_user = kmalloc(sizeof(*new_user), GFP_KERNEL);
|
||||
new_user = vzalloc(sizeof(*new_user));
|
||||
if (!new_user)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -1232,7 +1233,7 @@ int ipmi_create_user(unsigned int if_num,
|
|||
|
||||
out_kfree:
|
||||
srcu_read_unlock(&ipmi_interfaces_srcu, index);
|
||||
kfree(new_user);
|
||||
vfree(new_user);
|
||||
return rv;
|
||||
}
|
||||
EXPORT_SYMBOL(ipmi_create_user);
|
||||
|
@ -3171,7 +3172,7 @@ static void guid_handler(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
|
|||
goto out;
|
||||
}
|
||||
|
||||
guid_copy(&bmc->fetch_guid, (guid_t *)(msg->msg.data + 1));
|
||||
import_guid(&bmc->fetch_guid, msg->msg.data + 1);
|
||||
/*
|
||||
* Make sure the guid data is available before setting
|
||||
* dyn_guid_set.
|
||||
|
|
|
@ -393,6 +393,8 @@ static int acpi_ipmi_probe(struct platform_device *pdev)
|
|||
dev_info(io.dev, "%pR regsize %d spacing %d irq %d\n",
|
||||
res, io.regsize, io.regspacing, io.irq);
|
||||
|
||||
request_module("acpi_ipmi");
|
||||
|
||||
return ipmi_si_add_smi(&io);
|
||||
|
||||
err_free:
|
||||
|
|
|
@ -189,8 +189,6 @@ struct ssif_addr_info {
|
|||
struct device *dev;
|
||||
struct i2c_client *client;
|
||||
|
||||
struct i2c_client *added_client;
|
||||
|
||||
struct mutex clients_mutex;
|
||||
struct list_head clients;
|
||||
|
||||
|
@ -1472,6 +1470,7 @@ static bool check_acpi(struct ssif_info *ssif_info, struct device *dev)
|
|||
if (acpi_handle) {
|
||||
ssif_info->addr_source = SI_ACPI;
|
||||
ssif_info->addr_info.acpi_info.acpi_handle = acpi_handle;
|
||||
request_module("acpi_ipmi");
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
@ -1940,21 +1939,6 @@ out_remove_attr:
|
|||
goto out;
|
||||
}
|
||||
|
||||
static int ssif_adapter_handler(struct device *adev, void *opaque)
|
||||
{
|
||||
struct ssif_addr_info *addr_info = opaque;
|
||||
|
||||
if (adev->type != &i2c_adapter_type)
|
||||
return 0;
|
||||
|
||||
addr_info->added_client = i2c_new_client_device(to_i2c_adapter(adev),
|
||||
&addr_info->binfo);
|
||||
|
||||
if (!addr_info->adapter_name)
|
||||
return 1; /* Only try the first I2C adapter by default. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int new_ssif_client(int addr, char *adapter_name,
|
||||
int debug, int slave_addr,
|
||||
enum ipmi_addr_src addr_src,
|
||||
|
@ -1998,9 +1982,7 @@ static int new_ssif_client(int addr, char *adapter_name,
|
|||
|
||||
list_add_tail(&addr_info->link, &ssif_infos);
|
||||
|
||||
if (initialized)
|
||||
i2c_for_each_dev(addr_info, ssif_adapter_handler);
|
||||
/* Otherwise address list will get it */
|
||||
/* Address list will get it */
|
||||
|
||||
out_unlock:
|
||||
mutex_unlock(&ssif_infos_mutex);
|
||||
|
@ -2120,8 +2102,6 @@ static int ssif_platform_remove(struct platform_device *dev)
|
|||
return 0;
|
||||
|
||||
mutex_lock(&ssif_infos_mutex);
|
||||
i2c_unregister_device(addr_info->added_client);
|
||||
|
||||
list_del(&addr_info->link);
|
||||
kfree(addr_info);
|
||||
mutex_unlock(&ssif_infos_mutex);
|
||||
|
|
Загрузка…
Ссылка в новой задаче