vmw_pvscsi.c 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411
  1. /*
  2. * Linux driver for VMware's para-virtualized SCSI HBA.
  3. *
  4. * Copyright (C) 2008-2009, VMware, Inc. All Rights Reserved.
  5. *
  6. * This program is free software; you can redistribute it and/or modify it
  7. * under the terms of the GNU General Public License as published by the
  8. * Free Software Foundation; version 2 of the License and no later version.
  9. *
  10. * This program is distributed in the hope that it will be useful, but
  11. * WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  13. * NON INFRINGEMENT. See the GNU General Public License for more
  14. * details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19. *
  20. * Maintained by: Alok N Kataria <akataria@vmware.com>
  21. *
  22. */
  23. #include <linux/kernel.h>
  24. #include <linux/module.h>
  25. #include <linux/interrupt.h>
  26. #include <linux/slab.h>
  27. #include <linux/workqueue.h>
  28. #include <linux/pci.h>
  29. #include <scsi/scsi.h>
  30. #include <scsi/scsi_host.h>
  31. #include <scsi/scsi_cmnd.h>
  32. #include <scsi/scsi_device.h>
  33. #include "vmw_pvscsi.h"
  34. #define PVSCSI_LINUX_DRIVER_DESC "VMware PVSCSI driver"
  35. MODULE_DESCRIPTION(PVSCSI_LINUX_DRIVER_DESC);
  36. MODULE_AUTHOR("VMware, Inc.");
  37. MODULE_LICENSE("GPL");
  38. MODULE_VERSION(PVSCSI_DRIVER_VERSION_STRING);
  39. #define PVSCSI_DEFAULT_NUM_PAGES_PER_RING 8
  40. #define PVSCSI_DEFAULT_NUM_PAGES_MSG_RING 1
  41. #define PVSCSI_DEFAULT_QUEUE_DEPTH 64
  42. #define SGL_SIZE PAGE_SIZE
  43. struct pvscsi_sg_list {
  44. struct PVSCSISGElement sge[PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT];
  45. };
  46. struct pvscsi_ctx {
  47. /*
  48. * The index of the context in cmd_map serves as the context ID for a
  49. * 1-to-1 mapping completions back to requests.
  50. */
  51. struct scsi_cmnd *cmd;
  52. struct pvscsi_sg_list *sgl;
  53. struct list_head list;
  54. dma_addr_t dataPA;
  55. dma_addr_t sensePA;
  56. dma_addr_t sglPA;
  57. };
  58. struct pvscsi_adapter {
  59. char *mmioBase;
  60. unsigned int irq;
  61. u8 rev;
  62. bool use_msi;
  63. bool use_msix;
  64. bool use_msg;
  65. spinlock_t hw_lock;
  66. struct workqueue_struct *workqueue;
  67. struct work_struct work;
  68. struct PVSCSIRingReqDesc *req_ring;
  69. unsigned req_pages;
  70. unsigned req_depth;
  71. dma_addr_t reqRingPA;
  72. struct PVSCSIRingCmpDesc *cmp_ring;
  73. unsigned cmp_pages;
  74. dma_addr_t cmpRingPA;
  75. struct PVSCSIRingMsgDesc *msg_ring;
  76. unsigned msg_pages;
  77. dma_addr_t msgRingPA;
  78. struct PVSCSIRingsState *rings_state;
  79. dma_addr_t ringStatePA;
  80. struct pci_dev *dev;
  81. struct Scsi_Host *host;
  82. struct list_head cmd_pool;
  83. struct pvscsi_ctx *cmd_map;
  84. };
  85. /* Command line parameters */
  86. static int pvscsi_ring_pages = PVSCSI_DEFAULT_NUM_PAGES_PER_RING;
  87. static int pvscsi_msg_ring_pages = PVSCSI_DEFAULT_NUM_PAGES_MSG_RING;
  88. static int pvscsi_cmd_per_lun = PVSCSI_DEFAULT_QUEUE_DEPTH;
  89. static bool pvscsi_disable_msi;
  90. static bool pvscsi_disable_msix;
  91. static bool pvscsi_use_msg = true;
  92. #define PVSCSI_RW (S_IRUSR | S_IWUSR)
  93. module_param_named(ring_pages, pvscsi_ring_pages, int, PVSCSI_RW);
  94. MODULE_PARM_DESC(ring_pages, "Number of pages per req/cmp ring - (default="
  95. __stringify(PVSCSI_DEFAULT_NUM_PAGES_PER_RING) ")");
  96. module_param_named(msg_ring_pages, pvscsi_msg_ring_pages, int, PVSCSI_RW);
  97. MODULE_PARM_DESC(msg_ring_pages, "Number of pages for the msg ring - (default="
  98. __stringify(PVSCSI_DEFAULT_NUM_PAGES_MSG_RING) ")");
  99. module_param_named(cmd_per_lun, pvscsi_cmd_per_lun, int, PVSCSI_RW);
  100. MODULE_PARM_DESC(cmd_per_lun, "Maximum commands per lun - (default="
  101. __stringify(PVSCSI_MAX_REQ_QUEUE_DEPTH) ")");
  102. module_param_named(disable_msi, pvscsi_disable_msi, bool, PVSCSI_RW);
  103. MODULE_PARM_DESC(disable_msi, "Disable MSI use in driver - (default=0)");
  104. module_param_named(disable_msix, pvscsi_disable_msix, bool, PVSCSI_RW);
  105. MODULE_PARM_DESC(disable_msix, "Disable MSI-X use in driver - (default=0)");
  106. module_param_named(use_msg, pvscsi_use_msg, bool, PVSCSI_RW);
  107. MODULE_PARM_DESC(use_msg, "Use msg ring when available - (default=1)");
  108. static const struct pci_device_id pvscsi_pci_tbl[] = {
  109. { PCI_VDEVICE(VMWARE, PCI_DEVICE_ID_VMWARE_PVSCSI) },
  110. { 0 }
  111. };
  112. MODULE_DEVICE_TABLE(pci, pvscsi_pci_tbl);
  113. static struct device *
  114. pvscsi_dev(const struct pvscsi_adapter *adapter)
  115. {
  116. return &(adapter->dev->dev);
  117. }
  118. static struct pvscsi_ctx *
  119. pvscsi_find_context(const struct pvscsi_adapter *adapter, struct scsi_cmnd *cmd)
  120. {
  121. struct pvscsi_ctx *ctx, *end;
  122. end = &adapter->cmd_map[adapter->req_depth];
  123. for (ctx = adapter->cmd_map; ctx < end; ctx++)
  124. if (ctx->cmd == cmd)
  125. return ctx;
  126. return NULL;
  127. }
  128. static struct pvscsi_ctx *
  129. pvscsi_acquire_context(struct pvscsi_adapter *adapter, struct scsi_cmnd *cmd)
  130. {
  131. struct pvscsi_ctx *ctx;
  132. if (list_empty(&adapter->cmd_pool))
  133. return NULL;
  134. ctx = list_first_entry(&adapter->cmd_pool, struct pvscsi_ctx, list);
  135. ctx->cmd = cmd;
  136. list_del(&ctx->list);
  137. return ctx;
  138. }
  139. static void pvscsi_release_context(struct pvscsi_adapter *adapter,
  140. struct pvscsi_ctx *ctx)
  141. {
  142. ctx->cmd = NULL;
  143. list_add(&ctx->list, &adapter->cmd_pool);
  144. }
  145. /*
  146. * Map a pvscsi_ctx struct to a context ID field value; we map to a simple
  147. * non-zero integer. ctx always points to an entry in cmd_map array, hence
  148. * the return value is always >=1.
  149. */
  150. static u64 pvscsi_map_context(const struct pvscsi_adapter *adapter,
  151. const struct pvscsi_ctx *ctx)
  152. {
  153. return ctx - adapter->cmd_map + 1;
  154. }
  155. static struct pvscsi_ctx *
  156. pvscsi_get_context(const struct pvscsi_adapter *adapter, u64 context)
  157. {
  158. return &adapter->cmd_map[context - 1];
  159. }
  160. static void pvscsi_reg_write(const struct pvscsi_adapter *adapter,
  161. u32 offset, u32 val)
  162. {
  163. writel(val, adapter->mmioBase + offset);
  164. }
  165. static u32 pvscsi_reg_read(const struct pvscsi_adapter *adapter, u32 offset)
  166. {
  167. return readl(adapter->mmioBase + offset);
  168. }
  169. static u32 pvscsi_read_intr_status(const struct pvscsi_adapter *adapter)
  170. {
  171. return pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_INTR_STATUS);
  172. }
  173. static void pvscsi_write_intr_status(const struct pvscsi_adapter *adapter,
  174. u32 val)
  175. {
  176. pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_STATUS, val);
  177. }
  178. static void pvscsi_unmask_intr(const struct pvscsi_adapter *adapter)
  179. {
  180. u32 intr_bits;
  181. intr_bits = PVSCSI_INTR_CMPL_MASK;
  182. if (adapter->use_msg)
  183. intr_bits |= PVSCSI_INTR_MSG_MASK;
  184. pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_MASK, intr_bits);
  185. }
  186. static void pvscsi_mask_intr(const struct pvscsi_adapter *adapter)
  187. {
  188. pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_MASK, 0);
  189. }
  190. static void pvscsi_write_cmd_desc(const struct pvscsi_adapter *adapter,
  191. u32 cmd, const void *desc, size_t len)
  192. {
  193. const u32 *ptr = desc;
  194. size_t i;
  195. len /= sizeof(*ptr);
  196. pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND, cmd);
  197. for (i = 0; i < len; i++)
  198. pvscsi_reg_write(adapter,
  199. PVSCSI_REG_OFFSET_COMMAND_DATA, ptr[i]);
  200. }
  201. static void pvscsi_abort_cmd(const struct pvscsi_adapter *adapter,
  202. const struct pvscsi_ctx *ctx)
  203. {
  204. struct PVSCSICmdDescAbortCmd cmd = { 0 };
  205. cmd.target = ctx->cmd->device->id;
  206. cmd.context = pvscsi_map_context(adapter, ctx);
  207. pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_ABORT_CMD, &cmd, sizeof(cmd));
  208. }
  209. static void pvscsi_kick_rw_io(const struct pvscsi_adapter *adapter)
  210. {
  211. pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_KICK_RW_IO, 0);
  212. }
  213. static void pvscsi_process_request_ring(const struct pvscsi_adapter *adapter)
  214. {
  215. pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_KICK_NON_RW_IO, 0);
  216. }
  217. static int scsi_is_rw(unsigned char op)
  218. {
  219. return op == READ_6 || op == WRITE_6 ||
  220. op == READ_10 || op == WRITE_10 ||
  221. op == READ_12 || op == WRITE_12 ||
  222. op == READ_16 || op == WRITE_16;
  223. }
  224. static void pvscsi_kick_io(const struct pvscsi_adapter *adapter,
  225. unsigned char op)
  226. {
  227. if (scsi_is_rw(op))
  228. pvscsi_kick_rw_io(adapter);
  229. else
  230. pvscsi_process_request_ring(adapter);
  231. }
  232. static void ll_adapter_reset(const struct pvscsi_adapter *adapter)
  233. {
  234. dev_dbg(pvscsi_dev(adapter), "Adapter Reset on %p\n", adapter);
  235. pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_ADAPTER_RESET, NULL, 0);
  236. }
  237. static void ll_bus_reset(const struct pvscsi_adapter *adapter)
  238. {
  239. dev_dbg(pvscsi_dev(adapter), "Reseting bus on %p\n", adapter);
  240. pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_RESET_BUS, NULL, 0);
  241. }
  242. static void ll_device_reset(const struct pvscsi_adapter *adapter, u32 target)
  243. {
  244. struct PVSCSICmdDescResetDevice cmd = { 0 };
  245. dev_dbg(pvscsi_dev(adapter), "Reseting device: target=%u\n", target);
  246. cmd.target = target;
  247. pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_RESET_DEVICE,
  248. &cmd, sizeof(cmd));
  249. }
  250. static void pvscsi_create_sg(struct pvscsi_ctx *ctx,
  251. struct scatterlist *sg, unsigned count)
  252. {
  253. unsigned i;
  254. struct PVSCSISGElement *sge;
  255. BUG_ON(count > PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT);
  256. sge = &ctx->sgl->sge[0];
  257. for (i = 0; i < count; i++, sg++) {
  258. sge[i].addr = sg_dma_address(sg);
  259. sge[i].length = sg_dma_len(sg);
  260. sge[i].flags = 0;
  261. }
  262. }
  263. /*
  264. * Map all data buffers for a command into PCI space and
  265. * setup the scatter/gather list if needed.
  266. */
  267. static void pvscsi_map_buffers(struct pvscsi_adapter *adapter,
  268. struct pvscsi_ctx *ctx, struct scsi_cmnd *cmd,
  269. struct PVSCSIRingReqDesc *e)
  270. {
  271. unsigned count;
  272. unsigned bufflen = scsi_bufflen(cmd);
  273. struct scatterlist *sg;
  274. e->dataLen = bufflen;
  275. e->dataAddr = 0;
  276. if (bufflen == 0)
  277. return;
  278. sg = scsi_sglist(cmd);
  279. count = scsi_sg_count(cmd);
  280. if (count != 0) {
  281. int segs = scsi_dma_map(cmd);
  282. if (segs > 1) {
  283. pvscsi_create_sg(ctx, sg, segs);
  284. e->flags |= PVSCSI_FLAG_CMD_WITH_SG_LIST;
  285. ctx->sglPA = pci_map_single(adapter->dev, ctx->sgl,
  286. SGL_SIZE, PCI_DMA_TODEVICE);
  287. e->dataAddr = ctx->sglPA;
  288. } else
  289. e->dataAddr = sg_dma_address(sg);
  290. } else {
  291. /*
  292. * In case there is no S/G list, scsi_sglist points
  293. * directly to the buffer.
  294. */
  295. ctx->dataPA = pci_map_single(adapter->dev, sg, bufflen,
  296. cmd->sc_data_direction);
  297. e->dataAddr = ctx->dataPA;
  298. }
  299. }
  300. static void pvscsi_unmap_buffers(const struct pvscsi_adapter *adapter,
  301. struct pvscsi_ctx *ctx)
  302. {
  303. struct scsi_cmnd *cmd;
  304. unsigned bufflen;
  305. cmd = ctx->cmd;
  306. bufflen = scsi_bufflen(cmd);
  307. if (bufflen != 0) {
  308. unsigned count = scsi_sg_count(cmd);
  309. if (count != 0) {
  310. scsi_dma_unmap(cmd);
  311. if (ctx->sglPA) {
  312. pci_unmap_single(adapter->dev, ctx->sglPA,
  313. SGL_SIZE, PCI_DMA_TODEVICE);
  314. ctx->sglPA = 0;
  315. }
  316. } else
  317. pci_unmap_single(adapter->dev, ctx->dataPA, bufflen,
  318. cmd->sc_data_direction);
  319. }
  320. if (cmd->sense_buffer)
  321. pci_unmap_single(adapter->dev, ctx->sensePA,
  322. SCSI_SENSE_BUFFERSIZE, PCI_DMA_FROMDEVICE);
  323. }
  324. static int __devinit pvscsi_allocate_rings(struct pvscsi_adapter *adapter)
  325. {
  326. adapter->rings_state = pci_alloc_consistent(adapter->dev, PAGE_SIZE,
  327. &adapter->ringStatePA);
  328. if (!adapter->rings_state)
  329. return -ENOMEM;
  330. adapter->req_pages = min(PVSCSI_MAX_NUM_PAGES_REQ_RING,
  331. pvscsi_ring_pages);
  332. adapter->req_depth = adapter->req_pages
  333. * PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE;
  334. adapter->req_ring = pci_alloc_consistent(adapter->dev,
  335. adapter->req_pages * PAGE_SIZE,
  336. &adapter->reqRingPA);
  337. if (!adapter->req_ring)
  338. return -ENOMEM;
  339. adapter->cmp_pages = min(PVSCSI_MAX_NUM_PAGES_CMP_RING,
  340. pvscsi_ring_pages);
  341. adapter->cmp_ring = pci_alloc_consistent(adapter->dev,
  342. adapter->cmp_pages * PAGE_SIZE,
  343. &adapter->cmpRingPA);
  344. if (!adapter->cmp_ring)
  345. return -ENOMEM;
  346. BUG_ON(!IS_ALIGNED(adapter->ringStatePA, PAGE_SIZE));
  347. BUG_ON(!IS_ALIGNED(adapter->reqRingPA, PAGE_SIZE));
  348. BUG_ON(!IS_ALIGNED(adapter->cmpRingPA, PAGE_SIZE));
  349. if (!adapter->use_msg)
  350. return 0;
  351. adapter->msg_pages = min(PVSCSI_MAX_NUM_PAGES_MSG_RING,
  352. pvscsi_msg_ring_pages);
  353. adapter->msg_ring = pci_alloc_consistent(adapter->dev,
  354. adapter->msg_pages * PAGE_SIZE,
  355. &adapter->msgRingPA);
  356. if (!adapter->msg_ring)
  357. return -ENOMEM;
  358. BUG_ON(!IS_ALIGNED(adapter->msgRingPA, PAGE_SIZE));
  359. return 0;
  360. }
  361. static void pvscsi_setup_all_rings(const struct pvscsi_adapter *adapter)
  362. {
  363. struct PVSCSICmdDescSetupRings cmd = { 0 };
  364. dma_addr_t base;
  365. unsigned i;
  366. cmd.ringsStatePPN = adapter->ringStatePA >> PAGE_SHIFT;
  367. cmd.reqRingNumPages = adapter->req_pages;
  368. cmd.cmpRingNumPages = adapter->cmp_pages;
  369. base = adapter->reqRingPA;
  370. for (i = 0; i < adapter->req_pages; i++) {
  371. cmd.reqRingPPNs[i] = base >> PAGE_SHIFT;
  372. base += PAGE_SIZE;
  373. }
  374. base = adapter->cmpRingPA;
  375. for (i = 0; i < adapter->cmp_pages; i++) {
  376. cmd.cmpRingPPNs[i] = base >> PAGE_SHIFT;
  377. base += PAGE_SIZE;
  378. }
  379. memset(adapter->rings_state, 0, PAGE_SIZE);
  380. memset(adapter->req_ring, 0, adapter->req_pages * PAGE_SIZE);
  381. memset(adapter->cmp_ring, 0, adapter->cmp_pages * PAGE_SIZE);
  382. pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_SETUP_RINGS,
  383. &cmd, sizeof(cmd));
  384. if (adapter->use_msg) {
  385. struct PVSCSICmdDescSetupMsgRing cmd_msg = { 0 };
  386. cmd_msg.numPages = adapter->msg_pages;
  387. base = adapter->msgRingPA;
  388. for (i = 0; i < adapter->msg_pages; i++) {
  389. cmd_msg.ringPPNs[i] = base >> PAGE_SHIFT;
  390. base += PAGE_SIZE;
  391. }
  392. memset(adapter->msg_ring, 0, adapter->msg_pages * PAGE_SIZE);
  393. pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_SETUP_MSG_RING,
  394. &cmd_msg, sizeof(cmd_msg));
  395. }
  396. }
  397. /*
  398. * Pull a completion descriptor off and pass the completion back
  399. * to the SCSI mid layer.
  400. */
  401. static void pvscsi_complete_request(struct pvscsi_adapter *adapter,
  402. const struct PVSCSIRingCmpDesc *e)
  403. {
  404. struct pvscsi_ctx *ctx;
  405. struct scsi_cmnd *cmd;
  406. u32 btstat = e->hostStatus;
  407. u32 sdstat = e->scsiStatus;
  408. ctx = pvscsi_get_context(adapter, e->context);
  409. cmd = ctx->cmd;
  410. pvscsi_unmap_buffers(adapter, ctx);
  411. pvscsi_release_context(adapter, ctx);
  412. cmd->result = 0;
  413. if (sdstat != SAM_STAT_GOOD &&
  414. (btstat == BTSTAT_SUCCESS ||
  415. btstat == BTSTAT_LINKED_COMMAND_COMPLETED ||
  416. btstat == BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG)) {
  417. cmd->result = (DID_OK << 16) | sdstat;
  418. if (sdstat == SAM_STAT_CHECK_CONDITION && cmd->sense_buffer)
  419. cmd->result |= (DRIVER_SENSE << 24);
  420. } else
  421. switch (btstat) {
  422. case BTSTAT_SUCCESS:
  423. case BTSTAT_LINKED_COMMAND_COMPLETED:
  424. case BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG:
  425. /* If everything went fine, let's move on.. */
  426. cmd->result = (DID_OK << 16);
  427. break;
  428. case BTSTAT_DATARUN:
  429. case BTSTAT_DATA_UNDERRUN:
  430. /* Report residual data in underruns */
  431. scsi_set_resid(cmd, scsi_bufflen(cmd) - e->dataLen);
  432. cmd->result = (DID_ERROR << 16);
  433. break;
  434. case BTSTAT_SELTIMEO:
  435. /* Our emulation returns this for non-connected devs */
  436. cmd->result = (DID_BAD_TARGET << 16);
  437. break;
  438. case BTSTAT_LUNMISMATCH:
  439. case BTSTAT_TAGREJECT:
  440. case BTSTAT_BADMSG:
  441. cmd->result = (DRIVER_INVALID << 24);
  442. /* fall through */
  443. case BTSTAT_HAHARDWARE:
  444. case BTSTAT_INVPHASE:
  445. case BTSTAT_HATIMEOUT:
  446. case BTSTAT_NORESPONSE:
  447. case BTSTAT_DISCONNECT:
  448. case BTSTAT_HASOFTWARE:
  449. case BTSTAT_BUSFREE:
  450. case BTSTAT_SENSFAILED:
  451. cmd->result |= (DID_ERROR << 16);
  452. break;
  453. case BTSTAT_SENTRST:
  454. case BTSTAT_RECVRST:
  455. case BTSTAT_BUSRESET:
  456. cmd->result = (DID_RESET << 16);
  457. break;
  458. case BTSTAT_ABORTQUEUE:
  459. cmd->result = (DID_ABORT << 16);
  460. break;
  461. case BTSTAT_SCSIPARITY:
  462. cmd->result = (DID_PARITY << 16);
  463. break;
  464. default:
  465. cmd->result = (DID_ERROR << 16);
  466. scmd_printk(KERN_DEBUG, cmd,
  467. "Unknown completion status: 0x%x\n",
  468. btstat);
  469. }
  470. dev_dbg(&cmd->device->sdev_gendev,
  471. "cmd=%p %x ctx=%p result=0x%x status=0x%x,%x\n",
  472. cmd, cmd->cmnd[0], ctx, cmd->result, btstat, sdstat);
  473. cmd->scsi_done(cmd);
  474. }
  475. /*
  476. * barrier usage : Since the PVSCSI device is emulated, there could be cases
  477. * where we may want to serialize some accesses between the driver and the
  478. * emulation layer. We use compiler barriers instead of the more expensive
  479. * memory barriers because PVSCSI is only supported on X86 which has strong
  480. * memory access ordering.
  481. */
  482. static void pvscsi_process_completion_ring(struct pvscsi_adapter *adapter)
  483. {
  484. struct PVSCSIRingsState *s = adapter->rings_state;
  485. struct PVSCSIRingCmpDesc *ring = adapter->cmp_ring;
  486. u32 cmp_entries = s->cmpNumEntriesLog2;
  487. while (s->cmpConsIdx != s->cmpProdIdx) {
  488. struct PVSCSIRingCmpDesc *e = ring + (s->cmpConsIdx &
  489. MASK(cmp_entries));
  490. /*
  491. * This barrier() ensures that *e is not dereferenced while
  492. * the device emulation still writes data into the slot.
  493. * Since the device emulation advances s->cmpProdIdx only after
  494. * updating the slot we want to check it first.
  495. */
  496. barrier();
  497. pvscsi_complete_request(adapter, e);
  498. /*
  499. * This barrier() ensures that compiler doesn't reorder write
  500. * to s->cmpConsIdx before the read of (*e) inside
  501. * pvscsi_complete_request. Otherwise, device emulation may
  502. * overwrite *e before we had a chance to read it.
  503. */
  504. barrier();
  505. s->cmpConsIdx++;
  506. }
  507. }
  508. /*
  509. * Translate a Linux SCSI request into a request ring entry.
  510. */
  511. static int pvscsi_queue_ring(struct pvscsi_adapter *adapter,
  512. struct pvscsi_ctx *ctx, struct scsi_cmnd *cmd)
  513. {
  514. struct PVSCSIRingsState *s;
  515. struct PVSCSIRingReqDesc *e;
  516. struct scsi_device *sdev;
  517. u32 req_entries;
  518. s = adapter->rings_state;
  519. sdev = cmd->device;
  520. req_entries = s->reqNumEntriesLog2;
  521. /*
  522. * If this condition holds, we might have room on the request ring, but
  523. * we might not have room on the completion ring for the response.
  524. * However, we have already ruled out this possibility - we would not
  525. * have successfully allocated a context if it were true, since we only
  526. * have one context per request entry. Check for it anyway, since it
  527. * would be a serious bug.
  528. */
  529. if (s->reqProdIdx - s->cmpConsIdx >= 1 << req_entries) {
  530. scmd_printk(KERN_ERR, cmd, "vmw_pvscsi: "
  531. "ring full: reqProdIdx=%d cmpConsIdx=%d\n",
  532. s->reqProdIdx, s->cmpConsIdx);
  533. return -1;
  534. }
  535. e = adapter->req_ring + (s->reqProdIdx & MASK(req_entries));
  536. e->bus = sdev->channel;
  537. e->target = sdev->id;
  538. memset(e->lun, 0, sizeof(e->lun));
  539. e->lun[1] = sdev->lun;
  540. if (cmd->sense_buffer) {
  541. ctx->sensePA = pci_map_single(adapter->dev, cmd->sense_buffer,
  542. SCSI_SENSE_BUFFERSIZE,
  543. PCI_DMA_FROMDEVICE);
  544. e->senseAddr = ctx->sensePA;
  545. e->senseLen = SCSI_SENSE_BUFFERSIZE;
  546. } else {
  547. e->senseLen = 0;
  548. e->senseAddr = 0;
  549. }
  550. e->cdbLen = cmd->cmd_len;
  551. e->vcpuHint = smp_processor_id();
  552. memcpy(e->cdb, cmd->cmnd, e->cdbLen);
  553. e->tag = SIMPLE_QUEUE_TAG;
  554. if (sdev->tagged_supported &&
  555. (cmd->tag == HEAD_OF_QUEUE_TAG ||
  556. cmd->tag == ORDERED_QUEUE_TAG))
  557. e->tag = cmd->tag;
  558. if (cmd->sc_data_direction == DMA_FROM_DEVICE)
  559. e->flags = PVSCSI_FLAG_CMD_DIR_TOHOST;
  560. else if (cmd->sc_data_direction == DMA_TO_DEVICE)
  561. e->flags = PVSCSI_FLAG_CMD_DIR_TODEVICE;
  562. else if (cmd->sc_data_direction == DMA_NONE)
  563. e->flags = PVSCSI_FLAG_CMD_DIR_NONE;
  564. else
  565. e->flags = 0;
  566. pvscsi_map_buffers(adapter, ctx, cmd, e);
  567. e->context = pvscsi_map_context(adapter, ctx);
  568. barrier();
  569. s->reqProdIdx++;
  570. return 0;
  571. }
  572. static int pvscsi_queue_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
  573. {
  574. struct Scsi_Host *host = cmd->device->host;
  575. struct pvscsi_adapter *adapter = shost_priv(host);
  576. struct pvscsi_ctx *ctx;
  577. unsigned long flags;
  578. spin_lock_irqsave(&adapter->hw_lock, flags);
  579. ctx = pvscsi_acquire_context(adapter, cmd);
  580. if (!ctx || pvscsi_queue_ring(adapter, ctx, cmd) != 0) {
  581. if (ctx)
  582. pvscsi_release_context(adapter, ctx);
  583. spin_unlock_irqrestore(&adapter->hw_lock, flags);
  584. return SCSI_MLQUEUE_HOST_BUSY;
  585. }
  586. cmd->scsi_done = done;
  587. dev_dbg(&cmd->device->sdev_gendev,
  588. "queued cmd %p, ctx %p, op=%x\n", cmd, ctx, cmd->cmnd[0]);
  589. spin_unlock_irqrestore(&adapter->hw_lock, flags);
  590. pvscsi_kick_io(adapter, cmd->cmnd[0]);
  591. return 0;
  592. }
  593. static DEF_SCSI_QCMD(pvscsi_queue)
  594. static int pvscsi_abort(struct scsi_cmnd *cmd)
  595. {
  596. struct pvscsi_adapter *adapter = shost_priv(cmd->device->host);
  597. struct pvscsi_ctx *ctx;
  598. unsigned long flags;
  599. scmd_printk(KERN_DEBUG, cmd, "task abort on host %u, %p\n",
  600. adapter->host->host_no, cmd);
  601. spin_lock_irqsave(&adapter->hw_lock, flags);
  602. /*
  603. * Poll the completion ring first - we might be trying to abort
  604. * a command that is waiting to be dispatched in the completion ring.
  605. */
  606. pvscsi_process_completion_ring(adapter);
  607. /*
  608. * If there is no context for the command, it either already succeeded
  609. * or else was never properly issued. Not our problem.
  610. */
  611. ctx = pvscsi_find_context(adapter, cmd);
  612. if (!ctx) {
  613. scmd_printk(KERN_DEBUG, cmd, "Failed to abort cmd %p\n", cmd);
  614. goto out;
  615. }
  616. pvscsi_abort_cmd(adapter, ctx);
  617. pvscsi_process_completion_ring(adapter);
  618. out:
  619. spin_unlock_irqrestore(&adapter->hw_lock, flags);
  620. return SUCCESS;
  621. }
  622. /*
  623. * Abort all outstanding requests. This is only safe to use if the completion
  624. * ring will never be walked again or the device has been reset, because it
  625. * destroys the 1-1 mapping between context field passed to emulation and our
  626. * request structure.
  627. */
  628. static void pvscsi_reset_all(struct pvscsi_adapter *adapter)
  629. {
  630. unsigned i;
  631. for (i = 0; i < adapter->req_depth; i++) {
  632. struct pvscsi_ctx *ctx = &adapter->cmd_map[i];
  633. struct scsi_cmnd *cmd = ctx->cmd;
  634. if (cmd) {
  635. scmd_printk(KERN_ERR, cmd,
  636. "Forced reset on cmd %p\n", cmd);
  637. pvscsi_unmap_buffers(adapter, ctx);
  638. pvscsi_release_context(adapter, ctx);
  639. cmd->result = (DID_RESET << 16);
  640. cmd->scsi_done(cmd);
  641. }
  642. }
  643. }
  644. static int pvscsi_host_reset(struct scsi_cmnd *cmd)
  645. {
  646. struct Scsi_Host *host = cmd->device->host;
  647. struct pvscsi_adapter *adapter = shost_priv(host);
  648. unsigned long flags;
  649. bool use_msg;
  650. scmd_printk(KERN_INFO, cmd, "SCSI Host reset\n");
  651. spin_lock_irqsave(&adapter->hw_lock, flags);
  652. use_msg = adapter->use_msg;
  653. if (use_msg) {
  654. adapter->use_msg = 0;
  655. spin_unlock_irqrestore(&adapter->hw_lock, flags);
  656. /*
  657. * Now that we know that the ISR won't add more work on the
  658. * workqueue we can safely flush any outstanding work.
  659. */
  660. flush_workqueue(adapter->workqueue);
  661. spin_lock_irqsave(&adapter->hw_lock, flags);
  662. }
  663. /*
  664. * We're going to tear down the entire ring structure and set it back
  665. * up, so stalling new requests until all completions are flushed and
  666. * the rings are back in place.
  667. */
  668. pvscsi_process_request_ring(adapter);
  669. ll_adapter_reset(adapter);
  670. /*
  671. * Now process any completions. Note we do this AFTER adapter reset,
  672. * which is strange, but stops races where completions get posted
  673. * between processing the ring and issuing the reset. The backend will
  674. * not touch the ring memory after reset, so the immediately pre-reset
  675. * completion ring state is still valid.
  676. */
  677. pvscsi_process_completion_ring(adapter);
  678. pvscsi_reset_all(adapter);
  679. adapter->use_msg = use_msg;
  680. pvscsi_setup_all_rings(adapter);
  681. pvscsi_unmask_intr(adapter);
  682. spin_unlock_irqrestore(&adapter->hw_lock, flags);
  683. return SUCCESS;
  684. }
  685. static int pvscsi_bus_reset(struct scsi_cmnd *cmd)
  686. {
  687. struct Scsi_Host *host = cmd->device->host;
  688. struct pvscsi_adapter *adapter = shost_priv(host);
  689. unsigned long flags;
  690. scmd_printk(KERN_INFO, cmd, "SCSI Bus reset\n");
  691. /*
  692. * We don't want to queue new requests for this bus after
  693. * flushing all pending requests to emulation, since new
  694. * requests could then sneak in during this bus reset phase,
  695. * so take the lock now.
  696. */
  697. spin_lock_irqsave(&adapter->hw_lock, flags);
  698. pvscsi_process_request_ring(adapter);
  699. ll_bus_reset(adapter);
  700. pvscsi_process_completion_ring(adapter);
  701. spin_unlock_irqrestore(&adapter->hw_lock, flags);
  702. return SUCCESS;
  703. }
  704. static int pvscsi_device_reset(struct scsi_cmnd *cmd)
  705. {
  706. struct Scsi_Host *host = cmd->device->host;
  707. struct pvscsi_adapter *adapter = shost_priv(host);
  708. unsigned long flags;
  709. scmd_printk(KERN_INFO, cmd, "SCSI device reset on scsi%u:%u\n",
  710. host->host_no, cmd->device->id);
  711. /*
  712. * We don't want to queue new requests for this device after flushing
  713. * all pending requests to emulation, since new requests could then
  714. * sneak in during this device reset phase, so take the lock now.
  715. */
  716. spin_lock_irqsave(&adapter->hw_lock, flags);
  717. pvscsi_process_request_ring(adapter);
  718. ll_device_reset(adapter, cmd->device->id);
  719. pvscsi_process_completion_ring(adapter);
  720. spin_unlock_irqrestore(&adapter->hw_lock, flags);
  721. return SUCCESS;
  722. }
  723. static struct scsi_host_template pvscsi_template;
  724. static const char *pvscsi_info(struct Scsi_Host *host)
  725. {
  726. struct pvscsi_adapter *adapter = shost_priv(host);
  727. static char buf[256];
  728. sprintf(buf, "VMware PVSCSI storage adapter rev %d, req/cmp/msg rings: "
  729. "%u/%u/%u pages, cmd_per_lun=%u", adapter->rev,
  730. adapter->req_pages, adapter->cmp_pages, adapter->msg_pages,
  731. pvscsi_template.cmd_per_lun);
  732. return buf;
  733. }
  734. static struct scsi_host_template pvscsi_template = {
  735. .module = THIS_MODULE,
  736. .name = "VMware PVSCSI Host Adapter",
  737. .proc_name = "vmw_pvscsi",
  738. .info = pvscsi_info,
  739. .queuecommand = pvscsi_queue,
  740. .this_id = -1,
  741. .sg_tablesize = PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT,
  742. .dma_boundary = UINT_MAX,
  743. .max_sectors = 0xffff,
  744. .use_clustering = ENABLE_CLUSTERING,
  745. .eh_abort_handler = pvscsi_abort,
  746. .eh_device_reset_handler = pvscsi_device_reset,
  747. .eh_bus_reset_handler = pvscsi_bus_reset,
  748. .eh_host_reset_handler = pvscsi_host_reset,
  749. };
  750. static void pvscsi_process_msg(const struct pvscsi_adapter *adapter,
  751. const struct PVSCSIRingMsgDesc *e)
  752. {
  753. struct PVSCSIRingsState *s = adapter->rings_state;
  754. struct Scsi_Host *host = adapter->host;
  755. struct scsi_device *sdev;
  756. printk(KERN_INFO "vmw_pvscsi: msg type: 0x%x - MSG RING: %u/%u (%u) \n",
  757. e->type, s->msgProdIdx, s->msgConsIdx, s->msgNumEntriesLog2);
  758. BUILD_BUG_ON(PVSCSI_MSG_LAST != 2);
  759. if (e->type == PVSCSI_MSG_DEV_ADDED) {
  760. struct PVSCSIMsgDescDevStatusChanged *desc;
  761. desc = (struct PVSCSIMsgDescDevStatusChanged *)e;
  762. printk(KERN_INFO
  763. "vmw_pvscsi: msg: device added at scsi%u:%u:%u\n",
  764. desc->bus, desc->target, desc->lun[1]);
  765. if (!scsi_host_get(host))
  766. return;
  767. sdev = scsi_device_lookup(host, desc->bus, desc->target,
  768. desc->lun[1]);
  769. if (sdev) {
  770. printk(KERN_INFO "vmw_pvscsi: device already exists\n");
  771. scsi_device_put(sdev);
  772. } else
  773. scsi_add_device(adapter->host, desc->bus,
  774. desc->target, desc->lun[1]);
  775. scsi_host_put(host);
  776. } else if (e->type == PVSCSI_MSG_DEV_REMOVED) {
  777. struct PVSCSIMsgDescDevStatusChanged *desc;
  778. desc = (struct PVSCSIMsgDescDevStatusChanged *)e;
  779. printk(KERN_INFO
  780. "vmw_pvscsi: msg: device removed at scsi%u:%u:%u\n",
  781. desc->bus, desc->target, desc->lun[1]);
  782. if (!scsi_host_get(host))
  783. return;
  784. sdev = scsi_device_lookup(host, desc->bus, desc->target,
  785. desc->lun[1]);
  786. if (sdev) {
  787. scsi_remove_device(sdev);
  788. scsi_device_put(sdev);
  789. } else
  790. printk(KERN_INFO
  791. "vmw_pvscsi: failed to lookup scsi%u:%u:%u\n",
  792. desc->bus, desc->target, desc->lun[1]);
  793. scsi_host_put(host);
  794. }
  795. }
  796. static int pvscsi_msg_pending(const struct pvscsi_adapter *adapter)
  797. {
  798. struct PVSCSIRingsState *s = adapter->rings_state;
  799. return s->msgProdIdx != s->msgConsIdx;
  800. }
  801. static void pvscsi_process_msg_ring(const struct pvscsi_adapter *adapter)
  802. {
  803. struct PVSCSIRingsState *s = adapter->rings_state;
  804. struct PVSCSIRingMsgDesc *ring = adapter->msg_ring;
  805. u32 msg_entries = s->msgNumEntriesLog2;
  806. while (pvscsi_msg_pending(adapter)) {
  807. struct PVSCSIRingMsgDesc *e = ring + (s->msgConsIdx &
  808. MASK(msg_entries));
  809. barrier();
  810. pvscsi_process_msg(adapter, e);
  811. barrier();
  812. s->msgConsIdx++;
  813. }
  814. }
  815. static void pvscsi_msg_workqueue_handler(struct work_struct *data)
  816. {
  817. struct pvscsi_adapter *adapter;
  818. adapter = container_of(data, struct pvscsi_adapter, work);
  819. pvscsi_process_msg_ring(adapter);
  820. }
  821. static int pvscsi_setup_msg_workqueue(struct pvscsi_adapter *adapter)
  822. {
  823. char name[32];
  824. if (!pvscsi_use_msg)
  825. return 0;
  826. pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND,
  827. PVSCSI_CMD_SETUP_MSG_RING);
  828. if (pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_COMMAND_STATUS) == -1)
  829. return 0;
  830. snprintf(name, sizeof(name),
  831. "vmw_pvscsi_wq_%u", adapter->host->host_no);
  832. adapter->workqueue = create_singlethread_workqueue(name);
  833. if (!adapter->workqueue) {
  834. printk(KERN_ERR "vmw_pvscsi: failed to create work queue\n");
  835. return 0;
  836. }
  837. INIT_WORK(&adapter->work, pvscsi_msg_workqueue_handler);
  838. return 1;
  839. }
  840. static irqreturn_t pvscsi_isr(int irq, void *devp)
  841. {
  842. struct pvscsi_adapter *adapter = devp;
  843. int handled;
  844. if (adapter->use_msi || adapter->use_msix)
  845. handled = true;
  846. else {
  847. u32 val = pvscsi_read_intr_status(adapter);
  848. handled = (val & PVSCSI_INTR_ALL_SUPPORTED) != 0;
  849. if (handled)
  850. pvscsi_write_intr_status(devp, val);
  851. }
  852. if (handled) {
  853. unsigned long flags;
  854. spin_lock_irqsave(&adapter->hw_lock, flags);
  855. pvscsi_process_completion_ring(adapter);
  856. if (adapter->use_msg && pvscsi_msg_pending(adapter))
  857. queue_work(adapter->workqueue, &adapter->work);
  858. spin_unlock_irqrestore(&adapter->hw_lock, flags);
  859. }
  860. return IRQ_RETVAL(handled);
  861. }
  862. static void pvscsi_free_sgls(const struct pvscsi_adapter *adapter)
  863. {
  864. struct pvscsi_ctx *ctx = adapter->cmd_map;
  865. unsigned i;
  866. for (i = 0; i < adapter->req_depth; ++i, ++ctx)
  867. free_pages((unsigned long)ctx->sgl, get_order(SGL_SIZE));
  868. }
  869. static int pvscsi_setup_msix(const struct pvscsi_adapter *adapter,
  870. unsigned int *irq)
  871. {
  872. struct msix_entry entry = { 0, PVSCSI_VECTOR_COMPLETION };
  873. int ret;
  874. ret = pci_enable_msix(adapter->dev, &entry, 1);
  875. if (ret)
  876. return ret;
  877. *irq = entry.vector;
  878. return 0;
  879. }
  880. static void pvscsi_shutdown_intr(struct pvscsi_adapter *adapter)
  881. {
  882. if (adapter->irq) {
  883. free_irq(adapter->irq, adapter);
  884. adapter->irq = 0;
  885. }
  886. if (adapter->use_msi) {
  887. pci_disable_msi(adapter->dev);
  888. adapter->use_msi = 0;
  889. } else if (adapter->use_msix) {
  890. pci_disable_msix(adapter->dev);
  891. adapter->use_msix = 0;
  892. }
  893. }
  894. static void pvscsi_release_resources(struct pvscsi_adapter *adapter)
  895. {
  896. pvscsi_shutdown_intr(adapter);
  897. if (adapter->workqueue)
  898. destroy_workqueue(adapter->workqueue);
  899. if (adapter->mmioBase)
  900. pci_iounmap(adapter->dev, adapter->mmioBase);
  901. pci_release_regions(adapter->dev);
  902. if (adapter->cmd_map) {
  903. pvscsi_free_sgls(adapter);
  904. kfree(adapter->cmd_map);
  905. }
  906. if (adapter->rings_state)
  907. pci_free_consistent(adapter->dev, PAGE_SIZE,
  908. adapter->rings_state, adapter->ringStatePA);
  909. if (adapter->req_ring)
  910. pci_free_consistent(adapter->dev,
  911. adapter->req_pages * PAGE_SIZE,
  912. adapter->req_ring, adapter->reqRingPA);
  913. if (adapter->cmp_ring)
  914. pci_free_consistent(adapter->dev,
  915. adapter->cmp_pages * PAGE_SIZE,
  916. adapter->cmp_ring, adapter->cmpRingPA);
  917. if (adapter->msg_ring)
  918. pci_free_consistent(adapter->dev,
  919. adapter->msg_pages * PAGE_SIZE,
  920. adapter->msg_ring, adapter->msgRingPA);
  921. }
  922. /*
  923. * Allocate scatter gather lists.
  924. *
  925. * These are statically allocated. Trying to be clever was not worth it.
  926. *
  927. * Dynamic allocation can fail, and we can't go deeep into the memory
  928. * allocator, since we're a SCSI driver, and trying too hard to allocate
  929. * memory might generate disk I/O. We also don't want to fail disk I/O
  930. * in that case because we can't get an allocation - the I/O could be
  931. * trying to swap out data to free memory. Since that is pathological,
  932. * just use a statically allocated scatter list.
  933. *
  934. */
  935. static int __devinit pvscsi_allocate_sg(struct pvscsi_adapter *adapter)
  936. {
  937. struct pvscsi_ctx *ctx;
  938. int i;
  939. ctx = adapter->cmd_map;
  940. BUILD_BUG_ON(sizeof(struct pvscsi_sg_list) > SGL_SIZE);
  941. for (i = 0; i < adapter->req_depth; ++i, ++ctx) {
  942. ctx->sgl = (void *)__get_free_pages(GFP_KERNEL,
  943. get_order(SGL_SIZE));
  944. ctx->sglPA = 0;
  945. BUG_ON(!IS_ALIGNED(((unsigned long)ctx->sgl), PAGE_SIZE));
  946. if (!ctx->sgl) {
  947. for (; i >= 0; --i, --ctx) {
  948. free_pages((unsigned long)ctx->sgl,
  949. get_order(SGL_SIZE));
  950. ctx->sgl = NULL;
  951. }
  952. return -ENOMEM;
  953. }
  954. }
  955. return 0;
  956. }
  957. static int __devinit pvscsi_probe(struct pci_dev *pdev,
  958. const struct pci_device_id *id)
  959. {
  960. struct pvscsi_adapter *adapter;
  961. struct Scsi_Host *host;
  962. unsigned int i;
  963. unsigned long flags = 0;
  964. int error;
  965. error = -ENODEV;
  966. if (pci_enable_device(pdev))
  967. return error;
  968. if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0 &&
  969. pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) {
  970. printk(KERN_INFO "vmw_pvscsi: using 64bit dma\n");
  971. } else if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) == 0 &&
  972. pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) == 0) {
  973. printk(KERN_INFO "vmw_pvscsi: using 32bit dma\n");
  974. } else {
  975. printk(KERN_ERR "vmw_pvscsi: failed to set DMA mask\n");
  976. goto out_disable_device;
  977. }
  978. pvscsi_template.can_queue =
  979. min(PVSCSI_MAX_NUM_PAGES_REQ_RING, pvscsi_ring_pages) *
  980. PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE;
  981. pvscsi_template.cmd_per_lun =
  982. min(pvscsi_template.can_queue, pvscsi_cmd_per_lun);
  983. host = scsi_host_alloc(&pvscsi_template, sizeof(struct pvscsi_adapter));
  984. if (!host) {
  985. printk(KERN_ERR "vmw_pvscsi: failed to allocate host\n");
  986. goto out_disable_device;
  987. }
  988. adapter = shost_priv(host);
  989. memset(adapter, 0, sizeof(*adapter));
  990. adapter->dev = pdev;
  991. adapter->host = host;
  992. spin_lock_init(&adapter->hw_lock);
  993. host->max_channel = 0;
  994. host->max_id = 16;
  995. host->max_lun = 1;
  996. host->max_cmd_len = 16;
  997. adapter->rev = pdev->revision;
  998. if (pci_request_regions(pdev, "vmw_pvscsi")) {
  999. printk(KERN_ERR "vmw_pvscsi: pci memory selection failed\n");
  1000. goto out_free_host;
  1001. }
  1002. for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
  1003. if ((pci_resource_flags(pdev, i) & PCI_BASE_ADDRESS_SPACE_IO))
  1004. continue;
  1005. if (pci_resource_len(pdev, i) < PVSCSI_MEM_SPACE_SIZE)
  1006. continue;
  1007. break;
  1008. }
  1009. if (i == DEVICE_COUNT_RESOURCE) {
  1010. printk(KERN_ERR
  1011. "vmw_pvscsi: adapter has no suitable MMIO region\n");
  1012. goto out_release_resources;
  1013. }
  1014. adapter->mmioBase = pci_iomap(pdev, i, PVSCSI_MEM_SPACE_SIZE);
  1015. if (!adapter->mmioBase) {
  1016. printk(KERN_ERR
  1017. "vmw_pvscsi: can't iomap for BAR %d memsize %lu\n",
  1018. i, PVSCSI_MEM_SPACE_SIZE);
  1019. goto out_release_resources;
  1020. }
  1021. pci_set_master(pdev);
  1022. pci_set_drvdata(pdev, host);
  1023. ll_adapter_reset(adapter);
  1024. adapter->use_msg = pvscsi_setup_msg_workqueue(adapter);
  1025. error = pvscsi_allocate_rings(adapter);
  1026. if (error) {
  1027. printk(KERN_ERR "vmw_pvscsi: unable to allocate ring memory\n");
  1028. goto out_release_resources;
  1029. }
  1030. /*
  1031. * From this point on we should reset the adapter if anything goes
  1032. * wrong.
  1033. */
  1034. pvscsi_setup_all_rings(adapter);
  1035. adapter->cmd_map = kcalloc(adapter->req_depth,
  1036. sizeof(struct pvscsi_ctx), GFP_KERNEL);
  1037. if (!adapter->cmd_map) {
  1038. printk(KERN_ERR "vmw_pvscsi: failed to allocate memory.\n");
  1039. error = -ENOMEM;
  1040. goto out_reset_adapter;
  1041. }
  1042. INIT_LIST_HEAD(&adapter->cmd_pool);
  1043. for (i = 0; i < adapter->req_depth; i++) {
  1044. struct pvscsi_ctx *ctx = adapter->cmd_map + i;
  1045. list_add(&ctx->list, &adapter->cmd_pool);
  1046. }
  1047. error = pvscsi_allocate_sg(adapter);
  1048. if (error) {
  1049. printk(KERN_ERR "vmw_pvscsi: unable to allocate s/g table\n");
  1050. goto out_reset_adapter;
  1051. }
  1052. if (!pvscsi_disable_msix &&
  1053. pvscsi_setup_msix(adapter, &adapter->irq) == 0) {
  1054. printk(KERN_INFO "vmw_pvscsi: using MSI-X\n");
  1055. adapter->use_msix = 1;
  1056. } else if (!pvscsi_disable_msi && pci_enable_msi(pdev) == 0) {
  1057. printk(KERN_INFO "vmw_pvscsi: using MSI\n");
  1058. adapter->use_msi = 1;
  1059. adapter->irq = pdev->irq;
  1060. } else {
  1061. printk(KERN_INFO "vmw_pvscsi: using INTx\n");
  1062. adapter->irq = pdev->irq;
  1063. flags = IRQF_SHARED;
  1064. }
  1065. error = request_irq(adapter->irq, pvscsi_isr, flags,
  1066. "vmw_pvscsi", adapter);
  1067. if (error) {
  1068. printk(KERN_ERR
  1069. "vmw_pvscsi: unable to request IRQ: %d\n", error);
  1070. adapter->irq = 0;
  1071. goto out_reset_adapter;
  1072. }
  1073. error = scsi_add_host(host, &pdev->dev);
  1074. if (error) {
  1075. printk(KERN_ERR
  1076. "vmw_pvscsi: scsi_add_host failed: %d\n", error);
  1077. goto out_reset_adapter;
  1078. }
  1079. dev_info(&pdev->dev, "VMware PVSCSI rev %d host #%u\n",
  1080. adapter->rev, host->host_no);
  1081. pvscsi_unmask_intr(adapter);
  1082. scsi_scan_host(host);
  1083. return 0;
  1084. out_reset_adapter:
  1085. ll_adapter_reset(adapter);
  1086. out_release_resources:
  1087. pvscsi_release_resources(adapter);
  1088. out_free_host:
  1089. scsi_host_put(host);
  1090. out_disable_device:
  1091. pci_set_drvdata(pdev, NULL);
  1092. pci_disable_device(pdev);
  1093. return error;
  1094. }
  1095. static void __pvscsi_shutdown(struct pvscsi_adapter *adapter)
  1096. {
  1097. pvscsi_mask_intr(adapter);
  1098. if (adapter->workqueue)
  1099. flush_workqueue(adapter->workqueue);
  1100. pvscsi_shutdown_intr(adapter);
  1101. pvscsi_process_request_ring(adapter);
  1102. pvscsi_process_completion_ring(adapter);
  1103. ll_adapter_reset(adapter);
  1104. }
  1105. static void pvscsi_shutdown(struct pci_dev *dev)
  1106. {
  1107. struct Scsi_Host *host = pci_get_drvdata(dev);
  1108. struct pvscsi_adapter *adapter = shost_priv(host);
  1109. __pvscsi_shutdown(adapter);
  1110. }
  1111. static void pvscsi_remove(struct pci_dev *pdev)
  1112. {
  1113. struct Scsi_Host *host = pci_get_drvdata(pdev);
  1114. struct pvscsi_adapter *adapter = shost_priv(host);
  1115. scsi_remove_host(host);
  1116. __pvscsi_shutdown(adapter);
  1117. pvscsi_release_resources(adapter);
  1118. scsi_host_put(host);
  1119. pci_set_drvdata(pdev, NULL);
  1120. pci_disable_device(pdev);
  1121. }
  1122. static struct pci_driver pvscsi_pci_driver = {
  1123. .name = "vmw_pvscsi",
  1124. .id_table = pvscsi_pci_tbl,
  1125. .probe = pvscsi_probe,
  1126. .remove = __devexit_p(pvscsi_remove),
  1127. .shutdown = pvscsi_shutdown,
  1128. };
  1129. static int __init pvscsi_init(void)
  1130. {
  1131. pr_info("%s - version %s\n",
  1132. PVSCSI_LINUX_DRIVER_DESC, PVSCSI_DRIVER_VERSION_STRING);
  1133. return pci_register_driver(&pvscsi_pci_driver);
  1134. }
  1135. static void __exit pvscsi_exit(void)
  1136. {
  1137. pci_unregister_driver(&pvscsi_pci_driver);
  1138. }
  1139. module_init(pvscsi_init);
  1140. module_exit(pvscsi_exit);