linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL)
       [not found] <cover.1438331416.git.viresh.kumar@linaro.org>
@ 2015-07-31  8:38 ` Viresh Kumar
  2015-07-31  8:56   ` Kirill A. Shutemov
  0 siblings, 1 reply; 8+ messages in thread
From: Viresh Kumar @ 2015-07-31  8:38 UTC (permalink / raw)
  To: akpm
  Cc: linaro-kernel, linux-kernel, Viresh Kumar, Aneesh Kumar K.V,
	David Rientjes, Ebru Akagunduz, Johannes Weiner,
	Kirill A. Shutemov, open list:MEMORY MANAGEMENT, Mel Gorman,
	Michal Hocko, Vlastimil Babka

IS_ERR(_OR_NULL) already contain an 'unlikely' compiler flag and there
is no need to do that again from its callers. Drop it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 mm/huge_memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index c107094f79ba..e14652480c59 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -149,7 +149,7 @@ static int start_stop_khugepaged(void)
 		if (!khugepaged_thread)
 			khugepaged_thread = kthread_run(khugepaged, NULL,
 							"khugepaged");
-		if (unlikely(IS_ERR(khugepaged_thread))) {
+		if (IS_ERR(khugepaged_thread)) {
 			pr_err("khugepaged: kthread_run(khugepaged) failed\n");
 			err = PTR_ERR(khugepaged_thread);
 			khugepaged_thread = NULL;
-- 
2.4.0

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL)
  2015-07-31  8:38 ` [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL) Viresh Kumar
@ 2015-07-31  8:56   ` Kirill A. Shutemov
  2015-07-31  9:32     ` yalin wang
  0 siblings, 1 reply; 8+ messages in thread
From: Kirill A. Shutemov @ 2015-07-31  8:56 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: akpm, linaro-kernel, linux-kernel, Aneesh Kumar K.V,
	David Rientjes, Ebru Akagunduz, Johannes Weiner,
	Kirill A. Shutemov, open list:MEMORY MANAGEMENT, Mel Gorman,
	Michal Hocko, Vlastimil Babka

On Fri, Jul 31, 2015 at 02:08:34PM +0530, Viresh Kumar wrote:
> IS_ERR(_OR_NULL) already contain an 'unlikely' compiler flag and there
> is no need to do that again from its callers. Drop it.
> 
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>

-- 
 Kirill A. Shutemov

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL)
  2015-07-31  8:56   ` Kirill A. Shutemov
@ 2015-07-31  9:32     ` yalin wang
  2015-07-31  9:34       ` Viresh Kumar
  0 siblings, 1 reply; 8+ messages in thread
From: yalin wang @ 2015-07-31  9:32 UTC (permalink / raw)
  To: Kirill A. Shutemov
  Cc: Viresh Kumar, Andrew Morton, linaro-kernel, open list,
	Aneesh Kumar K.V, David Rientjes, Ebru Akagunduz, Johannes Weiner,
	Kirill A. Shutemov, open list:MEMORY MANAGEMENT, Mel Gorman,
	Michal Hocko, Vlastimil Babka


> On Jul 31, 2015, at 16:56, Kirill A. Shutemov <kirill@shutemov.name> wrote:
> 
> On Fri, Jul 31, 2015 at 02:08:34PM +0530, Viresh Kumar wrote:
>> IS_ERR(_OR_NULL) already contain an 'unlikely' compiler flag and there
>> is no need to do that again from its callers. Drop it.
>> 
>> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> 
> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> 
> -- 
> Kirill A. Shutemov
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
search in code, there are lots of using like this , does need add this check into checkpatch ?

# grep -r 'likely.*IS_ERR'  .
./include/linux/blk-cgroup.h:	if (unlikely(IS_ERR(blkg)))
./fs/nfs/objlayout/objio_osd.c:	if (unlikely(IS_ERR(od))) {
./fs/cifs/readdir.c:	if (unlikely(IS_ERR(dentry)))
./fs/ext4/extents.c:		if (unlikely(IS_ERR(bh))) {
./fs/ext4/extents.c:		if (unlikely(IS_ERR(path1))) {
./fs/ext4/extents.c:		if (unlikely(IS_ERR(path2))) {
./fs/ext4/namei.c:				if (unlikely(IS_ERR(bh))) {
./fs/ntfs/lcnalloc.c:	if (likely(page && !IS_ERR(page))) {
./fs/ntfs/runlist.c:	if (likely(!IS_ERR(old_rl)))
./fs/ntfs/mft.c:	if (likely(!IS_ERR(page))) {
./fs/ntfs/mft.c:	if (likely(!IS_ERR(m)))
./fs/ntfs/mft.c:		if (likely(!IS_ERR(m))) {
./fs/ntfs/mft.c:	if (unlikely(IS_ERR(rl) || !rl->length || rl->lcn < 0)) {
./fs/ntfs/mft.c:	if (unlikely(IS_ERR(rl) || !rl->length || rl->lcn < 0)) {
./fs/ntfs/mft.c:		if (likely(!IS_ERR(rl2)))
./fs/ntfs/inode.c:	if (unlikely(err || IS_ERR(m))) {
./fs/ntfs/namei.c:		if (likely(!IS_ERR(dent_inode))) {
./fs/ntfs/super.c:	if (unlikely(IS_ERR(tmp_ino) || is_bad_inode(tmp_ino))) {
./fs/namei.c:			if (unlikely(IS_ERR(s)))
./fs/namei.c:	if (unlikely(IS_ERR(filename)))
./fs/gfs2/dir.c:	if (unlikely(dent == NULL || IS_ERR(dent))) {
./fs/ecryptfs/inode.c:	if (unlikely(IS_ERR(ecryptfs_inode))) {
./fs/ncpfs/dir.c:	if (unlikely(IS_ERR(newdent)))
./fs/proc/proc_sysctl.c:	if (unlikely(IS_ERR(subdir))) {
Binary file ./.git/objects/pack/pack-4a5df920db8b8d9df9a91893c9567b4b2f15b782.pack matches
./drivers/target/tcm_fc/tfc_cmd.c:	if (unlikely(IS_ERR(fp))) {
./drivers/thermal/intel_powerclamp.c:		if (likely(!IS_ERR(thread))) {
./drivers/thermal/intel_powerclamp.c:		if (likely(!IS_ERR(thread))) {
./drivers/gpu/drm/vmwgfx/vmwgfx_drv.c:	if (unlikely(IS_ERR(vmaster))) {
./drivers/gpu/drm/vmwgfx/vmwgfx_context.c:		if (unlikely(IS_ERR(uctx->man))) {
./drivers/gpu/drm/ttm/ttm_tt.c:		if (unlikely(IS_ERR(swap_storage))) {
./drivers/gpu/drm/ttm/ttm_tt.c:		if (unlikely(IS_ERR(to_page))) {
./drivers/scsi/bnx2fc/bnx2fc_fcoe.c:	if (likely(!IS_ERR(thread))) {
./drivers/scsi/bnx2i/bnx2i_init.c:	if (likely(!IS_ERR(thread))) {
./drivers/scsi/fcoe/fcoe.c:	if (likely(!IS_ERR(thread))) {
./drivers/base/power/opp.c:	if (unlikely(IS_ERR_OR_NULL(dev))) {
./drivers/base/power/opp.c:	if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available)
./drivers/base/power/opp.c:	if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available)
./drivers/tty/serial/serial_core.c:	if (likely(!IS_ERR(tty_dev))) {
./drivers/rtc/rtc-bfin.c:	if (unlikely(IS_ERR(rtc->rtc_dev)))
./drivers/rtc/rtc-gemini.c:	if (likely(IS_ERR(rtc->rtc_dev)))
./drivers/rtc/interface.c:	if (unlikely(IS_ERR_OR_NULL(rtc)))
./drivers/md/dm-snap-persistent.c:		if (unlikely(IS_ERR(area))) {
./drivers/md/dm-verity.c:	if (unlikely(IS_ERR(data)))
./drivers/md/persistent-data/dm-block-manager.c:	if (unlikely(IS_ERR(p)))
./drivers/md/persistent-data/dm-block-manager.c:	if (unlikely(IS_ERR(p)))
./drivers/md/persistent-data/dm-block-manager.c:	if (unlikely(IS_ERR(p)))
./drivers/md/persistent-data/dm-block-manager.c:	if (unlikely(IS_ERR(p)))
./drivers/staging/lustre/include/linux/libcfs/libcfs.h:	if (unlikely(IS_ERR(ptr) || ptr == NULL))
./drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c:		if (likely(!IS_ERR(pfmr))) {
./drivers/staging/lustre/lustre/obdclass/lu_object.c:	if (unlikely(IS_ERR(o)))
./drivers/staging/lustre/lustre/obdclass/lu_object.c:	if (unlikely(IS_ERR(o)))
./drivers/staging/lustre/lustre/obdclass/lu_object.c:	if (likely(IS_ERR(shadow) && PTR_ERR(shadow) == -ENOENT)) {
./drivers/staging/lustre/lustre/obdclass/lu_object.c:			if (unlikely(IS_ERR(value)))
./drivers/staging/android/ashmem.c:		if (unlikely(IS_ERR(vmfile))) {
./drivers/input/mouse/alps.c:	} else if (unlikely(IS_ERR_OR_NULL(priv->dev3))) {
./drivers/net/ethernet/marvell/sky2.c:	if (unlikely(status & Y2_IS_ERROR))
./drivers/net/ethernet/ti/netcp_core.c:	if (unlikely(IS_ERR_OR_NULL(desc))) {
./drivers/net/ethernet/ti/netcp_core.c:		if (unlikely(IS_ERR_OR_NULL(ndesc))) {
./drivers/devfreq/devfreq.c:	if (unlikely(IS_ERR_OR_NULL(dev))) {
./drivers/devfreq/devfreq.c:	if (unlikely(IS_ERR_OR_NULL(name))) {
./drivers/misc/c2port/core.c:	if (unlikely(IS_ERR(c2dev->dev))) {
./net/socket.c:	if (unlikely(IS_ERR(file))) {
./net/socket.c:	if (likely(!IS_ERR(newfile))) {
./net/socket.c:	if (unlikely(IS_ERR(newfile1))) {
./net/socket.c:	if (unlikely(IS_ERR(newfile))) {
./net/openvswitch/datapath.c:		if (unlikely(IS_ERR(reply))) {
./net/openvswitch/datapath.c:		if (likely(!IS_ERR(reply))) {
./net/sctp/socket.c:	if (unlikely(IS_ERR(newfile))) {
./mm/huge_memory.c:		if (unlikely(IS_ERR(khugepaged_thread))) {

Thanks



--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL)
  2015-07-31  9:32     ` yalin wang
@ 2015-07-31  9:34       ` Viresh Kumar
  2015-07-31 10:28         ` Joe Perches
  0 siblings, 1 reply; 8+ messages in thread
From: Viresh Kumar @ 2015-07-31  9:34 UTC (permalink / raw)
  To: yalin wang, Joe Perches
  Cc: Kirill A. Shutemov, Andrew Morton, linaro-kernel, open list,
	Aneesh Kumar K.V, David Rientjes, Ebru Akagunduz, Johannes Weiner,
	Kirill A. Shutemov, open list:MEMORY MANAGEMENT, Mel Gorman,
	Michal Hocko, Vlastimil Babka

On 31-07-15, 17:32, yalin wang wrote:
> 
> > On Jul 31, 2015, at 16:56, Kirill A. Shutemov <kirill@shutemov.name> wrote:
> > 
> > On Fri, Jul 31, 2015 at 02:08:34PM +0530, Viresh Kumar wrote:
> >> IS_ERR(_OR_NULL) already contain an 'unlikely' compiler flag and there
> >> is no need to do that again from its callers. Drop it.
> >> 
> >> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> > 
> > Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>

> search in code, there are lots of using like this , does need add this check into checkpatch ?

cc'd Joe for that. :)

> # grep -r 'likely.*IS_ERR'  .
> ./include/linux/blk-cgroup.h:	if (unlikely(IS_ERR(blkg)))
> ./fs/nfs/objlayout/objio_osd.c:	if (unlikely(IS_ERR(od))) {
> ./fs/cifs/readdir.c:	if (unlikely(IS_ERR(dentry)))
> ./fs/ext4/extents.c:		if (unlikely(IS_ERR(bh))) {
> ./fs/ext4/extents.c:		if (unlikely(IS_ERR(path1))) {
> ./fs/ext4/extents.c:		if (unlikely(IS_ERR(path2))) {

Btw, my series has fixed all of them :)

-- 
viresh

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL)
  2015-07-31  9:34       ` Viresh Kumar
@ 2015-07-31 10:28         ` Joe Perches
  2015-07-31 11:06           ` Viresh Kumar
  0 siblings, 1 reply; 8+ messages in thread
From: Joe Perches @ 2015-07-31 10:28 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: yalin wang, Kirill A. Shutemov, Andrew Morton, linaro-kernel,
	open list, Aneesh Kumar K.V, David Rientjes, Ebru Akagunduz,
	Johannes Weiner, Kirill A. Shutemov, open list:MEMORY MANAGEMENT,
	Mel Gorman, Michal Hocko, Vlastimil Babka

On Fri, 2015-07-31 at 15:04 +0530, Viresh Kumar wrote:
> On 31-07-15, 17:32, yalin wang wrote:
> > 
> > > On Jul 31, 2015, at 16:56, Kirill A. Shutemov <kirill@shutemov.name> wrote:
> > > 
> > > On Fri, Jul 31, 2015 at 02:08:34PM +0530, Viresh Kumar wrote:
> > >> IS_ERR(_OR_NULL) already contain an 'unlikely' compiler flag and there
> > >> is no need to do that again from its callers. Drop it.
> > >> 
> > >> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> > > 
> > > Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> 
> > search in code, there are lots of using like this , does need add this check into checkpatch ?
> 
> cc'd Joe for that. :)
> 
> > # grep -r 'likely.*IS_ERR'  .
> > ./include/linux/blk-cgroup.h:	if (unlikely(IS_ERR(blkg)))
> > ./fs/nfs/objlayout/objio_osd.c:	if (unlikely(IS_ERR(od))) {
> > ./fs/cifs/readdir.c:	if (unlikely(IS_ERR(dentry)))
> > ./fs/ext4/extents.c:		if (unlikely(IS_ERR(bh))) {
> > ./fs/ext4/extents.c:		if (unlikely(IS_ERR(path1))) {
> > ./fs/ext4/extents.c:		if (unlikely(IS_ERR(path2))) {
> 
> Btw, my series has fixed all of them :)

If it's all fixed, then it's unlikely to be needed in checkpatch.

But given the unlikely was added when using gcc3.4, I wonder if
it's still appropriate to use unlikely in IS_ERR at all.

---

commit b5acea523151452c37cd428437e7576a291dd146
Author: Andrew Morton <akpm@osdl.org>
Date:   Sun Aug 22 23:04:49 2004 -0700

    [PATCH] mark IS_ERR as unlikely()
    
    It seems fair to assume that it is always unlikely that IS_ERR will return
    true.
    
    This patch changes the gcc-3.4-generated kernel text by ~500 bytes (less) so
    it's fair to assume that the compiler is indeed propagating unlikeliness out
    of inline functions.


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL)
  2015-07-31 10:28         ` Joe Perches
@ 2015-07-31 11:06           ` Viresh Kumar
  2015-07-31 18:00             ` Joe Perches
  0 siblings, 1 reply; 8+ messages in thread
From: Viresh Kumar @ 2015-07-31 11:06 UTC (permalink / raw)
  To: Joe Perches
  Cc: yalin wang, Kirill A. Shutemov, Andrew Morton, linaro-kernel,
	open list, Aneesh Kumar K.V, David Rientjes, Ebru Akagunduz,
	Johannes Weiner, Kirill A. Shutemov, open list:MEMORY MANAGEMENT,
	Mel Gorman, Michal Hocko, Vlastimil Babka

On 31-07-15, 03:28, Joe Perches wrote:
> If it's all fixed, then it's unlikely to be needed in checkpatch.

I thought checkpatch is more about not committing new mistakes, rather than
finding them in old code.

-- 
viresh

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL)
  2015-07-31 11:06           ` Viresh Kumar
@ 2015-07-31 18:00             ` Joe Perches
  2015-08-01 11:18               ` Viresh Kumar
  0 siblings, 1 reply; 8+ messages in thread
From: Joe Perches @ 2015-07-31 18:00 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: yalin wang, Kirill A. Shutemov, Andrew Morton, linaro-kernel,
	open list, Aneesh Kumar K.V, David Rientjes, Ebru Akagunduz,
	Johannes Weiner, Kirill A. Shutemov, open list:MEMORY MANAGEMENT,
	Mel Gorman, Michal Hocko, Vlastimil Babka

On Fri, 2015-07-31 at 16:36 +0530, Viresh Kumar wrote:
> On 31-07-15, 03:28, Joe Perches wrote:
> > If it's all fixed, then it's unlikely to be needed in checkpatch.
> 
> I thought checkpatch is more about not committing new mistakes, rather than
> finding them in old code.

True, but checkpatch is more about style than substance.

There are a lot of things that _could_ be added to the script
but don't have to be because of relative rarity.

The unanswered fundamental though is whether the unlikely use
in #define IS_ERR_VALUE is useful.

include/linux/err.h:21:#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)

How often does using unlikely here make the code smaller/faster
with more recent compilers than gcc 3.4?  Or even using gcc 3.4.


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL)
  2015-07-31 18:00             ` Joe Perches
@ 2015-08-01 11:18               ` Viresh Kumar
  0 siblings, 0 replies; 8+ messages in thread
From: Viresh Kumar @ 2015-08-01 11:18 UTC (permalink / raw)
  To: Joe Perches
  Cc: yalin wang, Kirill A. Shutemov, Andrew Morton, linaro-kernel,
	open list, Aneesh Kumar K.V, David Rientjes, Ebru Akagunduz,
	Johannes Weiner, Kirill A. Shutemov, open list:MEMORY MANAGEMENT,
	Mel Gorman, Michal Hocko, Vlastimil Babka

On 31-07-15, 11:00, Joe Perches wrote:
> On Fri, 2015-07-31 at 16:36 +0530, Viresh Kumar wrote:
> > On 31-07-15, 03:28, Joe Perches wrote:
> > > If it's all fixed, then it's unlikely to be needed in checkpatch.
> > 
> > I thought checkpatch is more about not committing new mistakes, rather than
> > finding them in old code.
> 
> True, but checkpatch is more about style than substance.
> 
> There are a lot of things that _could_ be added to the script
> but don't have to be because of relative rarity.
> 
> The unanswered fundamental though is whether the unlikely use
> in #define IS_ERR_VALUE is useful.
> 
> include/linux/err.h:21:#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
> 
> How often does using unlikely here make the code smaller/faster
> with more recent compilers than gcc 3.4?  Or even using gcc 3.4.

No idea :)


-- 
viresh

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-08-01 11:18 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <cover.1438331416.git.viresh.kumar@linaro.org>
2015-07-31  8:38 ` [PATCH 14/15] mm: Drop unlikely before IS_ERR(_OR_NULL) Viresh Kumar
2015-07-31  8:56   ` Kirill A. Shutemov
2015-07-31  9:32     ` yalin wang
2015-07-31  9:34       ` Viresh Kumar
2015-07-31 10:28         ` Joe Perches
2015-07-31 11:06           ` Viresh Kumar
2015-07-31 18:00             ` Joe Perches
2015-08-01 11:18               ` Viresh Kumar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).