Пример #1
0
/*
 * Free resources consumed by intr_alloc.
 */
void
hub_intr_free(hub_intr_t intr_hdl)
{
    cpuid_t cpu = intr_hdl->i_cpuid;
    int bit = intr_hdl->i_bit;
    xtalk_intr_t xtalk_info;

    if (intr_hdl->i_flags & HUB_INTR_IS_CONNECTED) {
        /* Setting the following fields in the xtalk interrupt info
         * clears the interrupt target register in the xtalk user
         */
        xtalk_info = &intr_hdl->i_xtalk_info;
        xtalk_info->xi_dev = NODEV;
        xtalk_info->xi_vector = 0;
        xtalk_info->xi_addr = 0;
        hub_intr_disconnect(intr_hdl);
    }

    if (intr_hdl->i_flags & HUB_INTR_IS_ALLOCED)
        kfree(intr_hdl);

#if defined(NEW_INTERRUPTS)
    intr_unreserve_level(cpu, bit);
#endif
}
Пример #2
0
void
hub_intr_free(hub_intr_t intr_hdl)
{
	cpuid_t		cpu = intr_hdl->i_cpuid;
	int		vector = intr_hdl->i_bit;
	xtalk_intr_t	xtalk_info;

	if (intr_hdl->i_flags & HUB_INTR_IS_CONNECTED) {
		xtalk_info = &intr_hdl->i_xtalk_info;
		xtalk_info->xi_dev = NODEV;
		xtalk_info->xi_vector = 0;
		xtalk_info->xi_addr = 0;
		hub_intr_disconnect(intr_hdl);
	}

	if (intr_hdl->i_flags & HUB_INTR_IS_ALLOCED) {
		kfree(intr_hdl);
	}
	intr_unreserve_level(cpu, vector);
}