Skip to content

Commit

Permalink
Merge branch 'nfc-fixes'
Browse files Browse the repository at this point in the history
Duoming Zhou says:

====================
Replace improper checks and fix bugs in nfc subsystem

The first patch is used to replace improper checks in netlink related
functions of nfc core, the second patch is used to fix bugs in
nfcmrvl driver.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed May 1, 2022
2 parents 47f753c + d270453 commit b669361
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 16 deletions.
2 changes: 1 addition & 1 deletion drivers/nfc/nfcmrvl/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv)
{
struct nci_dev *ndev = priv->ndev;

nci_unregister_device(ndev);
if (priv->ndev->nfc_dev->fw_download_in_progress)
nfcmrvl_fw_dnld_abort(priv);

Expand All @@ -191,7 +192,6 @@ void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv)
if (gpio_is_valid(priv->config.reset_n_io))
gpio_free(priv->config.reset_n_io);

nci_unregister_device(ndev);
nci_free_device(ndev);
kfree(priv);
}
Expand Down
29 changes: 14 additions & 15 deletions net/nfc/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -94,7 +94,7 @@ int nfc_dev_up(struct nfc_dev *dev)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -142,7 +142,7 @@ int nfc_dev_down(struct nfc_dev *dev)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -207,7 +207,7 @@ int nfc_start_poll(struct nfc_dev *dev, u32 im_protocols, u32 tm_protocols)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -246,7 +246,7 @@ int nfc_stop_poll(struct nfc_dev *dev)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -291,7 +291,7 @@ int nfc_dep_link_up(struct nfc_dev *dev, int target_index, u8 comm_mode)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -335,7 +335,7 @@ int nfc_dep_link_down(struct nfc_dev *dev)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -401,7 +401,7 @@ int nfc_activate_target(struct nfc_dev *dev, u32 target_idx, u32 protocol)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -448,7 +448,7 @@ int nfc_deactivate_target(struct nfc_dev *dev, u32 target_idx, u8 mode)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -495,7 +495,7 @@ int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb,

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
kfree_skb(skb);
goto error;
Expand Down Expand Up @@ -552,7 +552,7 @@ int nfc_enable_se(struct nfc_dev *dev, u32 se_idx)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -601,7 +601,7 @@ int nfc_disable_se(struct nfc_dev *dev, u32 se_idx)

device_lock(&dev->dev);

if (!device_is_registered(&dev->dev)) {
if (dev->shutting_down) {
rc = -ENODEV;
goto error;
}
Expand Down Expand Up @@ -1134,6 +1134,7 @@ int nfc_register_device(struct nfc_dev *dev)
dev->rfkill = NULL;
}
}
dev->shutting_down = false;
device_unlock(&dev->dev);

rc = nfc_genl_device_added(dev);
Expand Down Expand Up @@ -1166,12 +1167,10 @@ void nfc_unregister_device(struct nfc_dev *dev)
rfkill_unregister(dev->rfkill);
rfkill_destroy(dev->rfkill);
}
dev->shutting_down = true;
device_unlock(&dev->dev);

if (dev->ops->check_presence) {
device_lock(&dev->dev);
dev->shutting_down = true;
device_unlock(&dev->dev);
del_timer_sync(&dev->check_pres_timer);
cancel_work_sync(&dev->check_pres_work);
}
Expand Down

0 comments on commit b669361

Please sign in to comment.