mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	i7core_edac: change the mem allocation scheme to make Documentation/kobject.txt happy
Kernel kobjects have rigid rules: each container object should be dynamically allocated, and can't be allocated into a single kmalloc. EDAC never obeyed this rule: it has a single malloc function that allocates all needed data into a single kzalloc. As this is not accepted anymore, change the allocation schema of the EDAC *_info structs to enforce this Kernel standard. Cc: Aristeu Rozanski <arozansk@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
		
							parent
							
								
									de3910eb79
								
							
						
					
					
						commit
						356f0a3086
					
				
					 1 changed files with 35 additions and 21 deletions
				
			
		| 
						 | 
					@ -248,7 +248,7 @@ struct i7core_dev {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct i7core_pvt {
 | 
					struct i7core_pvt {
 | 
				
			||||||
	struct device addrmatch_dev, chancounts_dev;
 | 
						struct device *addrmatch_dev, *chancounts_dev;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct pci_dev	*pci_noncore;
 | 
						struct pci_dev	*pci_noncore;
 | 
				
			||||||
	struct pci_dev	*pci_mcr[MAX_MCR_FUNC + 1];
 | 
						struct pci_dev	*pci_mcr[MAX_MCR_FUNC + 1];
 | 
				
			||||||
| 
						 | 
					@ -1105,6 +1105,7 @@ static const struct attribute_group *addrmatch_groups[] = {
 | 
				
			||||||
static void addrmatch_release(struct device *device)
 | 
					static void addrmatch_release(struct device *device)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	debugf1("Releasing device %s\n", dev_name(device));
 | 
						debugf1("Releasing device %s\n", dev_name(device));
 | 
				
			||||||
 | 
						kfree(device);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct device_type addrmatch_type = {
 | 
					static struct device_type addrmatch_type = {
 | 
				
			||||||
| 
						 | 
					@ -1135,6 +1136,7 @@ static const struct attribute_group *all_channel_counts_groups[] = {
 | 
				
			||||||
static void all_channel_counts_release(struct device *device)
 | 
					static void all_channel_counts_release(struct device *device)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	debugf1("Releasing device %s\n", dev_name(device));
 | 
						debugf1("Releasing device %s\n", dev_name(device));
 | 
				
			||||||
 | 
						kfree(device);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct device_type all_channel_counts_type = {
 | 
					static struct device_type all_channel_counts_type = {
 | 
				
			||||||
| 
						 | 
					@ -1177,32 +1179,44 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
 | 
				
			||||||
	if (rc < 0)
 | 
						if (rc < 0)
 | 
				
			||||||
		return rc;
 | 
							return rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pvt->addrmatch_dev.type = &addrmatch_type;
 | 
						pvt->addrmatch_dev = kzalloc(sizeof(*pvt->addrmatch_dev), GFP_KERNEL);
 | 
				
			||||||
	pvt->addrmatch_dev.bus = mci->dev.bus;
 | 
						if (!pvt->addrmatch_dev)
 | 
				
			||||||
	device_initialize(&pvt->addrmatch_dev);
 | 
							return rc;
 | 
				
			||||||
	pvt->addrmatch_dev.parent = &mci->dev;
 | 
					
 | 
				
			||||||
	dev_set_name(&pvt->addrmatch_dev, "inject_addrmatch");
 | 
						pvt->addrmatch_dev->type = &addrmatch_type;
 | 
				
			||||||
	dev_set_drvdata(&pvt->addrmatch_dev, mci);
 | 
						pvt->addrmatch_dev->bus = mci->dev.bus;
 | 
				
			||||||
 | 
						device_initialize(pvt->addrmatch_dev);
 | 
				
			||||||
 | 
						pvt->addrmatch_dev->parent = &mci->dev;
 | 
				
			||||||
 | 
						dev_set_name(pvt->addrmatch_dev, "inject_addrmatch");
 | 
				
			||||||
 | 
						dev_set_drvdata(pvt->addrmatch_dev, mci);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	debugf1("%s(): creating %s\n", __func__,
 | 
						debugf1("%s(): creating %s\n", __func__,
 | 
				
			||||||
		dev_name(&pvt->addrmatch_dev));
 | 
							dev_name(pvt->addrmatch_dev));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = device_add(&pvt->addrmatch_dev);
 | 
						rc = device_add(pvt->addrmatch_dev);
 | 
				
			||||||
	if (rc < 0)
 | 
						if (rc < 0)
 | 
				
			||||||
		return rc;
 | 
							return rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!pvt->is_registered) {
 | 
						if (!pvt->is_registered) {
 | 
				
			||||||
		pvt->chancounts_dev.type = &all_channel_counts_type;
 | 
							pvt->chancounts_dev = kzalloc(sizeof(*pvt->chancounts_dev),
 | 
				
			||||||
		pvt->chancounts_dev.bus = mci->dev.bus;
 | 
										      GFP_KERNEL);
 | 
				
			||||||
		device_initialize(&pvt->chancounts_dev);
 | 
							if (!pvt->chancounts_dev) {
 | 
				
			||||||
		pvt->chancounts_dev.parent = &mci->dev;
 | 
								put_device(pvt->addrmatch_dev);
 | 
				
			||||||
		dev_set_name(&pvt->chancounts_dev, "all_channel_counts");
 | 
								device_del(pvt->addrmatch_dev);
 | 
				
			||||||
		dev_set_drvdata(&pvt->chancounts_dev, mci);
 | 
								return rc;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							pvt->chancounts_dev->type = &all_channel_counts_type;
 | 
				
			||||||
 | 
							pvt->chancounts_dev->bus = mci->dev.bus;
 | 
				
			||||||
 | 
							device_initialize(pvt->chancounts_dev);
 | 
				
			||||||
 | 
							pvt->chancounts_dev->parent = &mci->dev;
 | 
				
			||||||
 | 
							dev_set_name(pvt->chancounts_dev, "all_channel_counts");
 | 
				
			||||||
 | 
							dev_set_drvdata(pvt->chancounts_dev, mci);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		debugf1("%s(): creating %s\n", __func__,
 | 
							debugf1("%s(): creating %s\n", __func__,
 | 
				
			||||||
			dev_name(&pvt->chancounts_dev));
 | 
								dev_name(pvt->chancounts_dev));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rc = device_add(&pvt->chancounts_dev);
 | 
							rc = device_add(pvt->chancounts_dev);
 | 
				
			||||||
		if (rc < 0)
 | 
							if (rc < 0)
 | 
				
			||||||
			return rc;
 | 
								return rc;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1221,11 +1235,11 @@ static void i7core_delete_sysfs_devices(struct mem_ctl_info *mci)
 | 
				
			||||||
	device_remove_file(&mci->dev, &dev_attr_inject_enable);
 | 
						device_remove_file(&mci->dev, &dev_attr_inject_enable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!pvt->is_registered) {
 | 
						if (!pvt->is_registered) {
 | 
				
			||||||
		put_device(&pvt->chancounts_dev);
 | 
							put_device(pvt->chancounts_dev);
 | 
				
			||||||
		device_del(&pvt->chancounts_dev);
 | 
							device_del(pvt->chancounts_dev);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	put_device(&pvt->addrmatch_dev);
 | 
						put_device(pvt->addrmatch_dev);
 | 
				
			||||||
	device_del(&pvt->addrmatch_dev);
 | 
						device_del(pvt->addrmatch_dev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************
 | 
					/****************************************************************************
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue