Message ID | 20170803215753.30553-7-toshi.kani@hpe.com (mailing list archive) |
---|---|
State | Rejected, archived |
Headers | show |
On Thu, Aug 03, 2017 at 03:57:52PM -0600, Toshi Kani wrote: > Only a single edac driver can be enabled for EDAC MC. When ghes_edac > is enabled, a regular edac driver for the CPU type / platform still > attempts to register itself and fails in edac_mc_add_mc(). > > Add edac_check_mc_owner() so that regular edac drivers can check > the owner of EDAC MC at the beginning of initialization. > > Also change the owner check to string comparison from address check. > > Signed-off-by: Toshi Kani <toshi.kani@hpe.com> > Cc: Borislav Petkov <bp@alien8.de> > Cc: Mauro Carvalho Chehab <mchehab@kernel.org> > Cc: Tony Luck <tony.luck@intel.com> > --- > drivers/edac/edac_mc.c | 15 ++++++++++++++- > drivers/edac/edac_mc.h | 12 ++++++++++++ > 2 files changed, 26 insertions(+), 1 deletion(-) > > diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c > index 4800721..52d8d5e 100644 > --- a/drivers/edac/edac_mc.c > +++ b/drivers/edac/edac_mc.c > @@ -701,6 +701,19 @@ struct mem_ctl_info *edac_mc_find(int idx) > } > EXPORT_SYMBOL(edac_mc_find); > > +/* > + * Returns: > + * 1 when EDAC MC is free or owned by the module name 1 for free OR owned?!? WTF? > + * 0 when EDAC MC is owned by other module > + */ > +int edac_check_mc_owner(const char *mod_name) > +{ > + if (edac_mc_owner && strcmp(edac_mc_owner, mod_name)) strncmp() of course, with sensible maximal string length. > + return 0; > + > + return 1; > +} > +EXPORT_SYMBOL(edac_check_mc_owner); EXPORT_SYMBOL_GPL > > /* FIXME - should a warning be printed if no error detection? correction? */ > int edac_mc_add_mc_with_groups(struct mem_ctl_info *mci, > @@ -742,7 +755,7 @@ int edac_mc_add_mc_with_groups(struct mem_ctl_info *mci, > #endif > mutex_lock(&mem_ctls_mutex); > > - if (edac_mc_owner && edac_mc_owner != mci->mod_name) { > + if (!edac_check_mc_owner(mci->mod_name)) { > ret = -EPERM; > goto fail0; > } > diff --git a/drivers/edac/edac_mc.h b/drivers/edac/edac_mc.h > index 5357800..0e95eba 100644 > --- a/drivers/edac/edac_mc.h > +++ b/drivers/edac/edac_mc.h > @@ -128,6 +128,18 @@ struct mem_ctl_info *edac_mc_alloc(unsigned mc_num, > unsigned sz_pvt); > > /** > + * > + * edac_check_mc_owner - Check the owner of EDAC MC > + * > + * @mod_name: pointer to the module name > + * > + * Returns: > + * 1 when EDAC MC is free or owned by the module name > + * 0 when EDAC MC is owned by other module > + */ Documenting that function only once is enough. > +extern int edac_check_mc_owner(const char *mod_name); > + > +/* > * edac_mc_add_mc_with_groups() - Insert the @mci structure into the mci > * global list and create sysfs entries associated with @mci structure. > *
Hi Toshi, [auto build test WARNING on pm/linux-next] [also build test WARNING on v4.13-rc3] [cannot apply to edac/linux_next bp/for-next next-20170804] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Toshi-Kani/enable-ghes_edac-on-selected-platforms/20170804-190846 base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next reproduce: make htmldocs All warnings (new ones prefixed by >>): WARNING: convert(1) not found, for SVG to PDF conversion install ImageMagick (https://www.imagemagick.org) include/linux/init.h:1: warning: no structured comments found include/linux/mod_devicetable.h:687: warning: Excess struct/union/enum/typedef member 'ver_major' description in 'fsl_mc_device_id' include/linux/mod_devicetable.h:687: warning: Excess struct/union/enum/typedef member 'ver_minor' description in 'fsl_mc_device_id' include/linux/kthread.h:26: warning: Excess function parameter '...' description in 'kthread_create' kernel/sys.c:1: warning: no structured comments found include/linux/device.h:968: warning: No description found for parameter 'dma_ops' drivers/dma-buf/seqno-fence.c:1: warning: no structured comments found >> drivers/edac/edac_mc.h:131: warning: Cannot understand * on line 131 - I thought it was a doc line include/linux/iio/iio.h:603: warning: No description found for parameter 'trig_readonly' include/linux/iio/trigger.h:151: warning: No description found for parameter 'indio_dev' include/linux/iio/trigger.h:151: warning: No description found for parameter 'trig' include/linux/device.h:969: warning: No description found for parameter 'dma_ops' drivers/ata/libata-eh.c:1449: warning: No description found for parameter 'link' drivers/ata/libata-eh.c:1449: warning: Excess function parameter 'ap' description in 'ata_eh_done' drivers/ata/libata-eh.c:1590: warning: No description found for parameter 'qc' drivers/ata/libata-eh.c:1590: warning: Excess function parameter 'dev' description in 'ata_eh_request_sense' drivers/mtd/nand/nand_base.c:2751: warning: Excess function parameter 'cached' description in 'nand_write_page' drivers/mtd/nand/nand_base.c:2751: warning: Excess function parameter 'cached' description in 'nand_write_page' arch/s390/include/asm/cmb.h:1: warning: no structured comments found drivers/scsi/scsi_lib.c:1116: warning: No description found for parameter 'rq' drivers/scsi/constants.c:1: warning: no structured comments found include/linux/usb/gadget.h:230: warning: No description found for parameter 'claimed' include/linux/usb/gadget.h:230: warning: No description found for parameter 'enabled' include/linux/usb/gadget.h:412: warning: No description found for parameter 'quirk_altset_not_supp' include/linux/usb/gadget.h:412: warning: No description found for parameter 'quirk_stall_not_supp' include/linux/usb/gadget.h:412: warning: No description found for parameter 'quirk_zlp_not_supp' fs/inode.c:1666: warning: No description found for parameter 'rcu' include/linux/jbd2.h:443: warning: No description found for parameter 'i_transaction' include/linux/jbd2.h:443: warning: No description found for parameter 'i_next_transaction' include/linux/jbd2.h:443: warning: No description found for parameter 'i_list' include/linux/jbd2.h:443: warning: No description found for parameter 'i_vfs_inode' include/linux/jbd2.h:443: warning: No description found for parameter 'i_flags' include/linux/jbd2.h:497: warning: No description found for parameter 'h_rsv_handle' include/linux/jbd2.h:497: warning: No description found for parameter 'h_reserved' include/linux/jbd2.h:497: warning: No description found for parameter 'h_type' include/linux/jbd2.h:497: warning: No description found for parameter 'h_line_no' include/linux/jbd2.h:497: warning: No description found for parameter 'h_start_jiffies' include/linux/jbd2.h:497: warning: No description found for parameter 'h_requested_credits' include/linux/jbd2.h:497: warning: No description found for parameter 'saved_alloc_context' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_chkpt_bhs' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_devname' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_average_commit_time' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_min_batch_time' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_max_batch_time' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_commit_callback' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_failed_commit' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_chksum_driver' include/linux/jbd2.h:1050: warning: No description found for parameter 'j_csum_seed' fs/jbd2/transaction.c:511: warning: No description found for parameter 'type' fs/jbd2/transaction.c:511: warning: No description found for parameter 'line_no' fs/jbd2/transaction.c:641: warning: No description found for parameter 'gfp_mask' include/drm/drm_drv.h:537: warning: No description found for parameter 'set_busid' include/drm/drm_drv.h:537: warning: No description found for parameter 'debugfs_init' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_open_object' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_close_object' include/drm/drm_drv.h:537: warning: No description found for parameter 'prime_handle_to_fd' include/drm/drm_drv.h:537: warning: No description found for parameter 'prime_fd_to_handle' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_export' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_import' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_pin' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_unpin' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_res_obj' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_get_sg_table' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_import_sg_table' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_vmap' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_vunmap' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_prime_mmap' include/drm/drm_drv.h:537: warning: No description found for parameter 'gem_vm_ops' include/drm/drm_drv.h:537: warning: No description found for parameter 'major' include/drm/drm_drv.h:537: warning: No description found for parameter 'minor' include/drm/drm_drv.h:537: warning: No description found for parameter 'patchlevel' include/drm/drm_drv.h:537: warning: No description found for parameter 'name' include/drm/drm_drv.h:537: warning: No description found for parameter 'desc' include/drm/drm_drv.h:537: warning: No description found for parameter 'date' include/drm/drm_drv.h:537: warning: No description found for parameter 'driver_features' include/drm/drm_drv.h:537: warning: No description found for parameter 'ioctls' include/drm/drm_drv.h:537: warning: No description found for parameter 'num_ioctls' include/drm/drm_drv.h:537: warning: No description found for parameter 'fops' include/drm/drm_color_mgmt.h:1: warning: no structured comments found drivers/gpu/drm/drm_syncobj.c:341: warning: Excess function parameter 'dev' description in 'drm_syncobj_open' drivers/gpu/drm/drm_syncobj.c:366: warning: Excess function parameter 'dev' description in 'drm_syncobj_release' include/drm/drm_syncobj.h:1: warning: no structured comments found drivers/gpu/drm/drm_syncobj.c:342: warning: Excess function parameter 'dev' description in 'drm_syncobj_open' drivers/gpu/drm/drm_syncobj.c:367: warning: Excess function parameter 'dev' description in 'drm_syncobj_release' drivers/gpu/host1x/bus.c:50: warning: Excess function parameter 'driver' description in 'host1x_subdev_add' Documentation/doc-guide/sphinx.rst:121: ERROR: Unknown target name: "sphinx c domain". kernel/sched/fair.c:7584: WARNING: Inline emphasis start-string without end-string. kernel/time/timer.c:1200: ERROR: Unexpected indentation. kernel/time/timer.c:1202: ERROR: Unexpected indentation. kernel/time/timer.c:1203: WARNING: Block quote ends without a blank line; unexpected unindent. include/linux/wait.h:108: WARNING: Block quote ends without a blank line; unexpected unindent. include/linux/wait.h:111: ERROR: Unexpected indentation. include/linux/wait.h:113: WARNING: Block quote ends without a blank line; unexpected unindent. kernel/time/hrtimer.c:991: WARNING: Block quote ends without a blank line; unexpected unindent. kernel/signal.c:323: WARNING: Inline literal start-string without end-string. kernel/rcu/tree.c:3187: ERROR: Unexpected indentation. kernel/rcu/tree.c:3214: ERROR: Unexpected indentation. kernel/rcu/tree.c:3215: WARNING: Bullet list ends without a blank line; unexpected unindent. include/linux/iio/iio.h:219: ERROR: Unexpected indentation. include/linux/iio/iio.h:220: WARNING: Block quote ends without a blank line; unexpected unindent. include/linux/iio/iio.h:226: WARNING: Definition list ends without a blank line; unexpected unindent. drivers/iio/industrialio-core.c:633: ERROR: Unknown target name: "iio_val". drivers/iio/industrialio-core.c:640: ERROR: Unknown target name: "iio_val". drivers/ata/libata-core.c:5906: ERROR: Unknown target name: "hw". drivers/message/fusion/mptbase.c:5051: WARNING: Definition list ends without a blank line; unexpected unindent. drivers/tty/serial/serial_core.c:1897: WARNING: Definition list ends without a blank line; unexpected unindent. drivers/pci/pci.c:3470: ERROR: Unexpected indentation. vim +131 drivers/edac/edac_mc.h 97 98 /** 99 * edac_mc_alloc() - Allocate and partially fill a struct &mem_ctl_info. 100 * 101 * @mc_num: Memory controller number 102 * @n_layers: Number of MC hierarchy layers 103 * @layers: Describes each layer as seen by the Memory Controller 104 * @sz_pvt: size of private storage needed 105 * 106 * 107 * Everything is kmalloc'ed as one big chunk - more efficient. 108 * Only can be used if all structures have the same lifetime - otherwise 109 * you have to allocate and initialize your own structures. 110 * 111 * Use edac_mc_free() to free mc structures allocated by this function. 112 * 113 * .. note:: 114 * 115 * drivers handle multi-rank memories in different ways: in some 116 * drivers, one multi-rank memory stick is mapped as one entry, while, in 117 * others, a single multi-rank memory stick would be mapped into several 118 * entries. Currently, this function will allocate multiple struct dimm_info 119 * on such scenarios, as grouping the multiple ranks require drivers change. 120 * 121 * Returns: 122 * On success, return a pointer to struct mem_ctl_info pointer; 123 * %NULL otherwise 124 */ 125 struct mem_ctl_info *edac_mc_alloc(unsigned mc_num, 126 unsigned n_layers, 127 struct edac_mc_layer *layers, 128 unsigned sz_pvt); 129 130 /** > 131 * 132 * edac_check_mc_owner - Check the owner of EDAC MC 133 * 134 * @mod_name: pointer to the module name 135 * 136 * Returns: 137 * 1 when EDAC MC is free or owned by the module name 138 * 0 when EDAC MC is owned by other module 139 */ 140 extern int edac_check_mc_owner(const char *mod_name); 141 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
On Fri, 2017-08-04 at 21:06 +0800, kbuild test robot wrote: > Hi Toshi, > > [auto build test WARNING on pm/linux-next] > [also build test WARNING on v4.13-rc3] > [cannot apply to edac/linux_next bp/for-next next-20170804] > [if your patch is applied to the wrong git tree, please drop us a > note to help improve the system] > > url: https://github.com/0day-ci/linux/commits/Toshi-Kani/enable-gh > es_edac-on-selected-platforms/20170804-190846 > base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux- > pm.git linux-next > reproduce: make htmldocs > > All warnings (new ones prefixed by >>): : > unsigned sz_pvt); > 129 > 130 /** > > 131 * Removed this extra commented line. Thanks! -Toshi > 132 * edac_check_mc_owner - Check the owner of EDAC MC > 133 * > 134 * @mod_name: pointer to the module name > 135 * > 136 * Returns: > 137 * 1 when EDAC MC is free or owned by the module > name > 138 * 0 when EDAC MC is owned by other module > 139 */ > 140 extern int edac_check_mc_owner(const char *mod_name); > 141
T24gRnJpLCAyMDE3LTA4LTA0IGF0IDEwOjMwICswMjAwLCBCb3Jpc2xhdiBQZXRrb3Ygd3JvdGU6 DQo+IE9uIFRodSwgQXVnIDAzLCAyMDE3IGF0IDAzOjU3OjUyUE0gLTA2MDAsIFRvc2hpIEthbmkg d3JvdGU6DQo+ID4gT25seSBhIHNpbmdsZSBlZGFjIGRyaXZlciBjYW4gYmUgZW5hYmxlZCBmb3Ig RURBQyBNQy7CoMKgV2hlbg0KPiA+IGdoZXNfZWRhYyBpcyBlbmFibGVkLCBhIHJlZ3VsYXIgZWRh YyBkcml2ZXIgZm9yIHRoZSBDUFUgdHlwZSAvDQo+ID4gcGxhdGZvcm0gc3RpbGwgYXR0ZW1wdHMg dG8gcmVnaXN0ZXIgaXRzZWxmIGFuZCBmYWlscyBpbg0KPiA+IGVkYWNfbWNfYWRkX21jKCkuDQo+ ID4gDQo+ID4gQWRkIGVkYWNfY2hlY2tfbWNfb3duZXIoKSBzbyB0aGF0IHJlZ3VsYXIgZWRhYyBk cml2ZXJzIGNhbiBjaGVjaw0KPiA+IHRoZSBvd25lciBvZiBFREFDIE1DIGF0IHRoZSBiZWdpbm5p bmcgb2YgaW5pdGlhbGl6YXRpb24uDQo+ID4gDQo+ID4gQWxzbyBjaGFuZ2UgdGhlIG93bmVyIGNo ZWNrIHRvIHN0cmluZyBjb21wYXJpc29uIGZyb20gYWRkcmVzcw0KPiA+IGNoZWNrLg0KPiA+IA0K PiA+IFNpZ25lZC1vZmYtYnk6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHBlLmNvbT4NCj4gPiBD YzogQm9yaXNsYXYgUGV0a292IDxicEBhbGllbjguZGU+DQo+ID4gQ2M6IE1hdXJvIENhcnZhbGhv IENoZWhhYiA8bWNoZWhhYkBrZXJuZWwub3JnPg0KPiA+IENjOiBUb255IEx1Y2sgPHRvbnkubHVj a0BpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gwqBkcml2ZXJzL2VkYWMvZWRhY19tYy5jIHzCoMKg wqAxNSArKysrKysrKysrKysrKy0NCj4gPiDCoGRyaXZlcnMvZWRhYy9lZGFjX21jLmggfMKgwqDC oDEyICsrKysrKysrKysrKw0KPiA+IMKgMiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pDQo+ID4gDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFj X21jLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tYy5jDQo+ID4gaW5kZXggNDgwMDcyMS4uNTJkOGQ1 ZSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jDQo+ID4gKysrIGIvZHJp dmVycy9lZGFjL2VkYWNfbWMuYw0KPiA+IEBAIC03MDEsNiArNzAxLDE5IEBAIHN0cnVjdCBtZW1f Y3RsX2luZm8gKmVkYWNfbWNfZmluZChpbnQgaWR4KQ0KPiA+IMKgfQ0KPiA+IMKgRVhQT1JUX1NZ TUJPTChlZGFjX21jX2ZpbmQpOw0KPiA+IMKgDQo+ID4gKy8qDQo+ID4gKyAqIFJldHVybnM6DQo+ ID4gKyAqCTEgd2hlbiBFREFDIE1DIGlzIGZyZWUgb3Igb3duZWQgYnkgdGhlIG1vZHVsZSBuYW1l DQo+IA0KPiAxIGZvciBmcmVlIE9SIG93bmVkPyE/IFdURj8NCg0KMSBtZWFucyB0aGUgY2FsbGVy J3MgaW5pdCBmdW5jdGlvbiBjYW4gY29udGludWUgaXRzIGluaXRpYWxpemF0aW9uIC0tDQpzdWNo IGNvbmRpdGlvbnMgYXJlIGZyZWUgb3Igb3duZWQgYnkgaXRzZWxmLg0KDQo+ID4gKyAqCTAgd2hl biBFREFDIE1DIGlzIG93bmVkIGJ5IG90aGVyIG1vZHVsZQ0KPiA+ICsgKi8NCj4gPiAraW50IGVk YWNfY2hlY2tfbWNfb3duZXIoY29uc3QgY2hhciAqbW9kX25hbWUpDQo+ID4gK3sNCj4gPiArCWlm IChlZGFjX21jX293bmVyICYmIHN0cmNtcChlZGFjX21jX293bmVyLCBtb2RfbmFtZSkpDQo+IA0K PiBzdHJuY21wKCkgb2YgY291cnNlLCB3aXRoIHNlbnNpYmxlIG1heGltYWwgc3RyaW5nIGxlbmd0 aC4NCg0Kc3RyY21wKCkgYnJlYWtzIHdoZW4gZWl0aGVyIGVkYWNfbWNfb3duZXIgb3IgbW9kX25h bWUgc3RyaW5nIGVuZHMuIA0Kc3RybmNtcCgpIGFzc3VtZXMgbW9kX25hbWUgc3RyaW5nIGlzIHZh bGlkIGZvciBhIGdpdmVuIGxlbmd0aC4gIEhlbmNlLA0KdGhlIGNhbGxlciBuZWVkcyB0byBzdXBw bHkgdGhlIGxlbmd0aCB0byB0aGlzIGZ1bmN0aW9uIGJ5IGFkZGluZyBhIG5ldw0KYXJnICdsZW5n dGgnLCB3aGljaCBkb2VzIG5vdCBtYWtlIGl0IGFueSBzYWZlci4gIEkgdGhpbmsgdXNpbmcNCnN0 cm5jbXAoKSB3b3VsZCByZXF1aXJlIGFsbCBlZGFjIGRyaXZlcnMgdG8gZGVjbGFyZSBhIHByZS1k ZWZpbmVkDQpsZW5ndGggb2YgbW9kdWxlIG5hbWUuLi4NCg0KPiA+ICsJCXJldHVybiAwOw0KPiA+ ICsNCj4gPiArCXJldHVybiAxOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0woZWRhY19jaGVj a19tY19vd25lcik7DQo+IA0KPiBFWFBPUlRfU1lNQk9MX0dQTA0KDQpXaWxsIGRvLg0KDQo+ID4g wqANCj4gPiDCoC8qIEZJWE1FIC0gc2hvdWxkIGEgd2FybmluZyBiZSBwcmludGVkIGlmIG5vIGVy cm9yIGRldGVjdGlvbj8NCj4gPiBjb3JyZWN0aW9uPyAqLw0KPiA+IMKgaW50IGVkYWNfbWNfYWRk X21jX3dpdGhfZ3JvdXBzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwNCj4gPiBAQCAtNzQyLDcg Kzc1NSw3IEBAIGludCBlZGFjX21jX2FkZF9tY193aXRoX2dyb3VwcyhzdHJ1Y3QNCj4gPiBtZW1f Y3RsX2luZm8gKm1jaSwNCj4gPiDCoCNlbmRpZg0KPiA+IMKgCW11dGV4X2xvY2soJm1lbV9jdGxz X211dGV4KTsNCj4gPiDCoA0KPiA+IC0JaWYgKGVkYWNfbWNfb3duZXIgJiYgZWRhY19tY19vd25l ciAhPSBtY2ktPm1vZF9uYW1lKSB7DQo+ID4gKwlpZiAoIWVkYWNfY2hlY2tfbWNfb3duZXIobWNp LT5tb2RfbmFtZSkpIHsNCj4gPiDCoAkJcmV0ID0gLUVQRVJNOw0KPiA+IMKgCQlnb3RvIGZhaWww Ow0KPiA+IMKgCX0NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWMuaCBiL2Ry aXZlcnMvZWRhYy9lZGFjX21jLmgNCj4gPiBpbmRleCA1MzU3ODAwLi4wZTk1ZWJhIDEwMDY0NA0K PiA+IC0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX21jLmgNCj4gPiArKysgYi9kcml2ZXJzL2VkYWMv ZWRhY19tYy5oDQo+ID4gQEAgLTEyOCw2ICsxMjgsMTggQEAgc3RydWN0IG1lbV9jdGxfaW5mbyAq ZWRhY19tY19hbGxvYyh1bnNpZ25lZA0KPiA+IG1jX251bSwNCj4gPiDCoAkJCQnCoMKgwqB1bnNp Z25lZCBzel9wdnQpOw0KPiA+IMKgDQo+ID4gwqAvKioNCj4gPiArICoNCj4gPiArICogZWRhY19j aGVja19tY19vd25lciAtIENoZWNrIHRoZSBvd25lciBvZiBFREFDIE1DDQo+ID4gKyAqDQo+ID4g KyAqIEBtb2RfbmFtZTogcG9pbnRlciB0byB0aGUgbW9kdWxlIG5hbWUNCj4gPiArICoNCj4gPiAr ICogUmV0dXJuczoNCj4gPiArICoJMSB3aGVuIEVEQUMgTUMgaXMgZnJlZSBvciBvd25lZCBieSB0 aGUgbW9kdWxlIG5hbWUNCj4gPiArICoJMCB3aGVuIEVEQUMgTUMgaXMgb3duZWQgYnkgb3RoZXIg bW9kdWxlDQo+ID4gKyAqLw0KPiANCj4gRG9jdW1lbnRpbmcgdGhhdCBmdW5jdGlvbiBvbmx5IG9u Y2UgaXMgZW5vdWdoLg0KDQpJIHBlcnNvbmFsbHkgcHJlZmVyIHRvIGRvY3VtZW50IGluIC5jLCBi dXQgc2luY2Ugb3RoZXIgZnVuY3MgZG9jdW1lbnRlZA0KaW4gZGFjX21jLmgsIEkgd2lsbCBrZWVw IHRoZSBzYW1lIHN0eWxlLiAgV2lsbCByZW1vdmUgdGhlIGRvY3VtZW50IGluDQplZGFjX21jLmMu IA0KDQo+ID4gK2V4dGVybiBpbnQgZWRhY19jaGVja19tY19vd25lcihjb25zdCBjaGFyICptb2Rf bmFtZSk7DQo+ID4gKw0KPiA+ICsvKg0KPiA+IMKgICogZWRhY19tY19hZGRfbWNfd2l0aF9ncm91 cHMoKSAtIEluc2VydCB0aGUgQG1jaSBzdHJ1Y3R1cmUgaW50bw0KPiA+IHRoZSBtY2kNCj4gPiDC oCAqCWdsb2JhbCBsaXN0IGFuZCBjcmVhdGUgc3lzZnMgZW50cmllcyBhc3NvY2lhdGVkIHdpdGgN Cj4gPiBAbWNpIHN0cnVjdHVyZS4NCj4gPiDCoCAqDQoNClRoYW5rcywNCi1Ub3NoaQ0K -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Aug 04, 2017 at 09:35:05PM +0000, Kani, Toshimitsu wrote: > 1 means the caller's init function can continue its initialization -- > such conditions are free or owned by itself. Make that: edac_get_owner(void) to return the owner string or NULL if there's no owner. The caller can then do the string checking and do strncmp() to limit the string length being checked.
T24gU2F0LCAyMDE3LTA4LTA1IGF0IDA3OjQ0ICswMjAwLCBCb3Jpc2xhdiBQZXRrb3Ygd3JvdGU6 DQo+IE9uIEZyaSwgQXVnIDA0LCAyMDE3IGF0IDA5OjM1OjA1UE0gKzAwMDAsIEthbmksIFRvc2hp bWl0c3Ugd3JvdGU6DQo+ID4gMSBtZWFucyB0aGUgY2FsbGVyJ3MgaW5pdCBmdW5jdGlvbiBjYW4g Y29udGludWUgaXRzIGluaXRpYWxpemF0aW9uDQo+ID4gLS0NCj4gPiBzdWNoIGNvbmRpdGlvbnMg YXJlIGZyZWUgb3Igb3duZWQgYnkgaXRzZWxmLg0KPiANCj4gTWFrZSB0aGF0Og0KPiANCj4gCWVk YWNfZ2V0X293bmVyKHZvaWQpDQo+IA0KPiB0byByZXR1cm4gdGhlIG93bmVyIHN0cmluZyBvciBO VUxMIGlmIHRoZXJlJ3Mgbm8gb3duZXIuDQo+IA0KPiBUaGUgY2FsbGVyIGNhbiB0aGVuIGRvIHRo ZSBzdHJpbmcgY2hlY2tpbmcgYW5kIGRvIHN0cm5jbXAoKSB0byBsaW1pdA0KPiB0aGUgc3RyaW5n IGxlbmd0aCBiZWluZyBjaGVja2VkLg0KDQpHb29kIGlkZWEhICBXaWxsIGRvLg0KDQpUaGFua3Ms DQotVG9zaGkNCg0K -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index 4800721..52d8d5e 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c @@ -701,6 +701,19 @@ struct mem_ctl_info *edac_mc_find(int idx) } EXPORT_SYMBOL(edac_mc_find); +/* + * Returns: + * 1 when EDAC MC is free or owned by the module name + * 0 when EDAC MC is owned by other module + */ +int edac_check_mc_owner(const char *mod_name) +{ + if (edac_mc_owner && strcmp(edac_mc_owner, mod_name)) + return 0; + + return 1; +} +EXPORT_SYMBOL(edac_check_mc_owner); /* FIXME - should a warning be printed if no error detection? correction? */ int edac_mc_add_mc_with_groups(struct mem_ctl_info *mci, @@ -742,7 +755,7 @@ int edac_mc_add_mc_with_groups(struct mem_ctl_info *mci, #endif mutex_lock(&mem_ctls_mutex); - if (edac_mc_owner && edac_mc_owner != mci->mod_name) { + if (!edac_check_mc_owner(mci->mod_name)) { ret = -EPERM; goto fail0; } diff --git a/drivers/edac/edac_mc.h b/drivers/edac/edac_mc.h index 5357800..0e95eba 100644 --- a/drivers/edac/edac_mc.h +++ b/drivers/edac/edac_mc.h @@ -128,6 +128,18 @@ struct mem_ctl_info *edac_mc_alloc(unsigned mc_num, unsigned sz_pvt); /** + * + * edac_check_mc_owner - Check the owner of EDAC MC + * + * @mod_name: pointer to the module name + * + * Returns: + * 1 when EDAC MC is free or owned by the module name + * 0 when EDAC MC is owned by other module + */ +extern int edac_check_mc_owner(const char *mod_name); + +/* * edac_mc_add_mc_with_groups() - Insert the @mci structure into the mci * global list and create sysfs entries associated with @mci structure. *
Only a single edac driver can be enabled for EDAC MC. When ghes_edac is enabled, a regular edac driver for the CPU type / platform still attempts to register itself and fails in edac_mc_add_mc(). Add edac_check_mc_owner() so that regular edac drivers can check the owner of EDAC MC at the beginning of initialization. Also change the owner check to string comparison from address check. Signed-off-by: Toshi Kani <toshi.kani@hpe.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Cc: Tony Luck <tony.luck@intel.com> --- drivers/edac/edac_mc.c | 15 ++++++++++++++- drivers/edac/edac_mc.h | 12 ++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html