Skip to content

Commit 264a2c5

Browse files
cris-masudeep-holla
authored andcommitted
firmware: arm_scmi: Simplify scmi_devm_notifier_unregister
Unregistering SCMI notifications using the managed devres interface can be done providing as a reference simply the previously successfully registered notification block since it could have been registered only on one kernel notification_chain: drop any reference to SCMI protocol, events and sources. Devres internal helpers can search for the provided notification block reference and, once found, the associated devres object will already provide the above SCMI references for the event. Signed-off-by: Cristian Marussi <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Sudeep Holla <[email protected]>
1 parent 5076ab6 commit 264a2c5

File tree

2 files changed

+4
-28
lines changed

2 files changed

+4
-28
lines changed

drivers/firmware/arm_scmi/notify.c

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,28 +1513,19 @@ static int scmi_devm_notifier_register(struct scmi_device *sdev,
15131513
static int scmi_devm_notifier_match(struct device *dev, void *res, void *data)
15141514
{
15151515
struct scmi_notifier_devres *dres = res;
1516-
struct scmi_notifier_devres *xres = data;
1516+
struct notifier_block *nb = data;
15171517

1518-
if (WARN_ON(!dres || !xres))
1518+
if (WARN_ON(!dres || !nb))
15191519
return 0;
15201520

1521-
return dres->proto_id == xres->proto_id &&
1522-
dres->evt_id == xres->evt_id &&
1523-
dres->nb == xres->nb &&
1524-
((!dres->src_id && !xres->src_id) ||
1525-
(dres->src_id && xres->src_id &&
1526-
dres->__src_id == xres->__src_id));
1521+
return dres->nb == nb;
15271522
}
15281523

15291524
/**
15301525
* scmi_devm_notifier_unregister() - Managed un-registration of a
15311526
* notifier_block for an event
15321527
* @sdev: A reference to an scmi_device whose embedded struct device is to
15331528
* be used for devres accounting.
1534-
* @proto_id: Protocol ID
1535-
* @evt_id: Event ID
1536-
* @src_id: Source ID, when NULL register for events coming form ALL possible
1537-
* sources
15381529
* @nb: A standard notifier block to register for the specified event
15391530
*
15401531
* Generic devres managed helper to explicitly un-register a notifier_block
@@ -1544,25 +1535,12 @@ static int scmi_devm_notifier_match(struct device *dev, void *res, void *data)
15441535
* Return: 0 on Success
15451536
*/
15461537
static int scmi_devm_notifier_unregister(struct scmi_device *sdev,
1547-
u8 proto_id, u8 evt_id,
1548-
const u32 *src_id,
15491538
struct notifier_block *nb)
15501539
{
15511540
int ret;
1552-
struct scmi_notifier_devres dres;
1553-
1554-
dres.handle = sdev->handle;
1555-
dres.proto_id = proto_id;
1556-
dres.evt_id = evt_id;
1557-
if (src_id) {
1558-
dres.__src_id = *src_id;
1559-
dres.src_id = &dres.__src_id;
1560-
} else {
1561-
dres.src_id = NULL;
1562-
}
15631541

15641542
ret = devres_release(&sdev->dev, scmi_devm_release_notifier,
1565-
scmi_devm_notifier_match, &dres);
1543+
scmi_devm_notifier_match, nb);
15661544

15671545
WARN_ON(ret);
15681546

include/linux/scmi_protocol.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -783,8 +783,6 @@ struct scmi_notify_ops {
783783
const u32 *src_id,
784784
struct notifier_block *nb);
785785
int (*devm_event_notifier_unregister)(struct scmi_device *sdev,
786-
u8 proto_id, u8 evt_id,
787-
const u32 *src_id,
788786
struct notifier_block *nb);
789787
int (*event_notifier_register)(const struct scmi_handle *handle,
790788
u8 proto_id, u8 evt_id,

0 commit comments

Comments
 (0)