Author: sephe
Date: Wed Sep 28 08:35:05 2016
New Revision: 306396
URL: https://svnweb.freebsd.org/changeset/base/306396

Log:
  cam/ata: Allow drivers to veto ATA disk attachment.
  
  This eventhandler is mainly used by VMs, e.g. Hyper-V, whose disk
  controllers share the disks with the simulated ATA controllers.
  
  Submitted by: Hongjiang Zhang <honzhan microsoft com>
  Discussed with:       mav
  MFC after:    1 week
  Sponsored by: Microsoft
  Differential Revision:        https://reviews.freebsd.org/D7693

Modified:
  head/sys/cam/ata/ata_xpt.c
  head/sys/sys/eventhandler.h

Modified: head/sys/cam/ata/ata_xpt.c
==============================================================================
--- head/sys/cam/ata/ata_xpt.c  Wed Sep 28 08:11:00 2016        (r306395)
+++ head/sys/cam/ata/ata_xpt.c  Wed Sep 28 08:35:05 2016        (r306396)
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/interrupt.h>
 #include <sys/sbuf.h>
 
+#include <sys/eventhandler.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
 #include <sys/sysctl.h>
@@ -872,12 +873,24 @@ noerror:
        {
                struct ccb_pathinq cpi;
                int16_t *ptr;
+               int veto = 0;
 
                ident_buf = &softc->ident_data;
                for (ptr = (int16_t *)ident_buf;
                     ptr < (int16_t *)ident_buf + sizeof(struct ata_params)/2; 
ptr++) {
                        *ptr = le16toh(*ptr);
                }
+
+               /*
+                * Allow others to veto this ATA disk attachment.  This
+                * is mainly used by VMs, whose disk controllers may
+                * share the disks with the simulated ATA controllers.
+                */
+               EVENTHANDLER_INVOKE(ada_probe_veto, path, ident_buf, &veto);
+               if (veto) {
+                       goto device_fail;
+               }
+
                if (strncmp(ident_buf->model, "FX", 2) &&
                    strncmp(ident_buf->model, "NEC", 3) &&
                    strncmp(ident_buf->model, "Pioneer", 7) &&

Modified: head/sys/sys/eventhandler.h
==============================================================================
--- head/sys/sys/eventhandler.h Wed Sep 28 08:11:00 2016        (r306395)
+++ head/sys/sys/eventhandler.h Wed Sep 28 08:35:05 2016        (r306396)
@@ -270,4 +270,11 @@ typedef void (*unregister_framebuffer_fn
 EVENTHANDLER_DECLARE(register_framebuffer, register_framebuffer_fn);
 EVENTHANDLER_DECLARE(unregister_framebuffer, unregister_framebuffer_fn);
 
+/* Veto ada attachment */
+struct cam_path;
+struct ata_params;
+typedef void (*ada_probe_veto_fn)(void *, struct cam_path *,
+    struct ata_params *, int *);
+EVENTHANDLER_DECLARE(ada_probe_veto, ada_probe_veto_fn);
+
 #endif /* _SYS_EVENTHANDLER_H_ */
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to