Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Nov 2011 12:56:29 -0700
From:      Navdeep Parhar <nparhar@gmail.com>
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   incorrect parent refcounting in subr_firmware.c?
Message-ID:  <CAPFoGT9bLzAStkUnSfsBm0F6gmGuCM6kQRHQxa%2Bbsah4mQvQVw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--0016364183ad2f5ff804b0c5de25
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

I built a KLD with multiple firmware images, as shown here:

KMOD=3Dfoo
FIRMWS=3D foo.bin:foo:1.0.0.0
FIRMWS+=3Dbar.bin:bar:1.0.0.0
FIRMWS+=3D ...
.include <bsd.kmod.mk>

"foo" is the parent firmware and a firmware_get(foo) can autoload the
KLD. =A0"bar" and the rest are available only if the KLD is loaded (by
whatever means). =A0This is reasonable and works as expected. =A0But if I
just get and then put "foo" back, the KLD is not unloaded automatically.

The problem is that a reference is placed on the parent firmware when
the other firmwares are registered (during module load). =A0I think this
reference should be placed during firmware_get on the child.

What do people think about the attached patch? =A0It fixes things for me.

Regards,
Navdeep

--0016364183ad2f5ff804b0c5de25
Content-Type: application/octet-stream; name="fw.diff"
Content-Disposition: attachment; filename="fw.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_guiqvwoa0

ZGlmZiAtLWdpdCBhL3N5cy9rZXJuL3N1YnJfZmlybXdhcmUuYyBiL3N5cy9rZXJuL3N1YnJfZmly
bXdhcmUuYwotLS0gYS9zeXMva2Vybi9zdWJyX2Zpcm13YXJlLmMKKysrIGIvc3lzL2tlcm4vc3Vi
cl9maXJtd2FyZS5jCkBAIC0xOTgsMTAgKzE5OCw4IEBACiAJZnJwLT5mdy5kYXRhID0gZGF0YTsK
IAlmcnAtPmZ3LmRhdGFzaXplID0gZGF0YXNpemU7CiAJZnJwLT5mdy52ZXJzaW9uID0gdmVyc2lv
bjsKLQlpZiAocGFyZW50ICE9IE5VTEwpIHsKKwlpZiAocGFyZW50ICE9IE5VTEwpCiAJCWZycC0+
cGFyZW50ID0gUFJJVl9GVyhwYXJlbnQpOwotCQlmcnAtPnBhcmVudC0+cmVmY250Kys7Ci0JfQog
CW10eF91bmxvY2soJmZpcm13YXJlX210eCk7CiAJaWYgKGJvb3R2ZXJib3NlKQogCQlwcmludGYo
ImZpcm13YXJlOiAnJXMnIHZlcnNpb24gJXU6ICV6dSBieXRlcyBsb2FkZWQgYXQgJXBcbiIsCkBA
IC0yMzUsOCArMjMzLDYgQEAKIAl9ICBlbHNlIHsKIAkJbGlua2VyX2ZpbGVfdCB4ID0gZnAtPmZp
bGU7CS8qIHNhdmUgdmFsdWUgKi8KIAotCQlpZiAoZnAtPnBhcmVudCAhPSBOVUxMKQkvKiByZWxl
YXNlIHBhcmVudCByZWZlcmVuY2UgKi8KLQkJCWZwLT5wYXJlbnQtPnJlZmNudC0tOwogCQkvKgog
CQkgKiBDbGVhciB0aGUgd2hvbGUgZW50cnkgd2l0aCBiemVybyB0byBtYWtlIHN1cmUgd2UKIAkJ
ICogZG8gbm90IGZvcmdldCBhbnl0aGluZy4gVGhlbiByZXN0b3JlICdmaWxlJyB3aGljaCBpcwpA
QCAtMzQxLDYgKzMzNyw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIGZvdW5kOgkJCQkvKiBjb21t
b24gZXhpdCBwb2ludCBvbiBzdWNjZXNzICovCisJaWYgKGZwLT5yZWZjbnQgPT0gMCAmJiBmcC0+
cGFyZW50ICE9IE5VTEwpCisJCWZwLT5wYXJlbnQtPnJlZmNudCsrOwogCWZwLT5yZWZjbnQrKzsK
IAltdHhfdW5sb2NrKCZmaXJtd2FyZV9tdHgpOwogCXJldHVybiAmZnAtPmZ3OwpAQCAtMzYzLDYg
KzM2MSw4IEBACiAJbXR4X2xvY2soJmZpcm13YXJlX210eCk7CiAJZnAtPnJlZmNudC0tOwogCWlm
IChmcC0+cmVmY250ID09IDApIHsKKwkJaWYgKGZwLT5wYXJlbnQgIT0gTlVMTCkKKwkJCWZwLT5w
YXJlbnQtPnJlZmNudC0tOwogCQlpZiAoZmxhZ3MgJiBGSVJNV0FSRV9VTkxPQUQpCiAJCQlmcC0+
ZmxhZ3MgfD0gRldfVU5MT0FEOwogCQlpZiAoZnAtPmZpbGUpCg==
--0016364183ad2f5ff804b0c5de25--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPFoGT9bLzAStkUnSfsBm0F6gmGuCM6kQRHQxa%2Bbsah4mQvQVw>