* uuid updates for 4.13-rc
@ 2017-07-20 7:56 Christoph Hellwig
2017-07-20 7:56 ` [PATCH 1/3] uuid: fix incorrect uuid_equal conversion in test_uuid_test Christoph Hellwig
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Christoph Hellwig @ 2017-07-20 7:56 UTC (permalink / raw)
To: Andy Shevchenko, Amir Goldstein, Andreas Noever, Michael Jamet,
Mika Westerberg, Yehezkel Bernat
Cc: linux-kernel
Hi all,
this series removes fixes a bug in the previous uuid pull request and
removes the the uuid_be type. I had planned to send the
last patch for -rc1 already but held off to avoid merge conflicts
in linux-next.
In the meantime the thunderbolt code added a few new instances, so
patch once removes them. I'd like to get this small series into
4.13-rc so that 4.13 is released without the uuid_be type.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] uuid: fix incorrect uuid_equal conversion in test_uuid_test
2017-07-20 7:56 uuid updates for 4.13-rc Christoph Hellwig
@ 2017-07-20 7:56 ` Christoph Hellwig
2017-07-20 8:59 ` Amir Goldstein
2017-07-20 7:56 ` [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be Christoph Hellwig
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Christoph Hellwig @ 2017-07-20 7:56 UTC (permalink / raw)
To: Andy Shevchenko, Amir Goldstein, Andreas Noever, Michael Jamet,
Mika Westerberg, Yehezkel Bernat
Cc: linux-kernel
Fixes: df33767d ("uuid: hoist helpers uuid_equal() and uuid_copy() from xfs")
Reported-by: kernel test robot <xiaolong.ye@intel.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/test_uuid.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/test_uuid.c b/lib/test_uuid.c
index 478c049630b5..cd819c397dc7 100644
--- a/lib/test_uuid.c
+++ b/lib/test_uuid.c
@@ -82,7 +82,7 @@ static void __init test_uuid_test(const struct test_uuid_data *data)
test_uuid_failed("conversion", false, true, data->uuid, NULL);
total_tests++;
- if (uuid_equal(&data->be, &be)) {
+ if (!uuid_equal(&data->be, &be)) {
sprintf(buf, "%pUb", &be);
test_uuid_failed("cmp", false, true, data->uuid, buf);
}
--
2.11.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be
2017-07-20 7:56 uuid updates for 4.13-rc Christoph Hellwig
2017-07-20 7:56 ` [PATCH 1/3] uuid: fix incorrect uuid_equal conversion in test_uuid_test Christoph Hellwig
@ 2017-07-20 7:56 ` Christoph Hellwig
2017-07-20 9:01 ` Amir Goldstein
2017-07-24 9:28 ` Mika Westerberg
2017-07-20 7:56 ` [PATCH 3/3] uuid: remove uuid_be Christoph Hellwig
2017-07-20 9:09 ` uuid updates for 4.13-rc Andy Shevchenko
3 siblings, 2 replies; 9+ messages in thread
From: Christoph Hellwig @ 2017-07-20 7:56 UTC (permalink / raw)
To: Andy Shevchenko, Amir Goldstein, Andreas Noever, Michael Jamet,
Mika Westerberg, Yehezkel Bernat
Cc: linux-kernel
Switch thunderbolt to the new uuid type.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/thunderbolt/switch.c | 8 ++++----
drivers/thunderbolt/tb.h | 4 ++--
drivers/thunderbolt/tb_msgs.h | 12 ++++++------
3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
index ab3e8f410444..c6f41b7d38b0 100644
--- a/drivers/thunderbolt/switch.c
+++ b/drivers/thunderbolt/switch.c
@@ -30,7 +30,7 @@ static DEFINE_IDA(nvm_ida);
struct nvm_auth_status {
struct list_head list;
- uuid_be uuid;
+ uuid_t uuid;
u32 status;
};
@@ -47,7 +47,7 @@ static struct nvm_auth_status *__nvm_get_auth_status(const struct tb_switch *sw)
struct nvm_auth_status *st;
list_for_each_entry(st, &nvm_auth_status_cache, list) {
- if (!uuid_be_cmp(st->uuid, *sw->uuid))
+ if (uuid_equal(&st->uuid, sw->uuid))
return st;
}
@@ -1460,7 +1460,7 @@ struct tb_sw_lookup {
struct tb *tb;
u8 link;
u8 depth;
- const uuid_be *uuid;
+ const uuid_t *uuid;
};
static int tb_switch_match(struct device *dev, void *data)
@@ -1517,7 +1517,7 @@ struct tb_switch *tb_switch_find_by_link_depth(struct tb *tb, u8 link, u8 depth)
* Returned switch has reference count increased so the caller needs to
* call tb_switch_put() when done with the switch.
*/
-struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_be *uuid)
+struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_t *uuid)
{
struct tb_sw_lookup lookup;
struct device *dev;
diff --git a/drivers/thunderbolt/tb.h b/drivers/thunderbolt/tb.h
index 3d9f64676e58..e0deee4f1eb0 100644
--- a/drivers/thunderbolt/tb.h
+++ b/drivers/thunderbolt/tb.h
@@ -101,7 +101,7 @@ struct tb_switch {
struct tb_dma_port *dma_port;
struct tb *tb;
u64 uid;
- uuid_be *uuid;
+ uuid_t *uuid;
u16 vendor;
u16 device;
const char *vendor_name;
@@ -407,7 +407,7 @@ void tb_sw_set_unplugged(struct tb_switch *sw);
struct tb_switch *get_switch_at_route(struct tb_switch *sw, u64 route);
struct tb_switch *tb_switch_find_by_link_depth(struct tb *tb, u8 link,
u8 depth);
-struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_be *uuid);
+struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_t *uuid);
static inline unsigned int tb_switch_phy_port_from_link(unsigned int link)
{
diff --git a/drivers/thunderbolt/tb_msgs.h b/drivers/thunderbolt/tb_msgs.h
index 85b6d33c0919..de6441e4a060 100644
--- a/drivers/thunderbolt/tb_msgs.h
+++ b/drivers/thunderbolt/tb_msgs.h
@@ -179,7 +179,7 @@ struct icm_fr_pkg_get_topology_response {
struct icm_fr_event_device_connected {
struct icm_pkg_header hdr;
- uuid_be ep_uuid;
+ uuid_t ep_uuid;
u8 connection_key;
u8 connection_id;
u16 link_info;
@@ -193,7 +193,7 @@ struct icm_fr_event_device_connected {
struct icm_fr_pkg_approve_device {
struct icm_pkg_header hdr;
- uuid_be ep_uuid;
+ uuid_t ep_uuid;
u8 connection_key;
u8 connection_id;
u16 reserved;
@@ -207,7 +207,7 @@ struct icm_fr_event_device_disconnected {
struct icm_fr_pkg_add_device_key {
struct icm_pkg_header hdr;
- uuid_be ep_uuid;
+ uuid_t ep_uuid;
u8 connection_key;
u8 connection_id;
u16 reserved;
@@ -216,7 +216,7 @@ struct icm_fr_pkg_add_device_key {
struct icm_fr_pkg_add_device_key_response {
struct icm_pkg_header hdr;
- uuid_be ep_uuid;
+ uuid_t ep_uuid;
u8 connection_key;
u8 connection_id;
u16 reserved;
@@ -224,7 +224,7 @@ struct icm_fr_pkg_add_device_key_response {
struct icm_fr_pkg_challenge_device {
struct icm_pkg_header hdr;
- uuid_be ep_uuid;
+ uuid_t ep_uuid;
u8 connection_key;
u8 connection_id;
u16 reserved;
@@ -233,7 +233,7 @@ struct icm_fr_pkg_challenge_device {
struct icm_fr_pkg_challenge_device_response {
struct icm_pkg_header hdr;
- uuid_be ep_uuid;
+ uuid_t ep_uuid;
u8 connection_key;
u8 connection_id;
u16 reserved;
--
2.11.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/3] uuid: remove uuid_be
2017-07-20 7:56 uuid updates for 4.13-rc Christoph Hellwig
2017-07-20 7:56 ` [PATCH 1/3] uuid: fix incorrect uuid_equal conversion in test_uuid_test Christoph Hellwig
2017-07-20 7:56 ` [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be Christoph Hellwig
@ 2017-07-20 7:56 ` Christoph Hellwig
2017-07-20 9:09 ` uuid updates for 4.13-rc Andy Shevchenko
3 siblings, 0 replies; 9+ messages in thread
From: Christoph Hellwig @ 2017-07-20 7:56 UTC (permalink / raw)
To: Andy Shevchenko, Amir Goldstein, Andreas Noever, Michael Jamet,
Mika Westerberg, Yehezkel Bernat
Cc: linux-kernel
Everything uses uuid_t now.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
---
include/linux/uuid.h | 14 --------------
1 file changed, 14 deletions(-)
diff --git a/include/linux/uuid.h b/include/linux/uuid.h
index 2251e1925ea4..33b0bdbb613c 100644
--- a/include/linux/uuid.h
+++ b/include/linux/uuid.h
@@ -84,26 +84,12 @@ int guid_parse(const char *uuid, guid_t *u);
int uuid_parse(const char *uuid, uuid_t *u);
/* backwards compatibility, don't use in new code */
-typedef uuid_t uuid_be;
-#define UUID_BE(a, _b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
- UUID_INIT(a, _b, c, d0, d1, d2, d3, d4, d5, d6, d7)
-#define NULL_UUID_BE \
- UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, \
- 0x00, 0x00, 0x00, 0x00)
-
#define uuid_le_gen(u) guid_gen(u)
-#define uuid_be_gen(u) uuid_gen(u)
#define uuid_le_to_bin(guid, u) guid_parse(guid, u)
-#define uuid_be_to_bin(uuid, u) uuid_parse(uuid, u)
static inline int uuid_le_cmp(const guid_t u1, const guid_t u2)
{
return memcmp(&u1, &u2, sizeof(guid_t));
}
-static inline int uuid_be_cmp(const uuid_t u1, const uuid_t u2)
-{
- return memcmp(&u1, &u2, sizeof(uuid_t));
-}
-
#endif
--
2.11.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] uuid: fix incorrect uuid_equal conversion in test_uuid_test
2017-07-20 7:56 ` [PATCH 1/3] uuid: fix incorrect uuid_equal conversion in test_uuid_test Christoph Hellwig
@ 2017-07-20 8:59 ` Amir Goldstein
0 siblings, 0 replies; 9+ messages in thread
From: Amir Goldstein @ 2017-07-20 8:59 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Andy Shevchenko, Andreas Noever, Michael Jamet, Mika Westerberg,
Yehezkel Bernat, linux-kernel
On Thu, Jul 20, 2017 at 10:56 AM, Christoph Hellwig <hch@lst.de> wrote:
> Fixes: df33767d ("uuid: hoist helpers uuid_equal() and uuid_copy() from xfs")
> Reported-by: kernel test robot <xiaolong.ye@intel.com>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Oops
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
> ---
> lib/test_uuid.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/test_uuid.c b/lib/test_uuid.c
> index 478c049630b5..cd819c397dc7 100644
> --- a/lib/test_uuid.c
> +++ b/lib/test_uuid.c
> @@ -82,7 +82,7 @@ static void __init test_uuid_test(const struct test_uuid_data *data)
> test_uuid_failed("conversion", false, true, data->uuid, NULL);
>
> total_tests++;
> - if (uuid_equal(&data->be, &be)) {
> + if (!uuid_equal(&data->be, &be)) {
> sprintf(buf, "%pUb", &be);
> test_uuid_failed("cmp", false, true, data->uuid, buf);
> }
> --
> 2.11.0
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be
2017-07-20 7:56 ` [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be Christoph Hellwig
@ 2017-07-20 9:01 ` Amir Goldstein
2017-07-24 9:28 ` Mika Westerberg
1 sibling, 0 replies; 9+ messages in thread
From: Amir Goldstein @ 2017-07-20 9:01 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Andy Shevchenko, Andreas Noever, Michael Jamet, Mika Westerberg,
Yehezkel Bernat, linux-kernel
On Thu, Jul 20, 2017 at 10:56 AM, Christoph Hellwig <hch@lst.de> wrote:
> Switch thunderbolt to the new uuid type.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
> ---
> drivers/thunderbolt/switch.c | 8 ++++----
> drivers/thunderbolt/tb.h | 4 ++--
> drivers/thunderbolt/tb_msgs.h | 12 ++++++------
> 3 files changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
> index ab3e8f410444..c6f41b7d38b0 100644
> --- a/drivers/thunderbolt/switch.c
> +++ b/drivers/thunderbolt/switch.c
> @@ -30,7 +30,7 @@ static DEFINE_IDA(nvm_ida);
>
> struct nvm_auth_status {
> struct list_head list;
> - uuid_be uuid;
> + uuid_t uuid;
> u32 status;
> };
>
> @@ -47,7 +47,7 @@ static struct nvm_auth_status *__nvm_get_auth_status(const struct tb_switch *sw)
> struct nvm_auth_status *st;
>
> list_for_each_entry(st, &nvm_auth_status_cache, list) {
> - if (!uuid_be_cmp(st->uuid, *sw->uuid))
> + if (uuid_equal(&st->uuid, sw->uuid))
> return st;
> }
>
> @@ -1460,7 +1460,7 @@ struct tb_sw_lookup {
> struct tb *tb;
> u8 link;
> u8 depth;
> - const uuid_be *uuid;
> + const uuid_t *uuid;
> };
>
> static int tb_switch_match(struct device *dev, void *data)
> @@ -1517,7 +1517,7 @@ struct tb_switch *tb_switch_find_by_link_depth(struct tb *tb, u8 link, u8 depth)
> * Returned switch has reference count increased so the caller needs to
> * call tb_switch_put() when done with the switch.
> */
> -struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_be *uuid)
> +struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_t *uuid)
> {
> struct tb_sw_lookup lookup;
> struct device *dev;
> diff --git a/drivers/thunderbolt/tb.h b/drivers/thunderbolt/tb.h
> index 3d9f64676e58..e0deee4f1eb0 100644
> --- a/drivers/thunderbolt/tb.h
> +++ b/drivers/thunderbolt/tb.h
> @@ -101,7 +101,7 @@ struct tb_switch {
> struct tb_dma_port *dma_port;
> struct tb *tb;
> u64 uid;
> - uuid_be *uuid;
> + uuid_t *uuid;
> u16 vendor;
> u16 device;
> const char *vendor_name;
> @@ -407,7 +407,7 @@ void tb_sw_set_unplugged(struct tb_switch *sw);
> struct tb_switch *get_switch_at_route(struct tb_switch *sw, u64 route);
> struct tb_switch *tb_switch_find_by_link_depth(struct tb *tb, u8 link,
> u8 depth);
> -struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_be *uuid);
> +struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_t *uuid);
>
> static inline unsigned int tb_switch_phy_port_from_link(unsigned int link)
> {
> diff --git a/drivers/thunderbolt/tb_msgs.h b/drivers/thunderbolt/tb_msgs.h
> index 85b6d33c0919..de6441e4a060 100644
> --- a/drivers/thunderbolt/tb_msgs.h
> +++ b/drivers/thunderbolt/tb_msgs.h
> @@ -179,7 +179,7 @@ struct icm_fr_pkg_get_topology_response {
>
> struct icm_fr_event_device_connected {
> struct icm_pkg_header hdr;
> - uuid_be ep_uuid;
> + uuid_t ep_uuid;
> u8 connection_key;
> u8 connection_id;
> u16 link_info;
> @@ -193,7 +193,7 @@ struct icm_fr_event_device_connected {
>
> struct icm_fr_pkg_approve_device {
> struct icm_pkg_header hdr;
> - uuid_be ep_uuid;
> + uuid_t ep_uuid;
> u8 connection_key;
> u8 connection_id;
> u16 reserved;
> @@ -207,7 +207,7 @@ struct icm_fr_event_device_disconnected {
>
> struct icm_fr_pkg_add_device_key {
> struct icm_pkg_header hdr;
> - uuid_be ep_uuid;
> + uuid_t ep_uuid;
> u8 connection_key;
> u8 connection_id;
> u16 reserved;
> @@ -216,7 +216,7 @@ struct icm_fr_pkg_add_device_key {
>
> struct icm_fr_pkg_add_device_key_response {
> struct icm_pkg_header hdr;
> - uuid_be ep_uuid;
> + uuid_t ep_uuid;
> u8 connection_key;
> u8 connection_id;
> u16 reserved;
> @@ -224,7 +224,7 @@ struct icm_fr_pkg_add_device_key_response {
>
> struct icm_fr_pkg_challenge_device {
> struct icm_pkg_header hdr;
> - uuid_be ep_uuid;
> + uuid_t ep_uuid;
> u8 connection_key;
> u8 connection_id;
> u16 reserved;
> @@ -233,7 +233,7 @@ struct icm_fr_pkg_challenge_device {
>
> struct icm_fr_pkg_challenge_device_response {
> struct icm_pkg_header hdr;
> - uuid_be ep_uuid;
> + uuid_t ep_uuid;
> u8 connection_key;
> u8 connection_id;
> u16 reserved;
> --
> 2.11.0
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: uuid updates for 4.13-rc
2017-07-20 7:56 uuid updates for 4.13-rc Christoph Hellwig
` (2 preceding siblings ...)
2017-07-20 7:56 ` [PATCH 3/3] uuid: remove uuid_be Christoph Hellwig
@ 2017-07-20 9:09 ` Andy Shevchenko
3 siblings, 0 replies; 9+ messages in thread
From: Andy Shevchenko @ 2017-07-20 9:09 UTC (permalink / raw)
To: Christoph Hellwig, Amir Goldstein, Andreas Noever, Michael Jamet,
Mika Westerberg, Yehezkel Bernat
Cc: linux-kernel
On Thu, 2017-07-20 at 09:56 +0200, Christoph Hellwig wrote:
> Hi all,
>
> this series removes fixes a bug in the previous uuid pull request and
> removes the the uuid_be type. I had planned to send the
> last patch for -rc1 already but held off to avoid merge conflicts
> in linux-next.
>
> In the meantime the thunderbolt code added a few new instances, so
> patch once removes them. I'd like to get this small series into
> 4.13-rc so that 4.13 is released without the uuid_be type.
All patches in this series looks reasonable to me (1 is obvious bug fix,
2 is what we discussed with Mika, 3 obvious outcome).
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
I have sent uuid_le clean up, it looks I need to rebase it on top of
this series. Though I'm still waiting for comments, tags there...
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be
2017-07-20 7:56 ` [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be Christoph Hellwig
2017-07-20 9:01 ` Amir Goldstein
@ 2017-07-24 9:28 ` Mika Westerberg
2017-07-24 15:50 ` Christoph Hellwig
1 sibling, 1 reply; 9+ messages in thread
From: Mika Westerberg @ 2017-07-24 9:28 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Andy Shevchenko, Amir Goldstein, Andreas Noever, Michael Jamet,
Yehezkel Bernat, linux-kernel
On Thu, Jul 20, 2017 at 09:56:23AM +0200, Christoph Hellwig wrote:
> Switch thunderbolt to the new uuid type.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
You have a typo in $subject: thunderbold -> thunderbolt.
Otherwise looks good and still works fine :)
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be
2017-07-24 9:28 ` Mika Westerberg
@ 2017-07-24 15:50 ` Christoph Hellwig
0 siblings, 0 replies; 9+ messages in thread
From: Christoph Hellwig @ 2017-07-24 15:50 UTC (permalink / raw)
To: Mika Westerberg
Cc: Christoph Hellwig, Andy Shevchenko, Amir Goldstein,
Andreas Noever, Michael Jamet, Yehezkel Bernat, linux-kernel
On Mon, Jul 24, 2017 at 12:28:59PM +0300, Mika Westerberg wrote:
> On Thu, Jul 20, 2017 at 09:56:23AM +0200, Christoph Hellwig wrote:
> > Switch thunderbolt to the new uuid type.
> >
> > Signed-off-by: Christoph Hellwig <hch@lst.de>
>
> You have a typo in $subject: thunderbold -> thunderbolt.
>
> Otherwise looks good and still works fine :)
Thanks, fixed.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2017-07-24 15:51 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-20 7:56 uuid updates for 4.13-rc Christoph Hellwig
2017-07-20 7:56 ` [PATCH 1/3] uuid: fix incorrect uuid_equal conversion in test_uuid_test Christoph Hellwig
2017-07-20 8:59 ` Amir Goldstein
2017-07-20 7:56 ` [PATCH 2/3] thunderbold: use uuid_t instead of uuid_be Christoph Hellwig
2017-07-20 9:01 ` Amir Goldstein
2017-07-24 9:28 ` Mika Westerberg
2017-07-24 15:50 ` Christoph Hellwig
2017-07-20 7:56 ` [PATCH 3/3] uuid: remove uuid_be Christoph Hellwig
2017-07-20 9:09 ` uuid updates for 4.13-rc Andy Shevchenko
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).