The branch stable/13 has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=9c410fc7ce116dfabf3ebd246bbfb416699a2a40

commit 9c410fc7ce116dfabf3ebd246bbfb416699a2a40
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2021-03-30 08:46:42 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2021-04-23 11:14:06 +0000

    linuxkpi: drop single-use variable
    
    (cherry picked from commit 8011fb795baa59ba14371d6db5ab661a5db77615)
---
 sys/compat/linuxkpi/common/src/linux_compat.c      |  4 +--
 sys/compat/linuxkpi/common/src/linux_compat.c.orig | 31 ++++++++++++++--------
 2 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c 
b/sys/compat/linuxkpi/common/src/linux_compat.c
index f8b939a5ec16..8fe4f4509571 100644
--- a/sys/compat/linuxkpi/common/src/linux_compat.c
+++ b/sys/compat/linuxkpi/common/src/linux_compat.c
@@ -2224,16 +2224,14 @@ linux_cdev_static_release(struct kobject *kobj)
 {
        struct cdev *cdev;
        struct linux_cdev *ldev;
-       struct kobject *parent;
 
        ldev = container_of(kobj, struct linux_cdev, kobj);
-       parent = kobj->parent;
        cdev = ldev->cdev;
        if (cdev != NULL) {
                destroy_dev(cdev);
                ldev->cdev = NULL;
        }
-       kobject_put(parent);
+       kobject_put(kobj->parent);
 }
 
 void
diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c.orig 
b/sys/compat/linuxkpi/common/src/linux_compat.c.orig
index 71ea7e0844dc..28413c59bb76 100644
--- a/sys/compat/linuxkpi/common/src/linux_compat.c.orig
+++ b/sys/compat/linuxkpi/common/src/linux_compat.c.orig
@@ -717,15 +717,19 @@ linux_get_fop(struct linux_file *filp, const struct 
file_operations **fop,
        ldev = filp->f_cdev;
        *fop = filp->f_op;
        if (ldev != NULL) {
-               for (siref = ldev->siref;;) {
-                       if ((siref & LDEV_SI_DTR) != 0) {
-                               ldev = &dummy_ldev;
-                               siref = ldev->siref;
-                               *fop = ldev->ops;
-                               MPASS((ldev->siref & LDEV_SI_DTR) == 0);
-                       } else if (atomic_fcmpset_int(&ldev->siref, &siref,
-                           siref + LDEV_SI_REF)) {
-                               break;
+               if (ldev->kobj.ktype == &linux_cdev_static_ktype) {
+                       refcount_acquire(&ldev->refs);
+               } else {
+                       for (siref = ldev->siref;;) {
+                               if ((siref & LDEV_SI_DTR) != 0) {
+                                       ldev = &dummy_ldev;
+                                       *fop = ldev->ops;
+                                       siref = ldev->siref;
+                                       MPASS((ldev->siref & LDEV_SI_DTR) == 0);
+                               } else if (atomic_fcmpset_int(&ldev->siref,
+                                   &siref, siref + LDEV_SI_REF)) {
+                                       break;
+                               }
                        }
                }
        }
@@ -738,8 +742,13 @@ linux_drop_fop(struct linux_cdev *ldev)
 
        if (ldev == NULL)
                return;
-       MPASS((ldev->siref & ~LDEV_SI_DTR) != 0);
-       atomic_subtract_int(&ldev->siref, LDEV_SI_REF);
+       if (ldev->kobj.ktype == &linux_cdev_static_ktype) {
+               linux_cdev_deref(ldev);
+       } else {
+               MPASS(ldev->kobj.ktype == &linux_cdev_ktype);
+               MPASS((ldev->siref & ~LDEV_SI_DTR) != 0);
+               atomic_subtract_int(&ldev->siref, LDEV_SI_REF);
+       }
 }
 
 #define        OPW(fp,td,code) ({                      \
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to