Commit 1f2dc7f5 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 5a36f0f3 2a556ce7
...@@ -399,15 +399,15 @@ static int bt_bmc_config_irq(struct bt_bmc *bt_bmc, ...@@ -399,15 +399,15 @@ static int bt_bmc_config_irq(struct bt_bmc *bt_bmc,
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
int rc; int rc;
bt_bmc->irq = platform_get_irq(pdev, 0); bt_bmc->irq = platform_get_irq_optional(pdev, 0);
if (!bt_bmc->irq) if (bt_bmc->irq < 0)
return -ENODEV; return bt_bmc->irq;
rc = devm_request_irq(dev, bt_bmc->irq, bt_bmc_irq, IRQF_SHARED, rc = devm_request_irq(dev, bt_bmc->irq, bt_bmc_irq, IRQF_SHARED,
DEVICE_NAME, bt_bmc); DEVICE_NAME, bt_bmc);
if (rc < 0) { if (rc < 0) {
dev_warn(dev, "Unable to request IRQ %d\n", bt_bmc->irq); dev_warn(dev, "Unable to request IRQ %d\n", bt_bmc->irq);
bt_bmc->irq = 0; bt_bmc->irq = rc;
return rc; return rc;
} }
...@@ -430,9 +430,6 @@ static int bt_bmc_probe(struct platform_device *pdev) ...@@ -430,9 +430,6 @@ static int bt_bmc_probe(struct platform_device *pdev)
struct device *dev; struct device *dev;
int rc; int rc;
if (!pdev || !pdev->dev.of_node)
return -ENODEV;
dev = &pdev->dev; dev = &pdev->dev;
dev_info(dev, "Found bt bmc device\n"); dev_info(dev, "Found bt bmc device\n");
...@@ -477,7 +474,7 @@ static int bt_bmc_probe(struct platform_device *pdev) ...@@ -477,7 +474,7 @@ static int bt_bmc_probe(struct platform_device *pdev)
bt_bmc_config_irq(bt_bmc, 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); dev_info(dev, "Using IRQ %d\n", bt_bmc->irq);
} else { } else {
dev_info(dev, "No IRQ; using timer\n"); dev_info(dev, "No IRQ; using timer\n");
...@@ -503,7 +500,7 @@ static int bt_bmc_remove(struct platform_device *pdev) ...@@ -503,7 +500,7 @@ static int bt_bmc_remove(struct platform_device *pdev)
struct bt_bmc *bt_bmc = dev_get_drvdata(&pdev->dev); struct bt_bmc *bt_bmc = dev_get_drvdata(&pdev->dev);
misc_deregister(&bt_bmc->miscdev); misc_deregister(&bt_bmc->miscdev);
if (!bt_bmc->irq) if (bt_bmc->irq < 0)
del_timer_sync(&bt_bmc->poll_timer); del_timer_sync(&bt_bmc->poll_timer);
return 0; return 0;
} }
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/uuid.h> #include <linux/uuid.h>
#include <linux/nospec.h> #include <linux/nospec.h>
#include <linux/vmalloc.h>
#define IPMI_DRIVER_VERSION "39.2" #define IPMI_DRIVER_VERSION "39.2"
...@@ -1153,7 +1154,7 @@ static void free_user_work(struct work_struct *work) ...@@ -1153,7 +1154,7 @@ static void free_user_work(struct work_struct *work)
remove_work); remove_work);
cleanup_srcu_struct(&user->release_barrier); cleanup_srcu_struct(&user->release_barrier);
kfree(user); vfree(user);
} }
int ipmi_create_user(unsigned int if_num, int ipmi_create_user(unsigned int if_num,
...@@ -1185,7 +1186,7 @@ int ipmi_create_user(unsigned int if_num, ...@@ -1185,7 +1186,7 @@ int ipmi_create_user(unsigned int if_num,
if (rv) if (rv)
return rv; return rv;
new_user = kmalloc(sizeof(*new_user), GFP_KERNEL); new_user = vzalloc(sizeof(*new_user));
if (!new_user) if (!new_user)
return -ENOMEM; return -ENOMEM;
...@@ -1232,7 +1233,7 @@ int ipmi_create_user(unsigned int if_num, ...@@ -1232,7 +1233,7 @@ int ipmi_create_user(unsigned int if_num,
out_kfree: out_kfree:
srcu_read_unlock(&ipmi_interfaces_srcu, index); srcu_read_unlock(&ipmi_interfaces_srcu, index);
kfree(new_user); vfree(new_user);
return rv; return rv;
} }
EXPORT_SYMBOL(ipmi_create_user); EXPORT_SYMBOL(ipmi_create_user);
...@@ -3171,7 +3172,7 @@ static void guid_handler(struct ipmi_smi *intf, struct ipmi_recv_msg *msg) ...@@ -3171,7 +3172,7 @@ static void guid_handler(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
goto out; 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 * Make sure the guid data is available before setting
* dyn_guid_set. * dyn_guid_set.
......
...@@ -393,6 +393,8 @@ static int acpi_ipmi_probe(struct platform_device *pdev) ...@@ -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", dev_info(io.dev, "%pR regsize %d spacing %d irq %d\n",
res, io.regsize, io.regspacing, io.irq); res, io.regsize, io.regspacing, io.irq);
request_module("acpi_ipmi");
return ipmi_si_add_smi(&io); return ipmi_si_add_smi(&io);
err_free: err_free:
......
...@@ -189,8 +189,6 @@ struct ssif_addr_info { ...@@ -189,8 +189,6 @@ struct ssif_addr_info {
struct device *dev; struct device *dev;
struct i2c_client *client; struct i2c_client *client;
struct i2c_client *added_client;
struct mutex clients_mutex; struct mutex clients_mutex;
struct list_head clients; struct list_head clients;
...@@ -1472,6 +1470,7 @@ static bool check_acpi(struct ssif_info *ssif_info, struct device *dev) ...@@ -1472,6 +1470,7 @@ static bool check_acpi(struct ssif_info *ssif_info, struct device *dev)
if (acpi_handle) { if (acpi_handle) {
ssif_info->addr_source = SI_ACPI; ssif_info->addr_source = SI_ACPI;
ssif_info->addr_info.acpi_info.acpi_handle = acpi_handle; ssif_info->addr_info.acpi_info.acpi_handle = acpi_handle;
request_module("acpi_ipmi");
return true; return true;
} }
#endif #endif
...@@ -1940,21 +1939,6 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) ...@@ -1940,21 +1939,6 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
goto out; 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, static int new_ssif_client(int addr, char *adapter_name,
int debug, int slave_addr, int debug, int slave_addr,
enum ipmi_addr_src addr_src, enum ipmi_addr_src addr_src,
...@@ -1998,9 +1982,7 @@ static int new_ssif_client(int addr, char *adapter_name, ...@@ -1998,9 +1982,7 @@ static int new_ssif_client(int addr, char *adapter_name,
list_add_tail(&addr_info->link, &ssif_infos); list_add_tail(&addr_info->link, &ssif_infos);
if (initialized) /* Address list will get it */
i2c_for_each_dev(addr_info, ssif_adapter_handler);
/* Otherwise address list will get it */
out_unlock: out_unlock:
mutex_unlock(&ssif_infos_mutex); mutex_unlock(&ssif_infos_mutex);
...@@ -2120,8 +2102,6 @@ static int ssif_platform_remove(struct platform_device *dev) ...@@ -2120,8 +2102,6 @@ static int ssif_platform_remove(struct platform_device *dev)
return 0; return 0;
mutex_lock(&ssif_infos_mutex); mutex_lock(&ssif_infos_mutex);
i2c_unregister_device(addr_info->added_client);
list_del(&addr_info->link); list_del(&addr_info->link);
kfree(addr_info); kfree(addr_info);
mutex_unlock(&ssif_infos_mutex); mutex_unlock(&ssif_infos_mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment