int err;
 
        if (!config_enabled(CONFIG_SMP))
-               return -1;
+               return -EPERM;
 
        if (!cpumask_intersects(mask, cpu_online_mask))
                return -EINVAL;
        int ret;
 
        if (!config_enabled(CONFIG_SMP))
-               return -1;
+               return -EPERM;
 
        raw_spin_lock_irqsave(&ioapic_lock, flags);
        ret = __ioapic_set_affinity(data, mask, &dest);
        struct irq_cfg *cfg = data->chip_data;
        struct msi_msg msg;
        unsigned int dest;
+       int ret;
 
-       if (__ioapic_set_affinity(data, mask, &dest))
-               return -1;
+       ret = __ioapic_set_affinity(data, mask, &dest);
+       if (ret)
+               return ret;
 
        __get_cached_msi_msg(data->msi_desc, &msg);
 
        struct irq_cfg *cfg = data->chip_data;
        unsigned int dest, irq = data->irq;
        struct msi_msg msg;
+       int ret;
 
-       if (__ioapic_set_affinity(data, mask, &dest))
-               return -1;
+       ret = __ioapic_set_affinity(data, mask, &dest);
+       if (ret)
+               return ret;
 
        dmar_msi_read(irq, &msg);
 
        struct irq_cfg *cfg = data->chip_data;
        struct msi_msg msg;
        unsigned int dest;
+       int ret;
 
-       if (__ioapic_set_affinity(data, mask, &dest))
-               return -1;
+       ret = __ioapic_set_affinity(data, mask, &dest);
+       if (ret)
+               return ret;
 
        hpet_msi_read(data->handler_data, &msg);
 
 {
        struct irq_cfg *cfg = data->chip_data;
        unsigned int dest;
+       int ret;
 
-       if (__ioapic_set_affinity(data, mask, &dest))
-               return -1;
+       ret = __ioapic_set_affinity(data, mask, &dest);
+       if (ret)
+               return ret;
 
        target_ht_irq(data->irq, dest, cfg->vector);
        return IRQ_SET_MASK_OK_NOCOPY;
 
        struct irq_desc *desc;
        struct irq_data *data;
        struct irq_chip *chip;
+       int ret;
 
        for_each_irq_desc(irq, desc) {
                int break_affinity = 0;
                if (!irqd_can_move_in_process_context(data) && chip->irq_mask)
                        chip->irq_mask(data);
 
-               if (chip->irq_set_affinity)
-                       chip->irq_set_affinity(data, affinity, true);
-               else if (!(warned++))
-                       set_affinity = 0;
+               if (chip->irq_set_affinity) {
+                       ret = chip->irq_set_affinity(data, affinity, true);
+                       if (ret == -ENOSPC)
+                               pr_crit("IRQ %d set affinity failed because there are no available vectors.  The device assigned to this IRQ is unstable.\n", irq);
+               } else {
+                       if (!(warned++))
+                               set_affinity = 0;
+               }
 
                /*
                 * We unmask if the irq was not marked masked by the