/** * pdcspath_store - This function writes a path to stable storage. * @entry: A pointer to an allocated pdcspath_entry. * * It can be used in two ways: either by passing it a preset devpath struct * containing an already computed hardware path, or by passing it a device * pointer, from which it'll find out the corresponding hardware path. * For now we do not handle the case where there's an error in writing to the * Stable Storage area, so you'd better not mess up the data :P * * This function expects to be called with @entry->rw_lock write-hold. */ static void pdcspath_store(struct pdcspath_entry *entry) { struct device_path *devpath; BUG_ON(!entry); devpath = &entry->devpath; /* We expect the caller to set the ready flag to 0 if the hardware path struct provided is invalid, so that we know we have to fill it. First case, we don't have a preset hwpath... */ if (!entry->ready) { /* ...but we have a device, map it */ BUG_ON(!entry->dev); device_to_hwpath(entry->dev, (struct hardware_path *)devpath); } /* else, we expect the provided hwpath to be valid. */ DPRINTK("%s: store: 0x%p, 0x%p, addr: 0x%lx\n", __func__, entry, devpath, entry->addr); /* addr, devpath and count must be word aligned */ if (pdc_stable_write(entry->addr, devpath, sizeof(*devpath)) != PDC_OK) { printk(KERN_ERR "%s: an error occured when writing to PDC.\n" "It is likely that the Stable Storage data has been corrupted.\n" "Please check it carefully upon next reboot.\n", __func__); WARN_ON(1); } /* kobject is already registered */ entry->ready = 2; DPRINTK("%s: device: 0x%p\n", __func__, entry->dev); }
static void pdcspath_store(struct pdcspath_entry *entry) { struct device_path *devpath; BUG_ON(!entry); devpath = &entry->devpath; if (!entry->ready) { BUG_ON(!entry->dev); device_to_hwpath(entry->dev, (struct hardware_path *)devpath); } DPRINTK("%s: store: 0x%p, 0x%p, addr: 0x%lx\n", __func__, entry, devpath, entry->addr); if (pdc_stable_write(entry->addr, devpath, sizeof(*devpath)) != PDC_OK) { printk(KERN_ERR "%s: an error occurred when writing to PDC.\n" "It is likely that the Stable Storage data has been corrupted.\n" "Please check it carefully upon next reboot.\n", __func__); WARN_ON(1); } entry->ready = 2; DPRINTK("%s: device: 0x%p\n", __func__, entry->dev); }