Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/irq.c

    rc1f68b0 rcde999a  
    294294        /* Free up the IRQ code and associated structures. */
    295295        code_free(irq->notif_cfg.code);
    296         slab_free(irq_slab, irq);
     296        slab_free(irq_cache, irq);
    297297}
    298298
     
    308308 * @param ucode   Uspace pointer to top-half IRQ code.
    309309 *
    310  * @return  IRQ capability handle.
    311  * @return  Negative error code.
     310 * @param[out] uspace_handle  Uspace pointer to IRQ capability handle
     311 *
     312 * @return  Error code.
    312313 *
    313314 */
    314315int ipc_irq_subscribe(answerbox_t *box, inr_t inr, sysarg_t imethod,
    315     irq_code_t *ucode)
     316    irq_code_t *ucode, cap_handle_t *uspace_handle)
    316317{
    317318        if ((inr < 0) || (inr > last_inr))
     
    329330         * Allocate and populate the IRQ kernel object.
    330331         */
    331         cap_handle_t handle = cap_alloc(TASK);
    332         if (handle < 0)
    333                 return handle;
    334        
    335         irq_t *irq = (irq_t *) slab_alloc(irq_slab, FRAME_ATOMIC);
     332        cap_handle_t handle;
     333        int rc = cap_alloc(TASK, &handle);
     334        if (rc != EOK)
     335                return rc;
     336       
     337        rc = copy_to_uspace(uspace_handle, &handle, sizeof(cap_handle_t));
     338        if (rc != EOK) {
     339                cap_free(TASK, handle);
     340                return rc;
     341        }
     342
     343        irq_t *irq = (irq_t *) slab_alloc(irq_cache, FRAME_ATOMIC);
    336344        if (!irq) {
    337345                cap_free(TASK, handle);
     
    342350        if (!kobject) {
    343351                cap_free(TASK, handle);
    344                 slab_free(irq_slab, irq);
     352                slab_free(irq_cache, irq);
    345353                return ENOMEM;
    346354        }
     
    371379        cap_publish(TASK, handle, kobject);
    372380       
    373         return handle;
     381        return EOK;
    374382}
    375383
     
    379387 * @param handle  IRQ capability handle.
    380388 *
    381  * @return EOK on success or a negative error code.
     389 * @return EOK on success or an error code.
    382390 *
    383391 */
Note: See TracChangeset for help on using the changeset viewer.