Print this page
5253 kmem_alloc/kmem_zalloc won't fail with KM_SLEEP
5254 getrbuf won't fail with KM_SLEEP


1865         if (work_flags & PMCS_WORK_FLAG_ADD_DMA_CHUNKS) {
1866                 if (pmcs_add_more_chunks(pwp,
1867                     ptob(1) * PMCS_ADDTL_CHUNK_PAGES)) {
1868                         SCHEDULE_WORK(pwp, PMCS_WORK_ADD_DMA_CHUNKS);
1869                 } else {
1870                         SCHEDULE_WORK(pwp, PMCS_WORK_RUN_QUEUES);
1871                 }
1872         }
1873 }
1874 
1875 static int
1876 pmcs_add_more_chunks(pmcs_hw_t *pwp, unsigned long nsize)
1877 {
1878         pmcs_dmachunk_t *dc;
1879         unsigned long dl;
1880         pmcs_chunk_t    *pchunk = NULL;
1881 
1882         pwp->cip_dma_attr.dma_attr_align = sizeof (uint32_t);
1883 
1884         pchunk = kmem_zalloc(sizeof (pmcs_chunk_t), KM_SLEEP);
1885         if (pchunk == NULL) {
1886                 pmcs_prt(pwp, PMCS_PRT_DEBUG, NULL, NULL,
1887                     "Not enough memory for DMA chunks");
1888                 return (-1);
1889         }
1890 
1891         if (pmcs_dma_setup(pwp, &pwp->cip_dma_attr, &pchunk->acc_handle,
1892             &pchunk->dma_handle, nsize, (caddr_t *)&pchunk->addrp,
1893             &pchunk->dma_addr) == B_FALSE) {
1894                 pmcs_prt(pwp, PMCS_PRT_DEBUG, NULL, NULL,
1895                     "Failed to setup DMA for chunks");
1896                 kmem_free(pchunk, sizeof (pmcs_chunk_t));
1897                 return (-1);
1898         }
1899 
1900         if ((pmcs_check_acc_handle(pchunk->acc_handle) != DDI_SUCCESS) ||
1901             (pmcs_check_dma_handle(pchunk->dma_handle) != DDI_SUCCESS)) {
1902                 ddi_fm_service_impact(pwp->dip, DDI_SERVICE_UNAFFECTED);
1903                 return (-1);
1904         }
1905 
1906         bzero(pchunk->addrp, nsize);
1907         dc = NULL;
1908         for (dl = 0; dl < (nsize / PMCS_SGL_CHUNKSZ); dl++) {
1909                 pmcs_dmachunk_t *tmp;




1865         if (work_flags & PMCS_WORK_FLAG_ADD_DMA_CHUNKS) {
1866                 if (pmcs_add_more_chunks(pwp,
1867                     ptob(1) * PMCS_ADDTL_CHUNK_PAGES)) {
1868                         SCHEDULE_WORK(pwp, PMCS_WORK_ADD_DMA_CHUNKS);
1869                 } else {
1870                         SCHEDULE_WORK(pwp, PMCS_WORK_RUN_QUEUES);
1871                 }
1872         }
1873 }
1874 
1875 static int
1876 pmcs_add_more_chunks(pmcs_hw_t *pwp, unsigned long nsize)
1877 {
1878         pmcs_dmachunk_t *dc;
1879         unsigned long dl;
1880         pmcs_chunk_t    *pchunk = NULL;
1881 
1882         pwp->cip_dma_attr.dma_attr_align = sizeof (uint32_t);
1883 
1884         pchunk = kmem_zalloc(sizeof (pmcs_chunk_t), KM_SLEEP);





1885 
1886         if (pmcs_dma_setup(pwp, &pwp->cip_dma_attr, &pchunk->acc_handle,
1887             &pchunk->dma_handle, nsize, (caddr_t *)&pchunk->addrp,
1888             &pchunk->dma_addr) == B_FALSE) {
1889                 pmcs_prt(pwp, PMCS_PRT_DEBUG, NULL, NULL,
1890                     "Failed to setup DMA for chunks");
1891                 kmem_free(pchunk, sizeof (pmcs_chunk_t));
1892                 return (-1);
1893         }
1894 
1895         if ((pmcs_check_acc_handle(pchunk->acc_handle) != DDI_SUCCESS) ||
1896             (pmcs_check_dma_handle(pchunk->dma_handle) != DDI_SUCCESS)) {
1897                 ddi_fm_service_impact(pwp->dip, DDI_SERVICE_UNAFFECTED);
1898                 return (-1);
1899         }
1900 
1901         bzero(pchunk->addrp, nsize);
1902         dc = NULL;
1903         for (dl = 0; dl < (nsize / PMCS_SGL_CHUNKSZ); dl++) {
1904                 pmcs_dmachunk_t *tmp;