git: a9e5e04e6468 - main - arcmsr: Store softc pointer in si_drv1 of cdev.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 21 Apr 2022 17:30:14 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=a9e5e04e6468e7ad9d17a8fe73b2bc7091894934
commit a9e5e04e6468e7ad9d17a8fe73b2bc7091894934
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2022-04-21 17:29:14 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2022-04-21 17:29:14 +0000
arcmsr: Store softc pointer in si_drv1 of cdev.
Rather than fetching the softc using the controller's unit number as
an index into the devclass.
Reviewed by: imp
Differential Revision: https://reviews.freebsd.org/D35004
---
sys/dev/arcmsr/arcmsr.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/sys/dev/arcmsr/arcmsr.c b/sys/dev/arcmsr/arcmsr.c
index f39959006498..87147402d091 100644
--- a/sys/dev/arcmsr/arcmsr.c
+++ b/sys/dev/arcmsr/arcmsr.c
@@ -240,8 +240,7 @@ static struct cdevsw arcmsr_cdevsw={
*/
static int arcmsr_open(struct cdev *dev, int flags, int fmt, struct thread *proc)
{
- int unit = dev2unit(dev);
- struct AdapterControlBlock *acb = devclass_get_softc(arcmsr_devclass, unit);
+ struct AdapterControlBlock *acb = dev->si_drv1;
if (acb == NULL) {
return ENXIO;
@@ -254,8 +253,7 @@ static int arcmsr_open(struct cdev *dev, int flags, int fmt, struct thread *proc
*/
static int arcmsr_close(struct cdev *dev, int flags, int fmt, struct thread *proc)
{
- int unit = dev2unit(dev);
- struct AdapterControlBlock *acb = devclass_get_softc(arcmsr_devclass, unit);
+ struct AdapterControlBlock *acb = dev->si_drv1;
if (acb == NULL) {
return ENXIO;
@@ -268,8 +266,7 @@ static int arcmsr_close(struct cdev *dev, int flags, int fmt, struct thread *pro
*/
static int arcmsr_ioctl(struct cdev *dev, u_long ioctl_cmd, caddr_t arg, int flags, struct thread *proc)
{
- int unit = dev2unit(dev);
- struct AdapterControlBlock *acb = devclass_get_softc(arcmsr_devclass, unit);
+ struct AdapterControlBlock *acb = dev->si_drv1;
if (acb == NULL) {
return ENXIO;
@@ -4927,6 +4924,7 @@ irq_alloc_failed:
*/
static int arcmsr_attach(device_t dev)
{
+ struct make_dev_args args;
struct AdapterControlBlock *acb=(struct AdapterControlBlock *)device_get_softc(dev);
u_int32_t unit=device_get_unit(dev);
struct ccb_setasync csa;
@@ -4996,7 +4994,13 @@ irqx:
xpt_action((union ccb *)&csa);
ARCMSR_LOCK_RELEASE(&acb->isr_lock);
/* Create the control device. */
- acb->ioctl_dev = make_dev(&arcmsr_cdevsw, unit, UID_ROOT, GID_WHEEL /* GID_OPERATOR */, S_IRUSR | S_IWUSR, "arcmsr%d", unit);
+ make_dev_args_init(&args);
+ args.mda_devsw = &arcmsr_cdevsw;
+ args.mda_uid = UID_ROOT;
+ args.mda_gid = GID_WHEEL /* GID_OPERATOR */;
+ args.mda_mode = S_IRUSR | S_IWUSR;
+ args.mda_si_drv1 = acb;
+ (void)make_dev_s(&args, &acb->ioctl_dev, "arcmsr%d", unit);
(void)make_dev_alias(acb->ioctl_dev, "arc%d", unit);
arcmsr_callout_init(&acb->devmap_callout);