svn commit: r363861 - head/sys/cam/mmc

Emmanuel Vadot manu at FreeBSD.org
Tue Aug 4 20:02:24 UTC 2020


Author: manu
Date: Tue Aug  4 20:02:23 2020
New Revision: 363861
URL: https://svnweb.freebsd.org/changeset/base/363861

Log:
  mmcam: Use a static length sbuf buffer
  
  We cannot sleep during cam proto_announce and sbuf sleeps so use
  a static length buffer like nvme(4)
  
  Reviewed by:	kibab
  Differential Revision:	https://reviews.freebsd.org/D25949

Modified:
  head/sys/cam/mmc/mmc_all.h
  head/sys/cam/mmc/mmc_xpt.c

Modified: head/sys/cam/mmc/mmc_all.h
==============================================================================
--- head/sys/cam/mmc/mmc_all.h	Tue Aug  4 20:00:21 2020	(r363860)
+++ head/sys/cam/mmc/mmc_all.h	Tue Aug  4 20:02:23 2020	(r363861)
@@ -68,7 +68,6 @@
 #include <cam/mmc/mmc.h>
 #include <dev/mmc/mmcreg.h>
 
-void	mmc_print_ident(struct mmc_params *ident_data);
 struct ccb_pathinq;
 struct cam_sim;
 void	mmc_path_inq(struct ccb_pathinq *cpi, const char *hba,

Modified: head/sys/cam/mmc/mmc_xpt.c
==============================================================================
--- head/sys/cam/mmc/mmc_xpt.c	Tue Aug  4 20:00:21 2020	(r363860)
+++ head/sys/cam/mmc/mmc_xpt.c	Tue Aug  4 20:02:23 2020	(r363861)
@@ -411,13 +411,11 @@ mmccam_start_discovery(struct cam_sim *sim) {
 }
 
 /* This func is called per attached device :-( */
-void
-mmc_print_ident(struct mmc_params *ident_data)
+static void
+mmc_print_ident(struct mmc_params *ident_data, struct sbuf *sb)
 {
-	struct sbuf *sb;
 	bool space = false;
 
-	sb = sbuf_new_auto();
 	sbuf_printf(sb, "Relative addr: %08x\n", ident_data->card_rca);
 	sbuf_printf(sb, "Card features: <");
 	if (ident_data->card_features & CARD_FEATURE_MMC) {
@@ -463,13 +461,20 @@ mmc_print_ident(struct mmc_params *ident_data)
 static void
 mmc_proto_announce(struct cam_ed *device)
 {
-	mmc_print_ident(&device->mmc_ident_data);
+	struct sbuf	sb;
+	char		buffer[256];
+
+	sbuf_new(&sb, buffer, sizeof(buffer), SBUF_FIXEDLEN);
+	mmc_print_ident(&device->mmc_ident_data, &sb);
+	sbuf_finish(&sb);
+	sbuf_putbuf(&sb);
 }
 
 static void
 mmc_proto_denounce(struct cam_ed *device)
 {
-	mmc_print_ident(&device->mmc_ident_data);
+
+	mmc_proto_announce(device);
 }
 
 static void


More information about the svn-src-all mailing list