239         case DDI_MODEL_ILP32:
 240                 if (ddi_copyin((void *)data, &setfw32,
 241                     sizeof (ufmtest_ioc_setfw32_t), mode) != 0)
 242                         return (EFAULT);
 243                 setfw.utsw_bufsz = setfw32.utsw_bufsz;
 244                 setfw.utsw_buf = (caddr_t)(uintptr_t)setfw32.utsw_buf;
 245                 break;
 246 #endif /* _MULTI_DATAMODEL */
 247         case DDI_MODEL_NONE:
 248         default:
 249                 if (ddi_copyin((void *)data, &setfw,
 250                     sizeof (ufmtest_ioc_setfw_t), mode) != 0)
 251                         return (EFAULT);
 252         }
 253 
 254         if (ufmt.ufmt_nvl != NULL) {
 255                 nvlist_free(ufmt.ufmt_nvl);
 256                 ufmt.ufmt_nvl = NULL;
 257         }
 258 
 259         nvlbuf = kmem_zalloc(setfw.utsw_bufsz, KM_NOSLEEP | KM_NORMALPRI);
 260         if (nvlbuf == NULL)
 261                 return (ENOMEM);
 262 
 263         if (ddi_copyin(setfw.utsw_buf, nvlbuf, setfw.utsw_bufsz, mode) != 0) {
 264                 kmem_free(nvlbuf, setfw.utsw_bufsz);
 265                 return (EFAULT);
 266         }
 267 
 268         ret = nvlist_unpack(nvlbuf, setfw.utsw_bufsz, &ufmt.ufmt_nvl,
 269             KM_NOSLEEP);
 270         kmem_free(nvlbuf, setfw.utsw_bufsz);
 271 
 272         if (ret != 0)
 273                 return (ret);
 274 
 275         /*
 276          * Notify the UFM subsystem that our firmware information has changed.
 277          */
 278         ddi_ufm_update(ufmt.ufmt_ufmh);
 279 
 
 | 
 
 
 239         case DDI_MODEL_ILP32:
 240                 if (ddi_copyin((void *)data, &setfw32,
 241                     sizeof (ufmtest_ioc_setfw32_t), mode) != 0)
 242                         return (EFAULT);
 243                 setfw.utsw_bufsz = setfw32.utsw_bufsz;
 244                 setfw.utsw_buf = (caddr_t)(uintptr_t)setfw32.utsw_buf;
 245                 break;
 246 #endif /* _MULTI_DATAMODEL */
 247         case DDI_MODEL_NONE:
 248         default:
 249                 if (ddi_copyin((void *)data, &setfw,
 250                     sizeof (ufmtest_ioc_setfw_t), mode) != 0)
 251                         return (EFAULT);
 252         }
 253 
 254         if (ufmt.ufmt_nvl != NULL) {
 255                 nvlist_free(ufmt.ufmt_nvl);
 256                 ufmt.ufmt_nvl = NULL;
 257         }
 258 
 259         nvlbuf = kmem_zalloc(setfw.utsw_bufsz, KM_NOSLEEP_LAZY);
 260         if (nvlbuf == NULL)
 261                 return (ENOMEM);
 262 
 263         if (ddi_copyin(setfw.utsw_buf, nvlbuf, setfw.utsw_bufsz, mode) != 0) {
 264                 kmem_free(nvlbuf, setfw.utsw_bufsz);
 265                 return (EFAULT);
 266         }
 267 
 268         ret = nvlist_unpack(nvlbuf, setfw.utsw_bufsz, &ufmt.ufmt_nvl,
 269             KM_NOSLEEP);
 270         kmem_free(nvlbuf, setfw.utsw_bufsz);
 271 
 272         if (ret != 0)
 273                 return (ret);
 274 
 275         /*
 276          * Notify the UFM subsystem that our firmware information has changed.
 277          */
 278         ddi_ufm_update(ufmt.ufmt_ufmh);
 279 
 
 |