]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/ehea/ehea_main.c
Merge git://git.infradead.org/mtd-2.6
[linux-2.6-omap-h63xx.git] / drivers / net / ehea / ehea_main.c
index b70c5314f53733c3e22beb090a4559781f8f6099..422fcb93e2c381b2b80d365244084559184dbc2f 100644 (file)
@@ -2863,7 +2863,7 @@ static void ehea_rereg_mrs(struct work_struct *work)
        struct ehea_adapter *adapter;
 
        mutex_lock(&dlpar_mem_lock);
-       ehea_info("LPAR memory enlarged - re-initializing driver");
+       ehea_info("LPAR memory changed - re-initializing driver");
 
        list_for_each_entry(adapter, &adapter_list, list)
                if (adapter->active_ports) {
@@ -2900,13 +2900,6 @@ static void ehea_rereg_mrs(struct work_struct *work)
                        }
                }
 
-       ehea_destroy_busmap();
-       ret = ehea_create_busmap();
-       if (ret) {
-               ehea_error("creating ehea busmap failed");
-               goto out;
-       }
-
        clear_bit(__EHEA_STOP_XFER, &ehea_driver_flags);
 
        list_for_each_entry(adapter, &adapter_list, list)
@@ -3519,9 +3512,21 @@ void ehea_crash_handler(void)
 static int ehea_mem_notifier(struct notifier_block *nb,
                              unsigned long action, void *data)
 {
+       struct memory_notify *arg = data;
        switch (action) {
-       case MEM_OFFLINE:
-               ehea_info("memory has been removed");
+       case MEM_CANCEL_OFFLINE:
+               ehea_info("memory offlining canceled");
+               /* Readd canceled memory block */
+       case MEM_ONLINE:
+               ehea_info("memory is going online");
+               if (ehea_add_sect_bmap(arg->start_pfn, arg->nr_pages))
+                       return NOTIFY_BAD;
+               ehea_rereg_mrs(NULL);
+               break;
+       case MEM_GOING_OFFLINE:
+               ehea_info("memory is going offline");
+               if (ehea_rem_sect_bmap(arg->start_pfn, arg->nr_pages))
+                       return NOTIFY_BAD;
                ehea_rereg_mrs(NULL);
                break;
        default: