Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

platform/x86/intel/vsec: Use cleanup.h

Use cleanup.h helpers to handle cleanup of resources in
intel_vsec_add_dev() after failures.

Signed-off-by: David E. Box <david.e.box@linux.intel.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20231129222132.2331261-6-david.e.box@linux.intel.com
Signed-off-by: Hans de Goede <hdegoede@redhat.com>

authored by

David E. Box and committed by
Hans de Goede
1d1b4770 0a0a52ab

+11 -7
+11 -7
drivers/platform/x86/intel/vsec.c
··· 15 15 16 16 #include <linux/auxiliary_bus.h> 17 17 #include <linux/bits.h> 18 + #include <linux/cleanup.h> 18 19 #include <linux/delay.h> 19 20 #include <linux/kernel.h> 20 21 #include <linux/idr.h> ··· 149 148 static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *header, 150 149 struct intel_vsec_platform_info *info) 151 150 { 152 - struct intel_vsec_device *intel_vsec_dev; 153 - struct resource *res, *tmp; 151 + struct intel_vsec_device __free(kfree) *intel_vsec_dev = NULL; 152 + struct resource __free(kfree) *res = NULL; 153 + struct resource *tmp; 154 154 unsigned long quirks = info->quirks; 155 155 int i; 156 156 ··· 173 171 return -ENOMEM; 174 172 175 173 res = kcalloc(header->num_entries, sizeof(*res), GFP_KERNEL); 176 - if (!res) { 177 - kfree(intel_vsec_dev); 174 + if (!res) 178 175 return -ENOMEM; 179 - } 180 176 181 177 if (quirks & VSEC_QUIRK_TABLE_SHIFT) 182 178 header->offset >>= TABLE_OFFSET_SHIFT; ··· 192 192 } 193 193 194 194 intel_vsec_dev->pcidev = pdev; 195 - intel_vsec_dev->resource = res; 195 + intel_vsec_dev->resource = no_free_ptr(res); 196 196 intel_vsec_dev->num_resources = header->num_entries; 197 197 intel_vsec_dev->quirks = info->quirks; 198 198 ··· 201 201 else 202 202 intel_vsec_dev->ida = &intel_vsec_ida; 203 203 204 - return intel_vsec_add_aux(pdev, NULL, intel_vsec_dev, 204 + /* 205 + * Pass the ownership of intel_vsec_dev and resource within it to 206 + * intel_vsec_add_aux() 207 + */ 208 + return intel_vsec_add_aux(pdev, NULL, no_free_ptr(intel_vsec_dev), 205 209 intel_vsec_name(header->id)); 206 210 } 207 211